GP-3512 - Created 'ListenerSet' for improved listener usage

This commit is contained in:
Dan 2023-09-15 15:11:57 -04:00 committed by dragonmacher
parent 41076f3af0
commit 08a900afad
77 changed files with 1669 additions and 1564 deletions

View file

@ -42,7 +42,7 @@ public class DbgDetachCommand extends AbstractDbgCommand<Void> {
manager.fireThreadExited(t.getId(), process, pending);
t.remove();
}
manager.getEventListeners().fire.processRemoved(process.getId(), DbgCause.Causes.UNCLAIMED);
manager.getEventListeners().invoke().processRemoved(process.getId(), DbgCause.Causes.UNCLAIMED);
return null;
}

View file

@ -29,7 +29,7 @@ public class DbgDebugInputCallbacks implements DebugInputCallbacks {
@Override
public void startInput(long bufsize) {
manager.getEventListeners().fire.promptChanged(">>>");
manager.getEventListeners().invoke().promptChanged(">>>");
CompletableFuture<String> cf = new CompletableFuture<String>();
try {
manager.setContinuation(cf);

View file

@ -206,7 +206,7 @@ public class DbgManagerImpl implements DbgManager {
private final Map<Class<?>, DebugStatus> statusMap = new LinkedHashMap<>();
private final Map<String, DebugStatus> statusByNameMap = new LinkedHashMap<>();
private final ListenerSet<DbgEventsListener> listenersEvent =
new ListenerSet<>(DbgEventsListener.class);
new ListenerSet<>(DbgEventsListener.class, true);
private DebugEventInformation lastEventInformation;
private DbgSession currentSession;
@ -251,8 +251,8 @@ public class DbgManagerImpl implements DbgManager {
thread.add();
if (fire) {
Causes cause = DbgCause.Causes.UNCLAIMED;
getEventListeners().fire.threadCreated(thread, cause);
getEventListeners().fire.threadSelected(thread, null, cause);
getEventListeners().invoke().threadCreated(thread, cause);
getEventListeners().invoke().threadSelected(thread, null, cause);
}
return threads.get(id);
}
@ -294,7 +294,7 @@ public class DbgManagerImpl implements DbgManager {
for (DebugThreadId tid : toRemove) {
removeThread(tid);
}
getEventListeners().fire.processRemoved(id, cause);
getEventListeners().invoke().processRemoved(id, cause);
}
}
@ -303,7 +303,7 @@ public class DbgManagerImpl implements DbgManager {
*
* @param process the process that now has focus
* @param cause the cause of the focus change
* @param fire signal listeners
* @param forEach() signal listeners
* @return success status
*/
@Override
@ -326,7 +326,7 @@ public class DbgManagerImpl implements DbgManager {
DbgProcessImpl process = new DbgProcessImpl(this, id, pid, name);
process.add();
if (fire) {
getEventListeners().fire.processAdded(process, DbgCause.Causes.UNCLAIMED);
getEventListeners().invoke().processAdded(process, DbgCause.Causes.UNCLAIMED);
}
return processes.get(id);
}
@ -344,7 +344,7 @@ public class DbgManagerImpl implements DbgManager {
if (sessions.remove(id) == null) {
throw new IllegalArgumentException("There is no session with id " + id);
}
getEventListeners().fire.sessionRemoved(id, cause);
getEventListeners().invoke().sessionRemoved(id, cause);
}
}
@ -366,7 +366,7 @@ public class DbgManagerImpl implements DbgManager {
DbgSessionImpl session = new DbgSessionImpl(this, id);
session.add();
if (fire) {
getEventListeners().fire.sessionAdded(session, DbgCause.Causes.UNCLAIMED);
getEventListeners().invoke().sessionAdded(session, DbgCause.Causes.UNCLAIMED);
}
}
return sessions.get(id);
@ -748,8 +748,8 @@ public class DbgManagerImpl implements DbgManager {
DebugBreakpoint bp = evt.getInfo();
DbgBreakpointInfo info = new DbgBreakpointInfo(bp, getEventProcess(), getEventThread());
getEventListeners().fire.threadSelected(eventThread, null, evt.getCause());
getEventListeners().fire.breakpointHit(info, evt.getCause());
getEventListeners().invoke().threadSelected(eventThread, null, evt.getCause());
getEventListeners().invoke().breakpointHit(info, evt.getCause());
String key = Integer.toHexString(bp.getId());
if (statusByNameMap.containsKey(key)) {
@ -766,8 +766,8 @@ public class DbgManagerImpl implements DbgManager {
* @return retval handling/break status
*/
protected DebugStatus processException(DbgExceptionEvent evt, Void v) {
getEventListeners().fire.eventSelected(evt, evt.getCause());
getEventListeners().fire.threadSelected(eventThread, null, evt.getCause());
getEventListeners().invoke().eventSelected(evt, evt.getCause());
getEventListeners().invoke().threadSelected(eventThread, null, evt.getCause());
DebugExceptionRecord64 info = evt.getInfo();
String key = Integer.toHexString(info.code);
@ -789,9 +789,9 @@ public class DbgManagerImpl implements DbgManager {
DbgProcessImpl process = getCurrentProcess();
DbgThreadImpl thread = getThreadFromDebugProcessInfo(process, evt.getInfo());
getEventListeners().fire.eventSelected(evt, evt.getCause());
getEventListeners().fire.threadCreated(thread, DbgCause.Causes.UNCLAIMED);
getEventListeners().fire.threadSelected(thread, null, evt.getCause());
getEventListeners().invoke().eventSelected(evt, evt.getCause());
getEventListeners().invoke().threadCreated(thread, DbgCause.Causes.UNCLAIMED);
getEventListeners().invoke().threadSelected(thread, null, evt.getCause());
String key = eventId.id();
if (statusByNameMap.containsKey(key)) {
@ -815,8 +815,8 @@ public class DbgManagerImpl implements DbgManager {
thread.remove();
}
process.threadExited(eventId);
getEventListeners().fire.eventSelected(evt, evt.getCause());
getEventListeners().fire.threadExited(eventId, process, evt.getCause());
getEventListeners().invoke().eventSelected(evt, evt.getCause());
getEventListeners().invoke().threadExited(eventId, process, evt.getCause());
String key = eventId.id();
if (statusByNameMap.containsKey(key)) {
@ -842,7 +842,7 @@ public class DbgManagerImpl implements DbgManager {
//currentThread = evt.getThread();
currentThread.setState(evt.getState(), evt.getCause(), evt.getReason());
getEventListeners().fire.threadSelected(currentThread, evt.getFrame(), evt.getCause());
getEventListeners().invoke().threadSelected(currentThread, evt.getFrame(), evt.getCause());
String key = eventId.id();
if (statusByNameMap.containsKey(key)) {
@ -861,9 +861,9 @@ public class DbgManagerImpl implements DbgManager {
protected DebugStatus processProcessCreated(DbgProcessCreatedEvent evt, Void v) {
DebugProcessInfo info = evt.getInfo();
DbgProcessImpl proc = getProcessFromDebugProcessInfo(info);
getEventListeners().fire.eventSelected(evt, evt.getCause());
getEventListeners().fire.processAdded(proc, evt.getCause());
getEventListeners().fire.processSelected(proc, evt.getCause());
getEventListeners().invoke().eventSelected(evt, evt.getCause());
getEventListeners().invoke().processAdded(proc, evt.getCause());
getEventListeners().invoke().processSelected(proc, evt.getCause());
getThreadFromDebugProcessInfo(proc, info.initialThreadInfo);
//getEventListeners().fire.threadCreated(thread, evt.getCause());
@ -892,9 +892,9 @@ public class DbgManagerImpl implements DbgManager {
DbgProcessImpl process = getCurrentProcess();
process.setExitCode(Long.valueOf(evt.getInfo()));
getEventListeners().fire.eventSelected(evt, evt.getCause());
getEventListeners().fire.threadExited(eventId, process, evt.getCause());
getEventListeners().fire.processExited(process, evt.getCause());
getEventListeners().invoke().eventSelected(evt, evt.getCause());
getEventListeners().invoke().threadExited(eventId, process, evt.getCause());
getEventListeners().invoke().processExited(process, evt.getCause());
for (DebugBreakpoint bpt : getBreakpoints()) {
breaksById.remove(bpt.getId());
@ -903,7 +903,7 @@ public class DbgManagerImpl implements DbgManager {
thread.remove();
}
process.remove(evt.getCause());
getEventListeners().fire.processRemoved(process.getId(), evt.getCause());
getEventListeners().invoke().processRemoved(process.getId(), evt.getCause());
String key = process.getId().id();
if (statusByNameMap.containsKey(key)) {
@ -923,7 +923,7 @@ public class DbgManagerImpl implements DbgManager {
DebugThreadId eventId = updateState();
currentProcess = evt.getProcess();
getEventListeners().fire.processSelected(currentProcess, evt.getCause());
getEventListeners().invoke().processSelected(currentProcess, evt.getCause());
String key = eventId.id();
if (statusByNameMap.containsKey(key)) {
@ -944,8 +944,8 @@ public class DbgManagerImpl implements DbgManager {
DbgProcessImpl process = getCurrentProcess();
DebugModuleInfo info = evt.getInfo();
process.moduleLoaded(info);
getEventListeners().fire.eventSelected(evt, evt.getCause());
getEventListeners().fire.moduleLoaded(process, info, evt.getCause());
getEventListeners().invoke().eventSelected(evt, evt.getCause());
getEventListeners().invoke().moduleLoaded(process, info, evt.getCause());
String key = info.getModuleName();
if (statusByNameMap.containsKey(key)) {
@ -966,8 +966,8 @@ public class DbgManagerImpl implements DbgManager {
DbgProcessImpl process = getCurrentProcess();
DebugModuleInfo info = evt.getInfo();
process.moduleUnloaded(info);
getEventListeners().fire.eventSelected(evt, evt.getCause());
getEventListeners().fire.moduleUnloaded(process, info, evt.getCause());
getEventListeners().invoke().eventSelected(evt, evt.getCause());
getEventListeners().invoke().moduleUnloaded(process, info, evt.getCause());
String key = info.getModuleName();
if (statusByNameMap.containsKey(key)) {
@ -1012,7 +1012,7 @@ public class DbgManagerImpl implements DbgManager {
//System.err.println("RUNNING " + id);
dbgState = DbgState.RUNNING;
// NB: Needed by GADP variants, but not IN-VM
getEventListeners().fire.memoryChanged(currentProcess, 0L, 0,
getEventListeners().invoke().memoryChanged(currentProcess, 0L, 0,
evt.getCause());
processEvent(new DbgRunningEvent(eventThread.getId()));
}
@ -1056,7 +1056,7 @@ public class DbgManagerImpl implements DbgManager {
if (key.value() == id) {
DbgThread thread = getThread(key);
if (thread != null) {
getEventListeners().fire.threadSelected(thread, null, evt.getCause());
getEventListeners().invoke().threadSelected(thread, null, evt.getCause());
}
processEvent(new DbgPromptChangedEvent(getControl().getPromptText()));
break;
@ -1080,7 +1080,7 @@ public class DbgManagerImpl implements DbgManager {
DebugThreadId eventId = updateState();
currentSession = evt.getSession();
getEventListeners().fire.sessionSelected(currentSession, evt.getCause());
getEventListeners().invoke().sessionSelected(currentSession, evt.getCause());
String key = eventId.id();
if (statusByNameMap.containsKey(key)) {
@ -1118,23 +1118,23 @@ public class DbgManagerImpl implements DbgManager {
protected void processDebuggeeStateChanged(DbgDebuggeeStateChangeEvent evt, Void v) {
if (evt.getFlags().contains(ChangeDebuggeeState.DATA)) {
getEventListeners().fire.memoryChanged(currentProcess, 0L, 0, evt.getCause());
getEventListeners().invoke().memoryChanged(currentProcess, 0L, 0, evt.getCause());
}
}
protected void processSystemErrorEvent(DbgSystemErrorEvent evt, Void v) {
getEventListeners().fire.eventSelected(evt, evt.getCause());
getEventListeners().invoke().eventSelected(evt, evt.getCause());
String error = "SystemError " + evt.getError() + ":" + evt.getLevel();
getEventListeners().fire.consoleOutput(error, 0);
getEventListeners().invoke().consoleOutput(error, 0);
}
protected void processConsoleOutput(DbgConsoleOutputEvent evt, Void v) {
getEventListeners().fire.eventSelected(evt, evt.getCause());
getEventListeners().fire.consoleOutput(evt.getInfo(), evt.getMask());
getEventListeners().invoke().eventSelected(evt, evt.getCause());
getEventListeners().invoke().consoleOutput(evt.getInfo(), evt.getMask());
}
protected void processPromptChanged(DbgPromptChangedEvent evt, Void v) {
getEventListeners().fire.promptChanged(evt.getPrompt());
getEventListeners().invoke().promptChanged(evt.getPrompt());
}
/**
@ -1215,7 +1215,7 @@ public class DbgManagerImpl implements DbgManager {
@Internal
public void doBreakpointCreated(DbgBreakpointInfo newInfo, DbgCause cause) {
addKnownBreakpoint(newInfo, true);
getEventListeners().fire.breakpointCreated(newInfo, cause);
getEventListeners().invoke().breakpointCreated(newInfo, cause);
}
/**
@ -1227,7 +1227,7 @@ public class DbgManagerImpl implements DbgManager {
@Internal
public void doBreakpointModified(DbgBreakpointInfo newInfo, DbgCause cause) {
DbgBreakpointInfo oldInfo = addKnownBreakpoint(newInfo, true);
getEventListeners().fire.breakpointModified(newInfo, oldInfo, cause);
getEventListeners().invoke().breakpointModified(newInfo, oldInfo, cause);
}
/**
@ -1242,7 +1242,7 @@ public class DbgManagerImpl implements DbgManager {
if (oldInfo == null) {
return;
}
getEventListeners().fire.breakpointDeleted(oldInfo, cause);
getEventListeners().invoke().breakpointDeleted(oldInfo, cause);
oldInfo.dispose();
}
@ -1251,7 +1251,7 @@ public class DbgManagerImpl implements DbgManager {
if (Objects.equals(newInfo, oldInfo)) {
return;
}
getEventListeners().fire.breakpointModified(newInfo, oldInfo, cause);
getEventListeners().invoke().breakpointModified(newInfo, oldInfo, cause);
}
@Internal
@ -1637,7 +1637,7 @@ public class DbgManagerImpl implements DbgManager {
}
public void fireThreadExited(DebugThreadId id, DbgProcessImpl process, DbgCause cause) {
getEventListeners().fire.threadExited(id, process, cause);
getEventListeners().invoke().threadExited(id, process, cause);
}
@Override
@ -1771,7 +1771,7 @@ public class DbgManagerImpl implements DbgManager {
if (mirror != null) {
mirror.setOffset(currentProcess.getOffset());
currentProcess = eventProcess = mirror;
getEventListeners().fire.processSelected(eventProcess, Causes.UNCLAIMED);
getEventListeners().invoke().processSelected(eventProcess, Causes.UNCLAIMED);
}
});
}
@ -1786,7 +1786,7 @@ public class DbgManagerImpl implements DbgManager {
if (mirror != null) {
mirror.setOffset(currentThread.getOffset());
currentThread = eventThread = mirror;
getEventListeners().fire.threadSelected(eventThread, null, Causes.UNCLAIMED);
getEventListeners().invoke().threadSelected(eventThread, null, Causes.UNCLAIMED);
}
});
}
@ -1795,7 +1795,7 @@ public class DbgManagerImpl implements DbgManager {
eventProcess = getProcessComputeIfAbsent(epid, so.getCurrentProcessSystemId(), so.getCurrentProcessExecutableName(), true);
currentThread = eventThread = getThreadComputeIfAbsent(etid, (DbgProcessImpl) eventProcess,
so.getCurrentThreadSystemId(), false);
getEventListeners().fire.threadSelected(eventThread, null, Causes.UNCLAIMED);
getEventListeners().invoke().threadSelected(eventThread, null, Causes.UNCLAIMED);
}
}

View file

@ -58,7 +58,7 @@ public class DbgModuleImpl implements DbgModule {
*/
public void add() {
process.addModule(this);
manager.getEventListeners().fire.moduleLoaded(process, info, Causes.UNCLAIMED);
manager.getEventListeners().invoke().moduleLoaded(process, info, Causes.UNCLAIMED);
}
/**
@ -66,7 +66,7 @@ public class DbgModuleImpl implements DbgModule {
*/
public void remove() {
process.removeModule(name);
manager.getEventListeners().fire.moduleUnloaded(process, info, Causes.UNCLAIMED);
manager.getEventListeners().invoke().moduleUnloaded(process, info, Causes.UNCLAIMED);
}
@Override

View file

@ -93,7 +93,7 @@ public class DbgThreadImpl implements DbgThread {
//manager.getEventListeners().fire.threadCreated(this, DbgCause.Causes.UNCLAIMED);
process.addThread(this);
state.addChangeListener((oldState, newState, pair) -> {
this.manager.getEventListeners().fire.threadStateChanged(this, newState, pair.cause,
this.manager.getEventListeners().invoke().threadStateChanged(this, newState, pair.cause,
pair.reason);
});
}

View file

@ -174,12 +174,12 @@ public interface DbgModelTargetBreakpointSpec extends //
/**
* Update the enabled field
*
*
* <p>
* This does not actually toggle the breakpoint. It just updates the field and calls the proper
* listeners. To actually toggle the breakpoint, use {@link #toggle(boolean)} instead, which if
* effective, should eventually cause this method to be called.
*
*
* @param enabled true if enabled, false if disabled
* @param reason a description of the cause (not really used, yet)
*/
@ -207,8 +207,8 @@ public interface DbgModelTargetBreakpointSpec extends //
public default void breakpointHit() {
DbgModelTargetThread targetThread =
getParentProcess().getThreads().getTargetThread(getManager().getEventThread());
getActions().fire.breakpointHit((DbgModelTargetBreakpointSpec) getProxy(), targetThread,
null, this);
getActions().invoke()
.breakpointHit((DbgModelTargetBreakpointSpec) getProxy(), targetThread, null, this);
}
}

View file

@ -124,7 +124,7 @@ public interface DbgModelTargetRegisterBank extends DbgModelTargetObject, Target
getParentThread().getThread().writeRegisters(toWrite).handle(seq::next);
// TODO: Should probably filter only effective and normalized writes in the callback
}).then(seq -> {
manager.getEventListeners().fire.threadStateChanged(thread, thread.getState(),
manager.getEventListeners().invoke().threadStateChanged(thread, thread.getState(),
DbgCause.Causes.UNCLAIMED, DbgReason.Reasons.NONE);
broadcast().registersUpdated(getProxy(), values);
seq.exit();

View file

@ -110,7 +110,7 @@ public class DbgModelImpl extends AbstractDbgModel implements DebuggerObjectMode
@Override
public void terminate() throws IOException {
listeners.fire.modelClosed(DebuggerModelClosedReason.NORMAL);
listeners.invoke().modelClosed(DebuggerModelClosedReason.NORMAL);
root.invalidateSubtree(root, "Dbgeng is terminating");
dbg.terminate();
}

View file

@ -15,7 +15,8 @@
*/
package agent.dbgeng.model.impl;
import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import agent.dbgeng.manager.breakpoint.DbgBreakpointInfo;
@ -27,33 +28,21 @@ import ghidra.dbg.target.TargetBreakpointSpec;
import ghidra.dbg.target.schema.TargetAttributeType;
import ghidra.dbg.target.schema.TargetObjectSchemaInfo;
import ghidra.dbg.util.PathUtils;
import ghidra.util.datastruct.ListenerMap.ListenerEntry;
import ghidra.util.datastruct.ListenerSet;
@TargetObjectSchemaInfo(
name = "BreakpointSpec",
attributes = { //
@TargetAttributeType( //
@TargetObjectSchemaInfo(name = "BreakpointSpec", attributes = { //
@TargetAttributeType( //
name = TargetBreakpointSpec.CONTAINER_ATTRIBUTE_NAME, //
type = DbgModelTargetBreakpointContainerImpl.class), //
@TargetAttributeType( //
@TargetAttributeType( //
name = TargetBreakpointLocation.SPEC_ATTRIBUTE_NAME, //
type = DbgModelTargetBreakpointSpecImpl.class), //
@TargetAttributeType(
name = DbgModelTargetBreakpointSpecImpl.BPT_TYPE_ATTRIBUTE_NAME,
type = String.class), //
@TargetAttributeType(
name = DbgModelTargetBreakpointSpecImpl.BPT_DISP_ATTRIBUTE_NAME,
type = String.class), //
@TargetAttributeType(
name = DbgModelTargetBreakpointSpecImpl.BPT_PENDING_ATTRIBUTE_NAME,
type = String.class), //
@TargetAttributeType(
name = DbgModelTargetBreakpointSpecImpl.BPT_TIMES_ATTRIBUTE_NAME,
type = Integer.class), //
@TargetAttributeType(type = Void.class) //
},
canonicalContainer = true)
@TargetAttributeType(name = DbgModelTargetBreakpointSpecImpl.BPT_TYPE_ATTRIBUTE_NAME, type = String.class), //
@TargetAttributeType(name = DbgModelTargetBreakpointSpecImpl.BPT_DISP_ATTRIBUTE_NAME, type = String.class), //
@TargetAttributeType(name = DbgModelTargetBreakpointSpecImpl.BPT_PENDING_ATTRIBUTE_NAME, type = String.class), //
@TargetAttributeType(name = DbgModelTargetBreakpointSpecImpl.BPT_TIMES_ATTRIBUTE_NAME, type = Integer.class), //
@TargetAttributeType(type = Void.class) //
}, canonicalContainer = true)
public class DbgModelTargetBreakpointSpecImpl extends DbgModelTargetObjectImpl
implements DbgModelTargetBreakpointSpec {
@ -69,28 +58,21 @@ public class DbgModelTargetBreakpointSpecImpl extends DbgModelTargetObjectImpl
protected boolean enabled;
public void changeAttributeSet(String reason) {
this.changeAttributes(List.of(), List.of(), Map.of(
DISPLAY_ATTRIBUTE_NAME, "[" + info.getNumber() + "] " + info.getExpression(),
RANGE_ATTRIBUTE_NAME, doGetRange(),
SPEC_ATTRIBUTE_NAME, this,
EXPRESSION_ATTRIBUTE_NAME, info.getExpression(),
KINDS_ATTRIBUTE_NAME, getKinds(),
this.changeAttributes(List.of(), List.of(),
Map.of(DISPLAY_ATTRIBUTE_NAME, "[" + info.getNumber() + "] " + info.getExpression(),
RANGE_ATTRIBUTE_NAME, doGetRange(), SPEC_ATTRIBUTE_NAME, this,
EXPRESSION_ATTRIBUTE_NAME, info.getExpression(), KINDS_ATTRIBUTE_NAME, getKinds(),
BPT_TYPE_ATTRIBUTE_NAME, info.getType().name(),
BPT_DISP_ATTRIBUTE_NAME, info.getDisp().name(),
BPT_PENDING_ATTRIBUTE_NAME, info.getPending(),
BPT_TIMES_ATTRIBUTE_NAME, info.getTimes()),
BPT_TYPE_ATTRIBUTE_NAME, info.getType().name(), BPT_DISP_ATTRIBUTE_NAME,
info.getDisp().name(), BPT_PENDING_ATTRIBUTE_NAME, info.getPending(),
BPT_TIMES_ATTRIBUTE_NAME, info.getTimes()),
reason);
}
// Use strong references on actions
// The values may be weak, but the keys, which are the same objects, are strong
private final ListenerSet<TargetBreakpointAction> actions =
new ListenerSet<>(TargetBreakpointAction.class) {
// Use strong references on actions
// The values may be weak, but the keys, which are the same objects, are strong
protected Map<TargetBreakpointAction, ListenerEntry<? extends TargetBreakpointAction>> createMap() {
return new LinkedHashMap<>();
}
};
new ListenerSet<>(TargetBreakpointAction.class, false);
public DbgModelTargetBreakpointSpecImpl(DbgModelTargetBreakpointContainer breakpoints,
DbgBreakpointInfo info) {
@ -128,11 +110,11 @@ public class DbgModelTargetBreakpointSpecImpl extends DbgModelTargetObjectImpl
/**
* Update the enabled field
*
*
* This does not actually toggle the breakpoint. It just updates the field and calls the proper
* listeners. To actually toggle the breakpoint, use {@link #toggle(boolean)} instead, which if
* effective, should eventually cause this method to be called.
*
*
* @param enabled true if enabled, false if disabled
* @param reason a description of the cause (not really used, yet)
*/

View file

@ -109,8 +109,10 @@ public class DbgModelTargetExceptionImpl extends DbgModelTargetObjectImpl
.setFocus(this);
changeAttributes(List.of(), List.of(), Map.of( //
MODIFIED_ATTRIBUTE_NAME, true), "Refreshed");
manager.getEventListeners().fire.consoleOutput(
"Exception " + filter.getExceptionCode() + " : " + filter.getName() + "\n", 0);
manager.getEventListeners()
.invoke()
.consoleOutput("Exception " + filter.getExceptionCode() + " : " +
filter.getName() + "\n", 0);
}
}
}

View file

@ -162,7 +162,7 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp
return thread.writeRegisters(toWrite);
// TODO: Should probably filter only effective and normalized writes in the callback
}).thenAccept(__ -> {
manager.getEventListeners().fire.threadStateChanged(thread, thread.getState(),
manager.getEventListeners().invoke().threadStateChanged(thread, thread.getState(),
DbgCause.Causes.UNCLAIMED, DbgReason.Reasons.NONE);
broadcast().registersUpdated(getProxy(), values);
}));