GP-704: Converting models to a push-centric comm pattern.

This commit is contained in:
Dan 2021-02-23 10:57:51 -05:00
parent dd37995833
commit 5bb6f95a84
95 changed files with 2348 additions and 1635 deletions

View file

@ -21,7 +21,7 @@ import ghidra.dbg.target.TargetEnvironment;
public interface DbgModelTargetEnvironment<T extends TargetEnvironment<T>>
extends DbgModelTargetObject, TargetEnvironment<T> {
public void refresh();
public void refreshInternal();
@Override
public default String getArchitecture() {

View file

@ -20,7 +20,7 @@ import ghidra.dbg.target.TargetEnvironment;
public interface DbgModelTargetEnvironmentEx
extends DbgModelTargetObject, TargetEnvironment<DbgModelTargetEnvironmentEx> {
public void refresh();
public void refreshInternal();
/*
@Override

View file

@ -23,11 +23,13 @@ import agent.dbgeng.dbgeng.DebugClient.DebugStatus;
import agent.dbgeng.manager.impl.DbgManagerImpl;
import agent.dbgeng.model.AbstractDbgModel;
import ghidra.dbg.agent.InvalidatableTargetObjectIf;
import ghidra.dbg.agent.SpiTargetObject;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.TargetObject.TargetObjectListener;
import ghidra.dbg.util.CollectionUtils.Delta;
import ghidra.util.datastruct.ListenerSet;
public interface DbgModelTargetObject extends TargetObject, InvalidatableTargetObjectIf {
public interface DbgModelTargetObject extends SpiTargetObject, InvalidatableTargetObjectIf {
@Override
public AbstractDbgModel getModel();

View file

@ -60,6 +60,7 @@ public class DbgModelImpl extends AbstractDbgModel {
s.add();
DbgModelTargetSessionContainer sessions = root.sessions;
this.session = (DbgModelTargetSessionImpl) sessions.getTargetSession(s);
addModelRoot(root);
}
@Override
@ -110,7 +111,7 @@ public class DbgModelImpl extends AbstractDbgModel {
public CompletableFuture<Void> close() {
try {
terminate();
return CompletableFuture.completedFuture(null);
return super.close();
}
catch (Throwable t) {
return CompletableFuture.failedFuture(t);

View file

@ -56,8 +56,8 @@ public class DbgModelTargetObjectImpl extends DefaultTargetObject<TargetObject,
}
@Override
protected void doInvalidate(String reason) {
super.doInvalidate(reason);
protected void doInvalidate(TargetObject branch, String reason) {
super.doInvalidate(branch, reason);
getManager().removeStateListener(accessListener);
}

View file

@ -30,14 +30,29 @@ import ghidra.dbg.target.*;
import ghidra.dbg.target.schema.*;
import ghidra.dbg.util.PathUtils;
@TargetObjectSchemaInfo(name = "Debugger", elements = { //
@TargetElementType(type = Void.class) //
}, attributes = { //
@TargetAttributeType(name = "Available", type = DbgModelTargetAvailableContainerImpl.class, required = true, fixed = true), //
@TargetAttributeType(name = "Connectors", type = DbgModelTargetConnectorContainerImpl.class, required = true, fixed = true), //
@TargetAttributeType(name = "Sessions", type = DbgModelTargetSessionContainerImpl.class, required = true, fixed = true), //
@TargetAttributeType(type = Void.class) //
})
@TargetObjectSchemaInfo(
name = "Debugger",
elements = { //
@TargetElementType(type = Void.class) //
},
attributes = { //
@TargetAttributeType(
name = "Available",
type = DbgModelTargetAvailableContainerImpl.class,
required = true,
fixed = true), //
@TargetAttributeType(
name = "Connectors",
type = DbgModelTargetConnectorContainerImpl.class,
required = true,
fixed = true), //
@TargetAttributeType(
name = "Sessions",
type = DbgModelTargetSessionContainerImpl.class,
required = true,
fixed = true), //
@TargetAttributeType(type = Void.class) //
})
public class DbgModelTargetRootImpl extends DbgModelDefaultTargetModelRoot
implements DbgModelTargetRoot {
@ -136,12 +151,6 @@ public class DbgModelTargetRootImpl extends DbgModelDefaultTargetModelRoot
), reason.desc());
}
//@Override
public void refresh() {
// TODO ???
System.err.println("root:refresh");
}
@Override
public TargetAccessibility getAccessibility() {
return accessibility;

View file

@ -23,12 +23,18 @@ import agent.dbgeng.model.iface2.DbgModelTargetSession;
import agent.dbgeng.model.iface2.DbgModelTargetSessionAttributes;
import ghidra.dbg.target.schema.*;
@TargetObjectSchemaInfo(name = "SessionAttributes", elements = { //
@TargetElementType(type = Void.class) //
}, attributes = { //
@TargetAttributeType(name = "Machine", type = DbgModelTargetSessionAttributesMachineImpl.class, fixed = true), //
@TargetAttributeType(type = Void.class) //
})
@TargetObjectSchemaInfo(
name = "SessionAttributes",
elements = { //
@TargetElementType(type = Void.class) //
},
attributes = { //
@TargetAttributeType(
name = "Machine",
type = DbgModelTargetSessionAttributesMachineImpl.class,
fixed = true), //
@TargetAttributeType(type = Void.class) //
})
public class DbgModelTargetSessionAttributesImpl extends DbgModelTargetObjectImpl
implements DbgModelTargetSessionAttributes {
@ -75,8 +81,8 @@ public class DbgModelTargetSessionAttributesImpl extends DbgModelTargetObjectImp
*/
@Override
public void refresh() {
machineAttributes.refresh();
public void refreshInternal() {
machineAttributes.refreshInternal();
}
}

View file

@ -60,15 +60,15 @@ public class DbgModelTargetSessionAttributesMachineImpl extends DbgModelTargetOb
@Override
public void sessionAdded(DbgSession session, DbgCause cause) {
refresh();
refreshInternal();
}
@Override
public void processAdded(DbgProcess process, DbgCause cause) {
refresh();
refreshInternal();
}
public void refresh() {
public void refreshInternal() {
DebugControl control = getManager().getControl();
int processorType = control.getActualProcessorType();
if (processorType < 0) {