GP-740: Removed TargetObjectRef and cleaned up.

This commit is contained in:
Dan 2021-03-01 15:14:27 -05:00
parent b9f9c69be4
commit 6614b54248
328 changed files with 3177 additions and 4428 deletions

View file

@ -23,7 +23,6 @@ import agent.dbgmodel.dbgmodel.main.ModelObject;
import agent.dbgmodel.gadp.impl.WrappedDbgModel;
import agent.dbgmodel.manager.DbgManager2Impl;
import agent.dbgmodel.model.impl.*;
import ghidra.dbg.attributes.TargetObjectRef;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.util.PathUtils;
@ -53,7 +52,7 @@ public class DbgListElementsCommand extends AbstractDbgCommand<List<TargetObject
synchronized (access) {
updatedElements = new ArrayList<>();
List<ModelObject> list = access.getElements(path);
Map<String, ? extends TargetObjectRef> existingElements =
Map<String, ? extends TargetObject> existingElements =
targetObject.getCachedElements();
for (ModelObject obj : list) {

View file

@ -32,7 +32,6 @@ import agent.dbgmodel.jna.dbgmodel.DbgModelNative.TypeKind;
import agent.dbgmodel.manager.DbgManager2Impl;
import ghidra.dbg.agent.DefaultTargetObject;
import ghidra.dbg.target.*;
import ghidra.dbg.target.TargetAccessConditioned.TargetAccessibility;
import ghidra.dbg.target.TargetBreakpointContainer.TargetBreakpointKindSet;
import ghidra.dbg.target.TargetBreakpointSpec.TargetBreakpointKind;
import ghidra.dbg.target.TargetExecutionStateful.TargetExecutionState;
@ -49,7 +48,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
protected final Map<String, TargetObject> elementsByKey = new WeakValueHashMap<>();
protected DbgModelSelectableObject focus;
public TargetAccessibility accessibility = TargetAccessibility.ACCESSIBLE;
public boolean accessible = true;
private ModelObject modelObject = null;
protected Map<String, Object> intrinsics = new TreeMap<>(TargetObjectKeyComparator.ATTRIBUTE);
@ -214,11 +213,10 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
DelegateDbgModel2TargetObject delegate = (DelegateDbgModel2TargetObject) this;
TargetObject proxy = delegate.getProxy();
if (proxy instanceof TargetAccessConditioned) {
attrs.put(TargetAccessConditioned.ACCESSIBLE_ATTRIBUTE_NAME,
accessibility == TargetAccessibility.ACCESSIBLE);
attrs.put(TargetAccessConditioned.ACCESSIBLE_ATTRIBUTE_NAME, accessible);
}
if (proxy instanceof TargetExecutionStateful) {
TargetExecutionStateful<?> stateful = (TargetExecutionStateful<?>) proxy;
TargetExecutionStateful stateful = (TargetExecutionStateful) proxy;
TargetExecutionState state = stateful.getExecutionState();
attrs.put(TargetExecutionStateful.STATE_ATTRIBUTE_NAME, state);
}
@ -269,12 +267,12 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
attrs.put(TargetEnvironment.ARCH_ATTRIBUTE_NAME, executionType);
}
if (proxy instanceof TargetRegister) {
DbgModelTargetObject bank = (DbgModelTargetObject) getImplParent();
TargetObject container = bank.getImplParent();
DbgModelTargetObject bank = (DbgModelTargetObject) getParent();
TargetObject container = bank.getParent();
attrs.put(TargetRegister.CONTAINER_ATTRIBUTE_NAME, container);
}
if (proxy instanceof TargetRegisterBank) {
attrs.put(TargetRegisterBank.DESCRIPTIONS_ATTRIBUTE_NAME, getImplParent());
attrs.put(TargetRegisterBank.DESCRIPTIONS_ATTRIBUTE_NAME, getParent());
}
if (proxy instanceof TargetStackFrame) {
DbgModelTargetStackFrame frame = (DbgModelTargetStackFrame) proxy;
@ -358,7 +356,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
}
DbgModelTargetObject test = (DbgModelTargetObject) parent;
while (test != null && !(test.getProxy() instanceof DbgModelTargetSession)) {
test = (DbgModelTargetObject) test.getImplParent();
test = (DbgModelTargetObject) test.getParent();
}
return test == null ? null : (DbgModelTargetSession) test.getProxy();
}
@ -367,7 +365,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
public DbgModelTargetProcess getParentProcess() {
DbgModelTargetObject test = (DbgModelTargetObject) parent;
while (test != null && !(test.getProxy() instanceof TargetProcess)) {
test = (DbgModelTargetObject) test.getImplParent();
test = (DbgModelTargetObject) test.getParent();
}
return test == null ? null : (DbgModelTargetProcess) test.getProxy();
}
@ -376,7 +374,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
public DbgModelTargetThread getParentThread() {
DbgModelTargetObject test = (DbgModelTargetObject) parent;
while (test != null && !(test.getProxy() instanceof TargetThread)) {
test = (DbgModelTargetObject) test.getImplParent();
test = (DbgModelTargetObject) test.getParent();
}
return test == null ? null : (DbgModelTargetThread) test.getProxy();
}

View file

