GP-3162: refresh bool->enum

This commit is contained in:
d-millar 2023-03-03 18:41:18 +00:00
parent a9baf9f6d8
commit 15c4345d71
116 changed files with 376 additions and 266 deletions

View file

@ -18,6 +18,7 @@ package agent.dbgeng.model.iface2;
import java.util.concurrent.CompletableFuture;
import agent.dbgeng.manager.DbgModuleMemory;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.TargetMemory;
import ghidra.program.model.address.Address;
@ -31,6 +32,6 @@ public interface DbgModelTargetMemoryContainer extends DbgModelTargetObject, Tar
@Override
public CompletableFuture<Void> writeMemory(Address address, byte[] data);
public CompletableFuture<Void> requestElements(boolean refresh);
public CompletableFuture<Void> requestElements(RefreshBehavior refresh);
}

View file

@ -25,6 +25,7 @@ import org.apache.commons.lang3.tuple.Pair;
import agent.dbgeng.model.iface1.DbgModelTargetConfigurable;
import agent.dbgeng.model.iface2.*;
import ghidra.async.AsyncUtils;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.error.DebuggerIllegalArgumentException;
import ghidra.dbg.target.TargetConfigurable;
import ghidra.dbg.target.TargetObject;
@ -50,7 +51,7 @@ public class DbgModelTargetAvailableContainerImpl extends DbgModelTargetObjectIm
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return getManager().listAvailableProcesses().thenAccept(list -> {
List<TargetObject> available;
synchronized (this) {

View file

@ -25,6 +25,7 @@ import agent.dbgeng.manager.DbgProcess;
import agent.dbgeng.manager.breakpoint.DbgBreakpointInfo;
import agent.dbgeng.manager.impl.DbgManagerImpl;
import agent.dbgeng.model.iface2.*;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.TargetBreakpointSpec.TargetBreakpointKind;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.schema.*;
@ -109,7 +110,7 @@ public class DbgModelTargetBreakpointContainerImpl extends DbgModelTargetObjectI
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
DbgManagerImpl manager = getManager();
return manager.listBreakpoints().thenAccept(byNumber -> {
List<TargetObject> specs;

View file

@ -21,6 +21,7 @@ import java.util.concurrent.CompletableFuture;
import agent.dbgeng.manager.breakpoint.DbgBreakpointInfo;
import agent.dbgeng.model.iface2.DbgModelTargetBreakpointContainer;
import agent.dbgeng.model.iface2.DbgModelTargetBreakpointSpec;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.TargetBreakpointLocation;
import ghidra.dbg.target.TargetBreakpointSpec;
import ghidra.dbg.target.schema.TargetAttributeType;
@ -163,7 +164,7 @@ public class DbgModelTargetBreakpointSpecImpl extends DbgModelTargetObjectImpl
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return getInfo().thenAccept(i -> {
synchronized (this) {
setBreakpointInfo(i);

View file

@ -26,6 +26,7 @@ import agent.dbgeng.manager.impl.DbgManagerImpl;
import agent.dbgeng.manager.impl.DbgProcessImpl;
import agent.dbgeng.model.iface2.*;
import ghidra.async.AsyncUtils;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.schema.*;
import ghidra.util.datastruct.WeakValueHashMap;
@ -48,14 +49,14 @@ public class DbgModelTargetEventContainerImpl extends DbgModelTargetObjectImpl
public DbgModelTargetEventContainerImpl(DbgModelTargetDebugContainer debug) {
super(debug.getModel(), debug, "Events", "EventContainer");
this.debug = debug;
requestElements(true);
requestElements(RefreshBehavior.REFRESH_ALWAYS);
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
DbgModelTargetProcess targetProcess = getParentProcess();
DbgProcessImpl currentProcess = getManager().getCurrentProcess();
if (!refresh ||
if (!refresh.equals(RefreshBehavior.REFRESH_ALWAYS) ||
(currentProcess != null && !currentProcess.equals(targetProcess.getProcess()))) {
return AsyncUtils.NIL;
}

View file

@ -26,6 +26,7 @@ import agent.dbgeng.manager.impl.DbgManagerImpl;
import agent.dbgeng.manager.impl.DbgProcessImpl;
import agent.dbgeng.model.iface2.*;
import ghidra.async.AsyncUtils;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.schema.*;
import ghidra.util.datastruct.WeakValueHashMap;
@ -48,14 +49,14 @@ public class DbgModelTargetExceptionContainerImpl extends DbgModelTargetObjectIm
public DbgModelTargetExceptionContainerImpl(DbgModelTargetDebugContainer debug) {
super(debug.getModel(), debug, "Exceptions", "ExceptionContainer");
this.debug = debug;
requestElements(true);
requestElements(RefreshBehavior.REFRESH_ALWAYS);
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
DbgModelTargetProcess targetProcess = getParentProcess();
DbgProcessImpl currentProcess = getManager().getCurrentProcess();
if (!refresh ||
if (!refresh.equals(RefreshBehavior.REFRESH_ALWAYS) ||
(currentProcess != null && !currentProcess.equals(targetProcess.getProcess()))) {
return AsyncUtils.NIL;
}

View file

@ -28,6 +28,7 @@ import agent.dbgeng.model.iface2.*;
import generic.ULongSpan;
import generic.ULongSpan.ULongSpanSet;
import ghidra.async.AsyncUtils;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.error.DebuggerMemoryAccessException;
import ghidra.dbg.error.DebuggerModelAccessException;
import ghidra.dbg.target.TargetObject;
@ -54,15 +55,15 @@ public class DbgModelTargetMemoryContainerImpl extends DbgModelTargetObjectImpl
super(process.getModel(), process, "Memory", "MemoryContainer");
this.process = process;
if (!getModel().isSuppressDescent()) {
requestElements(true);
requestElements(RefreshBehavior.REFRESH_ALWAYS);
}
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
DbgModelTargetProcess targetProcess = getParentProcess();
DbgProcessImpl currentProcess = getManager().getCurrentProcess();
if (!refresh ||
if (!refresh.equals(RefreshBehavior.REFRESH_ALWAYS) ||
(currentProcess != null && !currentProcess.equals(targetProcess.getProcess()))) {
return AsyncUtils.NIL;
}

View file

@ -22,6 +22,7 @@ import agent.dbgeng.manager.DbgModule;
import agent.dbgeng.manager.DbgProcess;
import agent.dbgeng.model.iface2.DbgModelTargetModule;
import agent.dbgeng.model.iface2.DbgModelTargetModuleContainer;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.*;
import ghidra.dbg.target.schema.*;
import ghidra.dbg.target.schema.TargetObjectSchema.ResyncMode;
@ -49,7 +50,7 @@ public class DbgModelTargetModuleContainerImpl extends DbgModelTargetObjectImpl
this.targetProcess = process;
this.process = process.process;
if (!getModel().isSuppressDescent()) {
requestElements(false);
requestElements(RefreshBehavior.REFRESH_NEVER);
}
}
@ -99,7 +100,7 @@ public class DbgModelTargetModuleContainerImpl extends DbgModelTargetObjectImpl
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
List<TargetObject> result = new ArrayList<>();
return process.listModules().thenAccept(byName -> {
synchronized (this) {

View file

@ -20,6 +20,7 @@ import java.util.concurrent.CompletableFuture;
import agent.dbgeng.manager.DbgModule;
import agent.dbgeng.manager.DbgModuleSection;
import agent.dbgeng.model.iface2.*;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.schema.*;
@ -38,7 +39,7 @@ public class DbgModelTargetModuleSectionContainerImpl extends DbgModelTargetObje
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return CompletableFuture.completedFuture(null);
/*
return module.listSections().thenAccept(byStart -> {

View file

@ -26,6 +26,7 @@ import agent.dbgeng.manager.breakpoint.DbgBreakpointInfo;
import agent.dbgeng.model.iface1.DbgModelTargetConfigurable;
import agent.dbgeng.model.iface2.*;
import ghidra.async.AsyncUtils;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.error.DebuggerIllegalArgumentException;
import ghidra.dbg.target.TargetConfigurable;
import ghidra.dbg.target.TargetObject;
@ -103,7 +104,7 @@ public class DbgModelTargetProcessContainerImpl extends DbgModelTargetObjectImpl
DbgModelTargetProcess process = getTargetProcess(proc);
DbgModelTargetMemoryContainer memory = process.getMemory();
if (memory != null) {
memory.requestElements(true);
memory.requestElements(RefreshBehavior.REFRESH_ALWAYS);
}
}
@ -116,7 +117,7 @@ public class DbgModelTargetProcessContainerImpl extends DbgModelTargetObjectImpl
}
DbgModelTargetMemoryContainer memory = process.getMemory();
if (memory != null) {
memory.requestElements(true);
memory.requestElements(RefreshBehavior.REFRESH_ALWAYS);
}
}
@ -126,12 +127,12 @@ public class DbgModelTargetProcessContainerImpl extends DbgModelTargetObjectImpl
process.getModules().libraryUnloaded(info.toString());
DbgModelTargetMemoryContainer memory = process.getMemory();
if (memory != null) {
memory.requestElements(false);
memory.requestElements(RefreshBehavior.REFRESH_NEVER);
}
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return getManager().listProcesses().thenAccept(byIID -> {
List<TargetObject> processes;
synchronized (this) {

View file

@ -24,6 +24,7 @@ import agent.dbgeng.manager.*;
import agent.dbgeng.manager.impl.DbgManagerImpl;
import agent.dbgeng.model.iface1.DbgModelTargetFocusScope;
import agent.dbgeng.model.iface2.*;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.*;
import ghidra.dbg.target.TargetEventScope.TargetEventType;
import ghidra.dbg.target.schema.*;
@ -263,9 +264,9 @@ public class DbgModelTargetProcessImpl extends DbgModelTargetObjectImpl
}
@Override
public CompletableFuture<Void> resync(boolean refreshAttributes, boolean refreshElements) {
public CompletableFuture<Void> resync(RefreshBehavior refreshAttributes, RefreshBehavior refreshElements) {
if (memory != null) {
memory.requestElements(true);
memory.requestElements(RefreshBehavior.REFRESH_ALWAYS);
}
return super.resync(refreshAttributes, refreshElements);
}

View file

@ -25,6 +25,7 @@ import agent.dbgeng.manager.impl.DbgManagerImpl;
import agent.dbgeng.manager.impl.DbgRegister;
import agent.dbgeng.model.iface2.*;
import ghidra.async.AsyncUtils;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.error.DebuggerRegisterAccessException;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.TargetRegisterBank;
@ -57,7 +58,7 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp
this.thread = thread.getThread();
if (!getModel().isSuppressDescent()) {
requestElements(false);
requestElements(RefreshBehavior.REFRESH_NEVER);
changeAttributes(List.of(), List.of(), Map.of( //
TargetRegisterBank.DESCRIPTIONS_ATTRIBUTE_NAME, this //
), "Initialized");
@ -65,7 +66,7 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return thread.listRegisters().thenAccept(regs -> {
if (regs.size() != registersByName.size()) {
DbgModelImpl impl = (DbgModelImpl) model;
@ -109,7 +110,7 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp
Collection<String> names) {
return model.gateFuture(thread.listRegisters().thenCompose(regs -> {
if (regs.size() != registersByName.size() || getCachedElements().isEmpty()) {
return requestElements(false);
return requestElements(RefreshBehavior.REFRESH_NEVER);
}
return AsyncUtils.NIL;
}).thenCompose(__ -> {
@ -144,7 +145,7 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp
public CompletableFuture<Void> writeRegistersNamed(Map<String, byte[]> values) {
DbgManagerImpl manager = getManager();
return model.gateFuture(thread.listRegisters().thenCompose(regs -> {
return requestElements(false);
return requestElements(RefreshBehavior.REFRESH_NEVER);
}).thenCompose(__ -> {
Map<String, ? extends TargetObject> regs = getCachedElements();
Map<DbgRegister, BigInteger> toWrite = new LinkedHashMap<>();

View file

@ -21,6 +21,7 @@ import java.util.concurrent.CompletableFuture;
import agent.dbgeng.model.iface2.DbgModelTargetSession;
import agent.dbgeng.model.iface2.DbgModelTargetSessionAttributes;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.schema.*;
@TargetObjectSchemaInfo(
@ -58,7 +59,7 @@ public class DbgModelTargetSessionAttributesImpl extends DbgModelTargetObjectImp
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return CompletableFuture.completedFuture(null);
}

View file

@ -23,6 +23,7 @@ import agent.dbgeng.dbgeng.DebugSessionId;
import agent.dbgeng.manager.DbgCause;
import agent.dbgeng.manager.DbgSession;
import agent.dbgeng.model.iface2.*;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.schema.*;
@ -65,7 +66,7 @@ public class DbgModelTargetSessionContainerImpl extends DbgModelTargetObjectImpl
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return CompletableFuture.completedFuture(null);
/*
DbgManagerImpl manager = getManager();

View file

@ -22,6 +22,7 @@ import java.util.stream.Collectors;
import agent.dbgeng.manager.*;
import agent.dbgeng.model.iface2.*;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.schema.*;
import ghidra.util.Msg;
@ -52,7 +53,7 @@ public class DbgModelTargetStackImpl extends DbgModelTargetObjectImpl
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return thread.getThread().listStackFrames().thenAccept(f -> {
List<TargetObject> frames;
synchronized (this) {
@ -85,7 +86,7 @@ public class DbgModelTargetStackImpl extends DbgModelTargetObjectImpl
public void threadStateChangedSpecific(DbgState state, DbgReason reason) {
if (!state.equals(DbgState.RUNNING)) {
requestElements(true).exceptionally(e -> {
requestElements(RefreshBehavior.REFRESH_ALWAYS).exceptionally(e -> {
Msg.error(this, "Could not update stack " + this + " on STOPPED");
return null;
});

View file

@ -22,6 +22,7 @@ import java.util.stream.Collectors;
import agent.dbgeng.manager.impl.DbgMinimalSymbol;
import agent.dbgeng.model.iface2.DbgModelTargetSymbolContainer;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.schema.*;
import ghidra.dbg.target.schema.TargetObjectSchema.ResyncMode;
@ -45,7 +46,7 @@ public class DbgModelTargetSymbolContainerImpl extends DbgModelTargetObjectImpl
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return module.module.listMinimalSymbols().thenAccept(byName -> {
List<TargetObject> symbols;
synchronized (this) {

View file

@ -26,6 +26,7 @@ import agent.dbgeng.manager.reason.*;
import agent.dbgeng.model.iface1.DbgModelTargetConfigurable;
import agent.dbgeng.model.iface2.*;
import ghidra.async.AsyncUtils;
import ghidra.dbg.DebuggerObjectModel.RefreshBehavior;
import ghidra.dbg.error.DebuggerIllegalArgumentException;
import ghidra.dbg.target.TargetConfigurable;
import ghidra.dbg.target.TargetObject;
@ -53,7 +54,7 @@ public class DbgModelTargetThreadContainerImpl extends DbgModelTargetObjectImpl
getManager().addEventsListener(this);
if (!getModel().isSuppressDescent()) {
requestElements(false);
requestElements(RefreshBehavior.REFRESH_NEVER);
}
}
@ -119,7 +120,7 @@ public class DbgModelTargetThreadContainerImpl extends DbgModelTargetObjectImpl
}
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
public CompletableFuture<Void> requestElements(RefreshBehavior refresh) {
return process.listThreads().thenAccept(byTID -> {
List<TargetObject> threads;
synchronized (this) {