GP-2752: Remove TargetObject.addListener() and related

This commit is contained in:
Dan 2022-11-10 13:46:23 -05:00
parent c301dd2c89
commit 50c7217635
78 changed files with 384 additions and 1261 deletions

View file

@ -22,7 +22,6 @@ import java.util.stream.Collectors;
import com.sun.jdi.ReferenceType;
import ghidra.async.AsyncFence;
import ghidra.async.AsyncUtils;
import ghidra.dbg.target.schema.*;
import ghidra.util.Msg;
@ -90,9 +89,6 @@ public class JdiModelTargetClassContainer extends JdiModelTargetObjectImpl {
}
public CompletableFuture<?> refreshInternal() {
if (!isObserved()) {
return AsyncUtils.NIL;
}
return doRefresh().exceptionally(ex -> {
Msg.error(this, "Problem refreshing vm's classes", ex);
return null;

View file

@ -23,7 +23,6 @@ import com.sun.jdi.VirtualMachineManager;
import com.sun.jdi.connect.Connector;
import ghidra.async.AsyncFence;
import ghidra.async.AsyncUtils;
import ghidra.dbg.target.schema.*;
import ghidra.util.Msg;
@ -96,9 +95,6 @@ public class JdiModelTargetConnectorContainer extends JdiModelTargetObjectImpl {
}
public CompletableFuture<?> refreshInternal() {
if (!isObserved()) {
return AsyncUtils.NIL;
}
return doRefresh().exceptionally(ex -> {
Msg.error(this, "Problem refreshing inferior's modules", ex);
return null;

View file

@ -22,7 +22,6 @@ import java.util.stream.Collectors;
import com.sun.jdi.ModuleReference;
import ghidra.async.AsyncFence;
import ghidra.async.AsyncUtils;
import ghidra.dbg.error.DebuggerUserException;
import ghidra.dbg.target.TargetModule;
import ghidra.dbg.target.TargetModuleContainer;
@ -136,9 +135,6 @@ public class JdiModelTargetModuleContainer extends JdiModelTargetObjectImpl
}
public CompletableFuture<?> refreshInternal() {
if (!isObserved()) {
return AsyncUtils.NIL;
}
return doRefresh().exceptionally(ex -> {
Msg.error(this, "Problem refreshing inferior's modules", ex);
return null;

View file

@ -106,7 +106,7 @@ public class JdiModelTargetProcess extends JdiModelTargetObjectImpl
default:
throw new AssertionError();
}
listeners.fire.consoleOutput(this, channel, out);
broadcast().consoleOutput(this, channel, out);
}
private void readStream(InputStream in, TargetConsole.Channel channel) {

View file

@ -20,7 +20,6 @@ import java.util.concurrent.CompletableFuture;
import com.sun.jdi.Location;
import ghidra.async.AsyncUtils;
import ghidra.dbg.target.TargetRegisterBank;
import ghidra.dbg.target.TargetRegisterContainer;
import ghidra.dbg.target.schema.*;
@ -121,7 +120,7 @@ public class JdiModelTargetRegisterContainer extends JdiModelTargetObjectImpl
map.put(retAddr.getIndex(), bytes);
}
if (!map.isEmpty()) {
listeners.fire.registersUpdated(this, map);
broadcast().registersUpdated(this, map);
}
return CompletableFuture.completedFuture(map);
}
@ -133,13 +132,10 @@ public class JdiModelTargetRegisterContainer extends JdiModelTargetObjectImpl
}
public void invalidateRegisterCaches() {
listeners.fire.invalidateCacheRequested(this);
broadcast().invalidateCacheRequested(this);
}
protected CompletableFuture<?> update() {
if (!isObserved()) {
return AsyncUtils.NIL;
}
return fetchElements(true).exceptionally(e -> {
Msg.error(this, "Could not update registers " + this + " on STOPPED");
return null;

View file

@ -125,12 +125,12 @@ public class JdiModelTargetSectionContainer extends JdiModelTargetObjectImpl
bytes[i] = (byte) 0xFF;
}
}
listeners.fire.memoryUpdated(this, address, bytes);
broadcast().memoryUpdated(this, address, bytes);
return CompletableFuture.completedFuture(bytes);
}
if (addressSpace.equals(impl.getAddressSpace("constantPool"))) {
byte[] bytes = constantPool.getPool();
listeners.fire.memoryUpdated(this, address, bytes);
broadcast().memoryUpdated(this, address, bytes);
return CompletableFuture.completedFuture(bytes);
}
throw new RuntimeException();

View file

@ -20,7 +20,6 @@ import java.util.concurrent.CompletableFuture;
import com.sun.jdi.*;
import ghidra.async.AsyncUtils;
import ghidra.dbg.target.TargetStack;
import ghidra.dbg.target.schema.*;
import ghidra.util.Msg;
@ -104,9 +103,6 @@ public class JdiModelTargetStack extends JdiModelTargetObjectImpl
* @return null
*/
protected CompletableFuture<?> update() {
if (!isObserved()) {
return AsyncUtils.NIL;
}
return fetchElements(true).exceptionally(e -> {
Msg.error(this, "Could not update stack " + this + " on STOPPED");
return null;
@ -114,6 +110,6 @@ public class JdiModelTargetStack extends JdiModelTargetObjectImpl
}
public void invalidateRegisterCaches() {
listeners.fire.invalidateCacheRequested(this);
broadcast().invalidateCacheRequested(this);
}
}

View file

@ -77,7 +77,7 @@ public class JdiModelTargetThreadContainer extends JdiModelTargetObjectImpl
TargetExecutionState targetState = targetThread.convertState(state);
targetThread.threadStateChanged(targetState);
TargetEventType eventType = getEventType(reason);
getListeners().fire.event(this, targetThread, eventType,
broadcast().event(this, targetThread, eventType,
"Thread " + targetThread.getName() + " state changed", List.of(targetThread));
}

View file

@ -31,11 +31,15 @@ import ghidra.dbg.target.schema.*;
import ghidra.util.Msg;
import ghidra.util.datastruct.WeakValueHashMap;
@TargetObjectSchemaInfo(name = "VMContainer", elements = { //
@TargetElementType(type = JdiModelTargetVM.class) //
}, attributes = { //
@TargetAttributeType(type = Void.class) //
}, canonicalContainer = true)
@TargetObjectSchemaInfo(
name = "VMContainer",
elements = { //
@TargetElementType(type = JdiModelTargetVM.class) //
},
attributes = { //
@TargetAttributeType(type = Void.class) //
},
canonicalContainer = true)
public class JdiModelTargetVMContainer extends JdiModelTargetObjectImpl
implements JdiEventsListenerAdapter {
@ -56,7 +60,7 @@ public class JdiModelTargetVMContainer extends JdiModelTargetObjectImpl
// TODO: Move PROCESS_CREATED here to restore proper order of event reporting
// Pending some client-side changes to handle architecture selection, though.
target.started(vm.name()).thenAccept(__ -> {
session.getListeners().fire.event(session, null, TargetEventType.PROCESS_CREATED,
broadcast().event(session, null, TargetEventType.PROCESS_CREATED,
"VM " + vm.name() + " started " + vm.process() + " pid=" + vm.name(), List.of(vm));
}).exceptionally(ex -> {
Msg.error(this, "Could not notify vm started", ex);
@ -70,8 +74,8 @@ public class JdiModelTargetVMContainer extends JdiModelTargetObjectImpl
public void vmDied(VMDeathEvent event, JdiCause cause) {
VirtualMachine vm = event.virtualMachine();
JdiModelTargetVM tgtVM = vmsById.get(vm.name());
session.getListeners().fire.event(session, null, TargetEventType.PROCESS_EXITED,
"VM " + vm.name(), List.of(tgtVM));
broadcast().event(session, null, TargetEventType.PROCESS_EXITED, "VM " + vm.name(),
List.of(tgtVM));
tgtVM.exited(vm);
synchronized (this) {
vmsById.remove(vm.name());
@ -99,7 +103,7 @@ public class JdiModelTargetVMContainer extends JdiModelTargetObjectImpl
return;
}
JdiModelTargetThread targetThread = vm.threads.threadCreated(thread);
session.getListeners().fire.event(session, targetThread, TargetEventType.THREAD_CREATED,
broadcast().event(session, targetThread, TargetEventType.THREAD_CREATED,
"Thread " + thread.name() + " started", List.of(targetThread));
}
@ -108,7 +112,7 @@ public class JdiModelTargetVMContainer extends JdiModelTargetObjectImpl
ThreadReference thread = event.thread();
JdiModelTargetVM tgtVM = vmsById.get(thread.virtualMachine().name());
JdiModelTargetThread targetThread = tgtVM.threads.threadsById.get(thread.name());
session.getListeners().fire.event(session, targetThread, TargetEventType.THREAD_EXITED,
broadcast().event(session, targetThread, TargetEventType.THREAD_EXITED,
"Thread " + thread.name() + " exited", List.of(targetThread));
tgtVM.threads.threadExited(thread);
}

View file

@ -21,7 +21,6 @@ import java.util.concurrent.CompletableFuture;
import com.sun.jdi.*;
import ghidra.dbg.DebuggerModelListener;
import ghidra.dbg.agent.InvalidatableTargetObjectIf;
import ghidra.dbg.jdi.manager.JdiManager;
import ghidra.dbg.jdi.model.*;
@ -30,7 +29,6 @@ import ghidra.dbg.target.schema.EnumerableTargetObjectSchema;
import ghidra.dbg.target.schema.TargetObjectSchema;
import ghidra.dbg.target.schema.TargetObjectSchema.SchemaName;
import ghidra.dbg.util.CollectionUtils.Delta;
import ghidra.util.datastruct.ListenerSet;
public interface JdiModelTargetObject extends TargetObject, InvalidatableTargetObjectIf {
@ -56,8 +54,6 @@ public interface JdiModelTargetObject extends TargetObject, InvalidatableTargetO
public Delta<?, ?> changeAttributes(List<String> remove, Map<String, ?> add, String reason);
public ListenerSet<DebuggerModelListener> getListeners();
public default JdiModelTargetObject getInstance(Mirror object) {
JdiModelTargetObject targetObject = getTargetObject(object);
if (targetObject == null) {