@ -336,8 +336,8 @@ public class DbgModel2TargetRootImpl extends DbgModel2DefaultTargetModelRoot
getModel().fetchModelValue(objPath).handle(seq::next);
}, TypeSpec.cls(Object.class)).then((obj, seq) -> {
if (obj instanceof DbgModelTargetExecutionStateful) {
DbgModelTargetExecutionStateful<?> stateful =
(DbgModelTargetExecutionStateful<?>) obj;
DbgModelTargetExecutionStateful stateful =
(DbgModelTargetExecutionStateful) obj;
TargetExecutionState execState = stateful.convertState(state);
stateful.setExecutionState(execState, reason);
}
@ -379,7 +379,7 @@ public class DbgModel2TargetRootImpl extends DbgModel2DefaultTargetModelRoot
}
listeners.fire(TargetBreakpointListener.class)
.breakpointHit((TargetBreakpointContainer<?>) bpt.getParent(),
.breakpointHit((TargetBreakpointContainer) bpt.getParent(),
getParentProcess(), null, bpt, bpt);
bpt.breakpointHit();
});
@ -492,13 +492,12 @@ public class DbgModel2TargetRootImpl extends DbgModel2DefaultTargetModelRoot
}
@Override
public TargetAccessibility getAccessibility() {
return accessibility;
public boolean isAccessible() {
return accessible;
}
@Override
public void setAccessibility(TargetAccessibility accessibility) {
this.accessibility = accessibility;
public void setAccessible(boolean accessible) {
this.accessible = accessible;
}
}

View file

@ -23,7 +23,7 @@ import agent.dbgeng.model.iface1.DbgModelTargetInterruptible;
import agent.dbgeng.model.iface2.DbgModelTargetObject;
public class DbgModel2TargetSystemMarkerImpl extends DbgModel2TargetObjectImpl
implements DbgModelTargetInterruptible<DbgModel2TargetSystemMarkerImpl> {
implements DbgModelTargetInterruptible {
// NB: this is an invisible marker whose only purpose if to enable an
// interrupt when connecting in kernel-mode to a running target

View file

@ -19,7 +19,6 @@ import java.lang.invoke.MethodHandles;
import java.lang.ref.Cleaner;
import java.lang.ref.Cleaner.Cleanable;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import agent.dbgeng.manager.*;
import agent.dbgeng.manager.breakpoint.DbgBreakpointInfo;
@ -27,16 +26,14 @@ import agent.dbgeng.model.iface1.*;
import agent.dbgeng.model.iface2.*;
import agent.dbgmodel.dbgmodel.main.ModelObject;
import agent.dbgmodel.jna.dbgmodel.DbgModelNative.ModelObjectKind;
import ghidra.async.AsyncUtils;
import ghidra.dbg.attributes.TargetObjectRef;
import ghidra.dbg.target.*;
import ghidra.dbg.target.TargetBreakpointSpec.TargetBreakpointAction;
import ghidra.dbg.util.PathUtils;
import ghidra.util.datastruct.ListenerSet;
public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl implements //
DbgModelTargetAccessConditioned<DelegateDbgModel2TargetObject>, //
DbgModelTargetExecutionStateful<DelegateDbgModel2TargetObject>, //
DbgModelTargetAccessConditioned, //
DbgModelTargetExecutionStateful, //
DbgModel2TargetProxy, DbgModelTargetBptHelper {
// Probably don-t need any of the handler-map or annotation stuff
@ -198,7 +195,7 @@ public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl imp
}
public DelegateDbgModel2TargetObject clone(String key, ModelObject modelObject) {
DbgModelTargetObject p = (DbgModelTargetObject) getImplParent();
DbgModelTargetObject p = (DbgModelTargetObject) getParent();
List<Class<? extends TargetObject>> mixins = new ArrayList<>();
Class<? extends DbgModelTargetObject> mixin = lookupWrapperType(key, p.getName());
if (mixin != null) {
@ -209,27 +206,11 @@ public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl imp
return delegate;
}
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public CompletableFuture<? extends DelegateDbgModel2TargetObject> fetch() {
return (CompletableFuture) CompletableFuture.completedFuture(proxy);
}
@Override
public DbgModelTargetObject getProxy() {
return (DbgModelTargetObject) proxy;
}
@SuppressWarnings("unchecked")
@Override
public CompletableFuture<? extends DelegateDbgModel2TargetObject> fetchParent() {
TargetObjectRef p = getParent();
if (p == null) {
return AsyncUtils.nil();
}
return (CompletableFuture<? extends DelegateDbgModel2TargetObject>) p.fetch();
}
protected static String getHintForObject(ModelObject obj) {
ModelObjectKind kind = obj.getKind();
String ret = kind == null ? "" : kind.name();
@ -309,35 +290,34 @@ public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl imp
public void onRunning() {
invalidate();
setAccessibility(TargetAccessibility.INACCESSIBLE);
setAccessible(false);
}
public void onStopped() {
setAccessibility(TargetAccessibility.ACCESSIBLE);
setAccessible(true);
update();
}
public void onExit() {
setAccessibility(TargetAccessibility.ACCESSIBLE);
setAccessible(true);
}
@Override
public TargetAccessibility getAccessibility() {
return accessibility;
public boolean isAccessible() {
return accessible;
}
@Override
public void setAccessibility(TargetAccessibility accessibility) {
public void setAccessible(boolean accessible) {
synchronized (attributes) {
if (this.accessibility == accessibility) {
if (this.accessible == accessible) {
return;
}
this.accessibility = accessibility;
this.accessible = accessible;
}
if (proxy instanceof TargetAccessConditioned) {
changeAttributes(List.of(), List.of(), Map.of( //
TargetAccessConditioned.ACCESSIBLE_ATTRIBUTE_NAME,
accessibility == TargetAccessibility.ACCESSIBLE //
TargetAccessConditioned.ACCESSIBLE_ATTRIBUTE_NAME, accessible //
), "Accessibility changed");
}
}