mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
GP-3512 - Created 'ListenerSet' for improved listener usage
This commit is contained in:
parent
41076f3af0
commit
08a900afad
77 changed files with 1669 additions and 1564 deletions
|
@ -32,12 +32,12 @@ import ghidra.util.datastruct.ListenerSet;
|
|||
public abstract class AbstractDebuggerObjectModel implements SpiDebuggerObjectModel {
|
||||
public final Object lock = new Object();
|
||||
public final Object cbLock = new Object();
|
||||
protected final ExecutorService clientExecutor =
|
||||
Executors.newSingleThreadExecutor(new BasicThreadFactory.Builder()
|
||||
.namingPattern(getClass().getSimpleName() + "-thread-%d")
|
||||
protected final ExecutorService clientExecutor = Executors.newSingleThreadExecutor(
|
||||
new BasicThreadFactory.Builder().namingPattern(getClass().getSimpleName() + "-thread-%d")
|
||||
.build());
|
||||
|
||||
protected final ListenerSet<DebuggerModelListener> listeners =
|
||||
new ListenerSet<>(DebuggerModelListener.class, clientExecutor);
|
||||
new ListenerSet<>(DebuggerModelListener.class, true);
|
||||
|
||||
protected SpiTargetObject root;
|
||||
protected boolean rootAdded;
|
||||
|
@ -98,7 +98,10 @@ public abstract class AbstractDebuggerObjectModel implements SpiDebuggerObjectMo
|
|||
return null;
|
||||
});
|
||||
this.completedRoot.completeAsync(() -> root, clientExecutor);
|
||||
listeners.fire.rootAdded(root);
|
||||
|
||||
clientExecutor.execute(() -> {
|
||||
listeners.invoke().rootAdded(root);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -200,7 +203,7 @@ public abstract class AbstractDebuggerObjectModel implements SpiDebuggerObjectMo
|
|||
|
||||
/**
|
||||
* Ensure that dependent computations occur on the client executor
|
||||
*
|
||||
*
|
||||
* @param <T> the type of the future value
|
||||
* @param v the future
|
||||
* @return a future which completes after the given one on the client executor
|
||||
|
@ -249,13 +252,11 @@ public abstract class AbstractDebuggerObjectModel implements SpiDebuggerObjectMo
|
|||
}
|
||||
DefaultTargetObject<?, ?> dtoParent = (DefaultTargetObject<?, ?>) delegate;
|
||||
if (PathUtils.isIndex(path)) {
|
||||
dtoParent.changeElements(List.of(PathUtils.getIndex(path)), List.of(),
|
||||
"Replaced");
|
||||
dtoParent.changeElements(List.of(PathUtils.getIndex(path)), List.of(), "Replaced");
|
||||
}
|
||||
else {
|
||||
assert PathUtils.isName(path);
|
||||
dtoParent.changeAttributes(List.of(PathUtils.getKey(path)), Map.of(),
|
||||
"Replaced");
|
||||
dtoParent.changeAttributes(List.of(PathUtils.getKey(path)), Map.of(), "Replaced");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -304,6 +304,6 @@ public abstract class AbstractTargetObject<P extends TargetObject> implements Sp
|
|||
|
||||
@Override
|
||||
public DebuggerModelListener broadcast() {
|
||||
return model.listeners.fire;
|
||||
return model.listeners.invoke();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -263,6 +263,6 @@ public class TestDebuggerObjectModel extends EmptyDebuggerObjectModel {
|
|||
}
|
||||
|
||||
public DebuggerModelListener fire() {
|
||||
return listeners.fire;
|
||||
return listeners.invoke();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue