mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-02-16 15:40:14 +00:00
Merge remote-tracking branch 'origin/GP-4129_Dan_fixModelTreeListener'
This commit is contained in:
commit
7ec608a695
@ -25,8 +25,7 @@ import docking.widgets.tree.GTreeNode;
|
||||
import ghidra.app.plugin.core.debug.gui.DebuggerResources;
|
||||
import ghidra.dbg.target.*;
|
||||
import ghidra.dbg.util.PathUtils.TargetObjectKeyComparator;
|
||||
import ghidra.framework.model.DomainObject;
|
||||
import ghidra.framework.model.DomainObjectClosedListener;
|
||||
import ghidra.framework.model.*;
|
||||
import ghidra.trace.model.*;
|
||||
import ghidra.trace.model.Trace.TraceObjectChangeType;
|
||||
import ghidra.trace.model.target.*;
|
||||
@ -39,6 +38,7 @@ public class ObjectTreeModel implements DisplaysModified {
|
||||
class ListenerForChanges extends TraceDomainObjectListener
|
||||
implements DomainObjectClosedListener {
|
||||
public ListenerForChanges() {
|
||||
listenForUntyped(DomainObject.DO_OBJECT_RESTORED, this::domainObjectRestored);
|
||||
listenFor(TraceObjectChangeType.CREATED, this::objectCreated);
|
||||
listenFor(TraceObjectChangeType.VALUE_CREATED, this::valueCreated);
|
||||
listenFor(TraceObjectChangeType.VALUE_DELETED, this::valueDeleted);
|
||||
@ -50,6 +50,10 @@ public class ObjectTreeModel implements DisplaysModified {
|
||||
setTrace(null);
|
||||
}
|
||||
|
||||
public void domainObjectRestored(DomainObjectChangeRecord rec) {
|
||||
reload();
|
||||
}
|
||||
|
||||
protected boolean isEventValue(TraceObjectValue value) {
|
||||
if (!value.getParent()
|
||||
.getTargetSchema()
|
||||
|
@ -43,6 +43,7 @@ import ghidra.dbg.target.schema.SchemaContext;
|
||||
import ghidra.dbg.target.schema.TargetObjectSchema.SchemaName;
|
||||
import ghidra.dbg.target.schema.XmlSchemaContext;
|
||||
import ghidra.debug.api.tracemgr.DebuggerCoordinates;
|
||||
import ghidra.lifecycle.Unfinished;
|
||||
import ghidra.trace.model.Lifespan;
|
||||
import ghidra.trace.model.target.*;
|
||||
import ghidra.trace.model.target.TraceObject.ConflictResolution;
|
||||
@ -1027,4 +1028,32 @@ public class DebuggerModelProviderTest extends AbstractGhidraHeadedDebuggerTest
|
||||
assertEquals(threadsPath.index(0),
|
||||
modelProvider.elementsTablePanel.getSelectedItem().getValue().getCanonicalPath());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetValueAffectsTree() throws Throwable {
|
||||
createTraceAndPopulateObjects();
|
||||
|
||||
TraceObjectKeyPath threadsPath = TraceObjectKeyPath.parse("Processes[0].Threads");
|
||||
TraceObject threads = tb.trace.getObjectManager().getObjectByCanonicalPath(threadsPath);
|
||||
TraceObject thread0 =
|
||||
tb.trace.getObjectManager().getObjectByCanonicalPath(threadsPath.index(0));
|
||||
|
||||
traceManager.activateTrace(tb.trace);
|
||||
traceManager.activateSnap(1);
|
||||
waitForSwing();
|
||||
|
||||
modelProvider.setPath(threadsPath);
|
||||
waitForTasks();
|
||||
|
||||
AbstractNode node =
|
||||
waitForValue(() -> modelProvider.objectsTreePanel.treeModel.getNode(threadsPath));
|
||||
assertEquals(10, node.getChildren().size());
|
||||
|
||||
try (Transaction tx = tb.startTransaction()) {
|
||||
threads.setAttribute(Lifespan.nowOn(0), "Current", thread0);
|
||||
}
|
||||
waitForTasks();
|
||||
|
||||
assertEquals(11, node.getChildren().size());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user