From d43b9ead66a0cf11abcda9a169aabcab9448325b Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Mon, 27 Feb 2023 12:26:21 -0500 Subject: [PATCH] GP-1545: De-guava the Debugger --- .../advanced/DebugAdvancedInternal.java | 12 +- .../breakpoint/DebugBreakpointInternal.java | 17 +- .../dbgeng/client/DebugClientInternal.java | 20 +- .../dbgeng/control/DebugControlInternal.java | 20 +- .../dataspaces/DebugDataSpacesInternal.java | 22 +- .../registers/DebugRegistersInternal.java | 12 +- .../dbgeng/symbols/DebugSymbolsInternal.java | 17 +- .../sysobj/DebugSystemObjectsInternal.java | 22 +- .../DbgModelTargetBreakpointSpecImpl.java | 6 +- .../impl/dbgmodel/UnknownExInternal.java | 12 +- .../bridge/HostDataModelAccessInternal.java | 10 +- .../concept/ComparableConceptInternal.java | 10 +- .../concept/DataModelConceptInternal.java | 10 +- ...DynamicConceptProviderConceptInternal.java | 14 +- .../DynamicKeyProviderConceptInternal.java | 10 +- .../concept/EquatableConceptInternal.java | 10 +- .../concept/IndexableConceptInternal.java | 10 +- .../concept/IterableConceptInternal.java | 9 +- .../PreferredRuntimeTypeConceptInternal.java | 10 +- .../StringDisplayableConceptInternal.java | 10 +- .../datamodel/DataModelManagerInternal.java | 14 +- .../script/DataModelNameBinderInternal.java | 10 +- .../script/DataModelScriptClientInternal.java | 10 +- .../DataModelScriptHostContextInternal.java | 10 +- .../script/DataModelScriptInternal.java | 10 +- .../DataModelScriptManagerInternal.java | 10 +- ...ModelScriptProviderEnumeratorInternal.java | 14 +- .../DataModelScriptProviderInternal.java | 10 +- ...ModelScriptTemplateEnumeratorInternal.java | 13 +- .../DataModelScriptTemplateInternal.java | 10 +- ...riptDebugBreakpointEnumeratorInternal.java | 14 +- ...ataModelScriptDebugBreakpointInternal.java | 14 +- .../DataModelScriptDebugClientInternal.java | 12 +- .../debug/DataModelScriptDebugInternal.java | 14 +- ...ataModelScriptDebugStackFrameInternal.java | 14 +- .../DataModelScriptDebugStackInternal.java | 12 +- ...iptDebugVariableSetEnumeratorInternal.java | 14 +- .../debughost/DebugHostBaseClassInternal.java | 10 +- .../debughost/DebugHostConstantInternal.java | 10 +- .../debughost/DebugHostContextInternal.java | 10 +- .../debughost/DebugHostDataInternal.java | 8 +- .../debughost/DebugHostErrorSinkInternal.java | 10 +- .../debughost/DebugHostEvaluatorInternal.java | 14 +- .../DebugHostExtensabilityInternal.java | 10 +- .../debughost/DebugHostFieldInternal.java | 9 +- .../dbgmodel/debughost/DebugHostInternal.java | 8 +- .../debughost/DebugHostMemoryInternal.java | 14 +- .../debughost/DebugHostModuleInternal.java | 14 +- .../DebugHostModuleSignatureInternal.java | 10 +- .../debughost/DebugHostPublicInternal.java | 10 +- .../DebugHostScriptHostInternal.java | 10 +- .../debughost/DebugHostStatusInternal.java | 10 +- .../DebugHostSymbolEnumeratorInternal.java | 10 +- .../debughost/DebugHostSymbolInternal.java | 14 +- .../debughost/DebugHostSymbolsInternal.java | 10 +- .../debughost/DebugHostTypeInternal.java | 10 +- .../DebugHostTypeSignatureInternal.java | 10 +- .../X_DebugHostBaseClassInternal.java | 10 +- .../dbgmodel/main/KeyEnumeratorInternal.java | 8 +- .../impl/dbgmodel/main/KeyStoreInternal.java | 8 +- .../dbgmodel/main/ModelIteratorInternal.java | 8 +- .../main/ModelKeyReferenceInternal.java | 14 +- .../dbgmodel/main/ModelMethodInternal.java | 8 +- .../dbgmodel/main/ModelObjectInternal.java | 8 +- .../main/ModelPropertyAccessorInternal.java | 10 +- .../dbgmodel/main/RawEnumeratorInternal.java | 8 +- .../impl/DelegateDbgModel2TargetObject.java | 5 +- .../agent/gdb/manager/reason/GdbReason.java | 15 +- .../impl/GdbModelTargetBreakpointSpec.java | 5 +- .../java/agent/gdb/manager/GdbTableTest.java | 16 +- .../manager/cmd/LldbReadMemoryCommand.java | 2 - .../LldbModelTargetAbstractXpointSpec.java | 7 +- .../LldbModelTargetBreakpointSpecImpl.java | 10 +- .../DelegateGadpClientTargetObject.java | 5 +- .../ghidra/dbg/gadp/client/GadpClient.java | 46 ++- .../model/JdiModelTargetBreakpointSpec.java | 7 +- .../gui/time/DebuggerSnapshotTablePanel.java | 13 +- .../breakpoint/LoneLogicalBreakpoint.java | 2 +- .../breakpoint/MappedLogicalBreakpoint.java | 2 +- .../breakpoint/TraceBreakpointSet.java | 7 +- .../java/ghidra/async/AsyncPairingCache.java | 66 +--- .../data/DomainObjectEventQueues.java | 75 ++-- ...chedWriteBytesPcodeExecutorStatePiece.java | 1 - .../java/ghidra/trace/database/DBTrace.java | 6 - .../DBTraceCacheForContainingQueries.java | 15 +- .../trace/database/DBTraceTimeViewport.java | 10 +- ...bstractBaseDBTraceCodeUnitsMemoryView.java | 10 +- .../AbstractComposedDBTraceCodeUnitsView.java | 15 +- ...thUndefinedDBTraceCodeUnitsMemoryView.java | 14 +- .../database/listing/DBTraceCodeManager.java | 15 +- .../listing/DBTraceCodeUnitAdapter.java | 4 +- .../listing/DBTraceUndefinedDataView.java | 27 +- .../DBTraceAddressSnapRangePropertyMap.java | 4 +- ...essSnapRangePropertyMapAddressSetView.java | 7 +- .../database/memory/DBTraceMemoryManager.java | 22 +- .../database/memory/DBTraceMemorySpace.java | 30 +- .../AbstractDBTraceProgramViewListing.java | 29 +- .../AbstractDBTraceProgramViewMemory.java | 12 - .../DBTraceProgramViewBookmarkManager.java | 5 +- .../DBTraceProgramViewEquateTable.java | 18 +- .../program/DBTraceProgramViewMemory.java | 15 +- .../DBTraceProgramViewSymbolTable.java | 13 +- .../symbol/AbstractDBTraceSymbol.java | 18 +- .../AbstractDBTraceSymbolSingleTypeView.java | 11 +- ...TraceSymbolSingleTypeWithLocationView.java | 36 +- .../database/symbol/DBTraceEquateManager.java | 4 +- .../database/symbol/DBTraceEquateSpace.java | 36 +- .../symbol/DBTraceFunctionSymbol.java | 23 +- .../symbol/DBTraceReferenceManager.java | 6 +- .../symbol/DBTraceReferenceSpace.java | 68 ++-- .../database/symbol/DBTraceSymbolManager.java | 8 +- .../DBTraceSymbolMultipleTypesView.java | 20 +- ...aceSymbolMultipleTypesWithAddressView.java | 8 +- ...ceSymbolMultipleTypesWithLocationView.java | 58 ++-- .../trace/database/target/DBTraceObject.java | 27 +- .../trace/util/WrappingFunctionIterator.java | 6 +- .../java/generic/CatenatedCollection.java | 18 +- .../depends/DependentServiceResolver.java | 36 +- .../ghidra/framework/options/AutoOptions.java | 4 +- .../ghidra/util/AddressRangeIterators.java | 18 +- .../java/ghidra/util/AnnotatedSaveable.java | 281 --------------- .../main/java/ghidra/util/LazyCollection.java | 100 ++++++ .../ghidra/util/MergeSortingIterator.java | 12 +- .../ghidra/util/MergeSortingSpliterator.java | 86 +++++ .../main/java/ghidra/util/StreamUtils.java | 34 ++ .../java/ghidra/util/UnionAddressSetView.java | 12 +- .../spatial/AbstractConstraintsTree.java | 45 +-- .../AbstractConstraintsTreeSpatialMap.java | 17 +- .../spatial/AbstractRStarConstraintsTree.java | 78 +++-- .../util/database/spatial/BoundingShape.java | 2 +- .../ghidra/util/datastruct/ListenerMap.java | 85 +++-- .../ghidra/util/datastruct/ListenerSet.java | 20 +- .../datastruct/PrivatelyQueuedListener.java | 12 + .../framework/options/AutoOptionsTest.java | 1 - .../framework/plugintool/AutoServiceTest.java | 33 +- .../datastruct/DynamicSortedTreeSetTest.java | 2 - .../ghidra/util/AnnotatedSaveableTest.java | 321 ------------------ .../database/spatial/RStarTreeMapTest.java | 26 +- .../util/datastruct/ListenerSetTest.java | 2 - .../datastruct/ObservableCollectionTest.java | 118 ++++--- Ghidra/Framework/Generic/build.gradle | 1 - .../main/java/generic/theme/ThemeWriter.java | 5 +- 142 files changed, 1125 insertions(+), 1889 deletions(-) delete mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/AnnotatedSaveable.java create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/LazyCollection.java create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/MergeSortingSpliterator.java create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/StreamUtils.java delete mode 100644 Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/AnnotatedSaveableTest.java diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/advanced/DebugAdvancedInternal.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/advanced/DebugAdvancedInternal.java index b1ce0bdfd5..2609b6d72d 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/advanced/DebugAdvancedInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/advanced/DebugAdvancedInternal.java @@ -17,7 +17,6 @@ package agent.dbgeng.impl.dbgeng.advanced; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -43,14 +42,11 @@ public interface DebugAdvancedInternal extends DebugAdvanced { return DbgEngUtil.lazyWeakCache(CACHE, advanced, DebugAdvancedImpl3::new); } - ImmutableMap.Builder> PREFERRED_ADVANCED_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_ADVANCED_IIDS = - PREFERRED_ADVANCED_IIDS_BUILDER // - .put(new REFIID(IDebugAdvanced3.IID_IDEBUG_ADVANCED3), WrapIDebugAdvanced3.class) // - .put(new REFIID(IDebugAdvanced2.IID_IDEBUG_ADVANCED2), WrapIDebugAdvanced2.class) // - .put(new REFIID(IDebugAdvanced.IID_IDEBUG_ADVANCED), WrapIDebugAdvanced.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugAdvanced3.IID_IDEBUG_ADVANCED3), WrapIDebugAdvanced3.class), + Map.entry(new REFIID(IDebugAdvanced2.IID_IDEBUG_ADVANCED2), WrapIDebugAdvanced2.class), + Map.entry(new REFIID(IDebugAdvanced.IID_IDEBUG_ADVANCED), WrapIDebugAdvanced.class)); static DebugAdvancedInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgEngUtil.tryPreferredInterfaces(DebugAdvancedInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/breakpoint/DebugBreakpointInternal.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/breakpoint/DebugBreakpointInternal.java index def9c9533a..9578f9e28f 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/breakpoint/DebugBreakpointInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/breakpoint/DebugBreakpointInternal.java @@ -17,7 +17,6 @@ package agent.dbgeng.impl.dbgeng.breakpoint; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -43,16 +42,14 @@ public interface DebugBreakpointInternal extends DebugBreakpoint { return DbgEngUtil.lazyWeakCache(CACHE, bp, DebugBreakpointImpl3::new); } - ImmutableMap.Builder> PREFERRED_BREAKPOINT_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_BREAKPOINT_IIDS = - PREFERRED_BREAKPOINT_IIDS_BUILDER // - .put(new REFIID(IDebugBreakpoint3.IID_IDEBUG_BREAKPOINT3), - WrapIDebugBreakpoint3.class) // - .put(new REFIID(IDebugBreakpoint2.IID_IDEBUG_BREAKPOINT2), - WrapIDebugBreakpoint2.class) // - .put(new REFIID(IDebugBreakpoint.IID_IDEBUG_BREAKPOINT), WrapIDebugBreakpoint.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugBreakpoint3.IID_IDEBUG_BREAKPOINT3), + WrapIDebugBreakpoint3.class), + Map.entry(new REFIID(IDebugBreakpoint2.IID_IDEBUG_BREAKPOINT2), + WrapIDebugBreakpoint2.class), + Map.entry(new REFIID(IDebugBreakpoint.IID_IDEBUG_BREAKPOINT), + WrapIDebugBreakpoint.class)); static DebugBreakpointInternal tryPreferredInterfaces(DebugControlInternal control, InterfaceSupplier supplier) { diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/client/DebugClientInternal.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/client/DebugClientInternal.java index f8e59a8f1a..db60176a9e 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/client/DebugClientInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/client/DebugClientInternal.java @@ -17,7 +17,6 @@ package agent.dbgeng.impl.dbgeng.client; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -67,18 +66,15 @@ public interface DebugClientInternal extends DebugClient { return DbgEngUtil.lazyWeakCache(CACHE, client, DebugClientImpl7::new); } - ImmutableMap.Builder> PREFERRED_CLIENT_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_CLIENT_IIDS = - PREFERRED_CLIENT_IIDS_BUILDER // - .put(new REFIID(IDebugClient7.IID_IDEBUG_CLIENT7), WrapIDebugClient7.class) // - .put(new REFIID(IDebugClient6.IID_IDEBUG_CLIENT6), WrapIDebugClient6.class) // - .put(new REFIID(IDebugClient5.IID_IDEBUG_CLIENT5), WrapIDebugClient5.class) // - .put(new REFIID(IDebugClient4.IID_IDEBUG_CLIENT4), WrapIDebugClient4.class) // - .put(new REFIID(IDebugClient3.IID_IDEBUG_CLIENT3), WrapIDebugClient3.class) // - .put(new REFIID(IDebugClient2.IID_IDEBUG_CLIENT2), WrapIDebugClient2.class) // - .put(new REFIID(IDebugClient.IID_IDEBUG_CLIENT), WrapIDebugClient.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugClient7.IID_IDEBUG_CLIENT7), WrapIDebugClient7.class), + Map.entry(new REFIID(IDebugClient6.IID_IDEBUG_CLIENT6), WrapIDebugClient6.class), + Map.entry(new REFIID(IDebugClient5.IID_IDEBUG_CLIENT5), WrapIDebugClient5.class), + Map.entry(new REFIID(IDebugClient4.IID_IDEBUG_CLIENT4), WrapIDebugClient4.class), + Map.entry(new REFIID(IDebugClient3.IID_IDEBUG_CLIENT3), WrapIDebugClient3.class), + Map.entry(new REFIID(IDebugClient2.IID_IDEBUG_CLIENT2), WrapIDebugClient2.class), + Map.entry(new REFIID(IDebugClient.IID_IDEBUG_CLIENT), WrapIDebugClient.class)); static DebugClientInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgEngUtil.tryPreferredInterfaces(DebugClientInternal.class, PREFERRED_CLIENT_IIDS, diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/control/DebugControlInternal.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/control/DebugControlInternal.java index 4e26bf7db6..bd635b1910 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/control/DebugControlInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/control/DebugControlInternal.java @@ -17,7 +17,6 @@ package agent.dbgeng.impl.dbgeng.control; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -59,18 +58,15 @@ public interface DebugControlInternal extends DebugControl { return DbgEngUtil.lazyWeakCache(CACHE, control, DebugControlImpl7::new); } - ImmutableMap.Builder> PREFERRED_CONTROL_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_CONTROL_IIDS = - PREFERRED_CONTROL_IIDS_BUILDER // - .put(new REFIID(IDebugControl7.IID_IDEBUG_CONTROL7), WrapIDebugControl7.class) // - .put(new REFIID(IDebugControl6.IID_IDEBUG_CONTROL6), WrapIDebugControl6.class) // - .put(new REFIID(IDebugControl5.IID_IDEBUG_CONTROL5), WrapIDebugControl5.class) // - .put(new REFIID(IDebugControl4.IID_IDEBUG_CONTROL4), WrapIDebugControl4.class) // - .put(new REFIID(IDebugControl3.IID_IDEBUG_CONTROL3), WrapIDebugControl3.class) // - .put(new REFIID(IDebugControl2.IID_IDEBUG_CONTROL2), WrapIDebugControl2.class) // - .put(new REFIID(IDebugControl.IID_IDEBUG_CONTROL), WrapIDebugControl.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugControl7.IID_IDEBUG_CONTROL7), WrapIDebugControl7.class), + Map.entry(new REFIID(IDebugControl6.IID_IDEBUG_CONTROL6), WrapIDebugControl6.class), + Map.entry(new REFIID(IDebugControl5.IID_IDEBUG_CONTROL5), WrapIDebugControl5.class), + Map.entry(new REFIID(IDebugControl4.IID_IDEBUG_CONTROL4), WrapIDebugControl4.class), + Map.entry(new REFIID(IDebugControl3.IID_IDEBUG_CONTROL3), WrapIDebugControl3.class), + Map.entry(new REFIID(IDebugControl2.IID_IDEBUG_CONTROL2), WrapIDebugControl2.class), + Map.entry(new REFIID(IDebugControl.IID_IDEBUG_CONTROL), WrapIDebugControl.class)); static DebugControlInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgEngUtil.tryPreferredInterfaces(DebugControlInternal.class, PREFERRED_CONTROL_IIDS, diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/dataspaces/DebugDataSpacesInternal.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/dataspaces/DebugDataSpacesInternal.java index 1b517d3846..69bb9fdb42 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/dataspaces/DebugDataSpacesInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/dataspaces/DebugDataSpacesInternal.java @@ -17,7 +17,6 @@ package agent.dbgeng.impl.dbgeng.dataspaces; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -46,19 +45,16 @@ public interface DebugDataSpacesInternal extends DebugDataSpaces { return DbgEngUtil.lazyWeakCache(CACHE, data, DebugDataSpacesImpl4::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugDataSpaces4.IID_IDEBUG_DATA_SPACES4), - WrapIDebugDataSpaces4.class) // - .put(new REFIID(IDebugDataSpaces3.IID_IDEBUG_DATA_SPACES3), - WrapIDebugDataSpaces3.class) // - .put(new REFIID(IDebugDataSpaces2.IID_IDEBUG_DATA_SPACES2), - WrapIDebugDataSpaces2.class) // - .put(new REFIID(IDebugDataSpaces.IID_IDEBUG_DATA_SPACES), - WrapIDebugDataSpaces.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugDataSpaces4.IID_IDEBUG_DATA_SPACES4), + WrapIDebugDataSpaces4.class), + Map.entry(new REFIID(IDebugDataSpaces3.IID_IDEBUG_DATA_SPACES3), + WrapIDebugDataSpaces3.class), + Map.entry(new REFIID(IDebugDataSpaces2.IID_IDEBUG_DATA_SPACES2), + WrapIDebugDataSpaces2.class), + Map.entry(new REFIID(IDebugDataSpaces.IID_IDEBUG_DATA_SPACES), + WrapIDebugDataSpaces.class)); static DebugDataSpacesInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgEngUtil.tryPreferredInterfaces(DebugDataSpacesInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/registers/DebugRegistersInternal.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/registers/DebugRegistersInternal.java index 5289c79928..fafe9cdd91 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/registers/DebugRegistersInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/registers/DebugRegistersInternal.java @@ -17,7 +17,6 @@ package agent.dbgeng.impl.dbgeng.registers; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -38,13 +37,12 @@ public interface DebugRegistersInternal extends DebugRegisters { return DbgEngUtil.lazyWeakCache(CACHE, registers, DebugRegistersImpl2::new); } - ImmutableMap.Builder> PREFERRED_REGISTERS_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_REGISTERS_IIDS = - PREFERRED_REGISTERS_IIDS_BUILDER // - .put(new REFIID(IDebugRegisters2.IID_IDEBUG_REGISTERS2), WrapIDebugRegisters2.class) // - .put(new REFIID(IDebugRegisters.IID_IDEBUG_REGISTERS), WrapIDebugRegisters.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugRegisters2.IID_IDEBUG_REGISTERS2), + WrapIDebugRegisters2.class), + Map.entry(new REFIID(IDebugRegisters.IID_IDEBUG_REGISTERS), + WrapIDebugRegisters.class)); static DebugRegistersInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgEngUtil.tryPreferredInterfaces(DebugRegistersInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/symbols/DebugSymbolsInternal.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/symbols/DebugSymbolsInternal.java index bc3994e960..b414b0cea8 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/symbols/DebugSymbolsInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/symbols/DebugSymbolsInternal.java @@ -17,7 +17,6 @@ package agent.dbgeng.impl.dbgeng.symbols; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -51,16 +50,13 @@ public interface DebugSymbolsInternal extends DebugSymbols { return DbgEngUtil.lazyWeakCache(CACHE, symbols, DebugSymbolsImpl5::new); } - ImmutableMap.Builder> PREFERRED_SYMBOLS_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFFERED_SYMBOLS_IIDS = - PREFERRED_SYMBOLS_IIDS_BUILDER // - .put(new REFIID(IDebugSymbols5.IID_IDEBUG_SYMBOLS5), WrapIDebugSymbols5.class) // - .put(new REFIID(IDebugSymbols4.IID_IDEBUG_SYMBOLS4), WrapIDebugSymbols4.class) // - .put(new REFIID(IDebugSymbols3.IID_IDEBUG_SYMBOLS3), WrapIDebugSymbols3.class) // - .put(new REFIID(IDebugSymbols2.IID_IDEBUG_SYMBOLS2), WrapIDebugSymbols2.class) // - .put(new REFIID(IDebugSymbols.IID_IDEBUG_SYMBOLS), WrapIDebugSymbols.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugSymbols5.IID_IDEBUG_SYMBOLS5), WrapIDebugSymbols5.class), + Map.entry(new REFIID(IDebugSymbols4.IID_IDEBUG_SYMBOLS4), WrapIDebugSymbols4.class), + Map.entry(new REFIID(IDebugSymbols3.IID_IDEBUG_SYMBOLS3), WrapIDebugSymbols3.class), + Map.entry(new REFIID(IDebugSymbols2.IID_IDEBUG_SYMBOLS2), WrapIDebugSymbols2.class), + Map.entry(new REFIID(IDebugSymbols.IID_IDEBUG_SYMBOLS), WrapIDebugSymbols.class)); static DebugSymbolsInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgEngUtil.tryPreferredInterfaces(DebugSymbolsInternal.class, PREFFERED_SYMBOLS_IIDS, @@ -69,6 +65,7 @@ public interface DebugSymbolsInternal extends DebugSymbols { String getModuleName(DebugModuleName which, DebugModule module); + @Override DebugModuleInfo getModuleParameters(int count, int startIndex); } diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/sysobj/DebugSystemObjectsInternal.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/sysobj/DebugSystemObjectsInternal.java index f8b033dbb0..4c1870dfa1 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/sysobj/DebugSystemObjectsInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/impl/dbgeng/sysobj/DebugSystemObjectsInternal.java @@ -17,7 +17,6 @@ package agent.dbgeng.impl.dbgeng.sysobj; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -46,19 +45,16 @@ public interface DebugSystemObjectsInternal extends DebugSystemObjects { return DbgEngUtil.lazyWeakCache(CACHE, sysobj, DebugSystemObjectsImpl4::new); } - ImmutableMap.Builder> PREFERRED_SYSTEM_OBJECTS_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_SYSTEM_OBJECTS_IIDS = - PREFERRED_SYSTEM_OBJECTS_IIDS_BUILDER // - .put(new REFIID(IDebugSystemObjects4.IID_IDEBUG_SYSTEM_OBJECTS4), - WrapIDebugSystemObjects4.class) // - .put(new REFIID(IDebugSystemObjects3.IID_IDEBUG_SYSTEM_OBJECTS3), - WrapIDebugSystemObjects3.class) // - .put(new REFIID(IDebugSystemObjects2.IID_IDEBUG_SYSTEM_OBJECTS2), - WrapIDebugSystemObjects2.class) // - .put(new REFIID(IDebugSystemObjects.IID_IDEBUG_SYSTEM_OBJECTS), - WrapIDebugSystemObjects.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugSystemObjects4.IID_IDEBUG_SYSTEM_OBJECTS4), + WrapIDebugSystemObjects4.class), + Map.entry(new REFIID(IDebugSystemObjects3.IID_IDEBUG_SYSTEM_OBJECTS3), + WrapIDebugSystemObjects3.class), + Map.entry(new REFIID(IDebugSystemObjects2.IID_IDEBUG_SYSTEM_OBJECTS2), + WrapIDebugSystemObjects2.class), + Map.entry(new REFIID(IDebugSystemObjects.IID_IDEBUG_SYSTEM_OBJECTS), + WrapIDebugSystemObjects.class)); static DebugSystemObjectsInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgEngUtil.tryPreferredInterfaces(DebugSystemObjectsInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetBreakpointSpecImpl.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetBreakpointSpecImpl.java index 8ae2c8ac9f..cc939739cc 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetBreakpointSpecImpl.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetBreakpointSpecImpl.java @@ -26,6 +26,7 @@ import ghidra.dbg.target.TargetBreakpointSpec; import ghidra.dbg.target.schema.TargetAttributeType; import ghidra.dbg.target.schema.TargetObjectSchemaInfo; import ghidra.dbg.util.PathUtils; +import ghidra.util.datastruct.ListenerMap.ListenerEntry; import ghidra.util.datastruct.ListenerSet; @TargetObjectSchemaInfo( @@ -84,8 +85,9 @@ public class DbgModelTargetBreakpointSpecImpl extends DbgModelTargetObjectImpl private final ListenerSet actions = new ListenerSet<>(TargetBreakpointAction.class) { // Use strong references on actions - protected Map createMap() { - return Collections.synchronizedMap(new LinkedHashMap<>()); + // The values may be weak, but the keys, which are the same objects, are strong + protected Map> createMap() { + return new LinkedHashMap<>(); } }; diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/UnknownExInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/UnknownExInternal.java index e4bd6d441a..d844dde7fd 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/UnknownExInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/UnknownExInternal.java @@ -17,16 +17,13 @@ package agent.dbgmodel.impl.dbgmodel; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; +import com.sun.jna.platform.win32.COM.IUnknown; import agent.dbgmodel.dbgmodel.UnknownEx; import agent.dbgmodel.impl.dbgmodel.DbgModelUtil.InterfaceSupplier; import agent.dbgmodel.jna.dbgmodel.WrapIUnknownEx; - -import com.sun.jna.platform.win32.COM.IUnknown; - import ghidra.util.datastruct.WeakValueHashMap; public interface UnknownExInternal extends UnknownEx { @@ -36,12 +33,9 @@ public interface UnknownExInternal extends UnknownEx { return DbgModelUtil.lazyWeakCache(CACHE, data, UnknownExImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IUnknown.IID_IUNKNOWN), WrapIUnknownEx.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IUnknown.IID_IUNKNOWN), WrapIUnknownEx.class)); static UnknownExInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(UnknownExInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/bridge/HostDataModelAccessInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/bridge/HostDataModelAccessInternal.java index 17fb32e86e..28cc777f7c 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/bridge/HostDataModelAccessInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/bridge/HostDataModelAccessInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.bridge; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface HostDataModelAccessInternal extends HostDataModelAccess { return DbgModelUtil.lazyWeakCache(CACHE, data, HostDataModelAccessImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IHostDataModelAccess.IID_IHOST_DATA_MODEL_ACCESS), - WrapIHostDataModelAccess.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IHostDataModelAccess.IID_IHOST_DATA_MODEL_ACCESS), + WrapIHostDataModelAccess.class)); static HostDataModelAccessInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(HostDataModelAccessInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/ComparableConceptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/ComparableConceptInternal.java index 6261c0dfa1..d168e6cd0a 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/ComparableConceptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/ComparableConceptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.concept; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface ComparableConceptInternal extends ComparableConcept { return DbgModelUtil.lazyWeakCache(CACHE, data, ComparableConceptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IComparableConcept.IID_ICOMPARABLE_CONCEPT), - WrapIComparableConcept.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IComparableConcept.IID_ICOMPARABLE_CONCEPT), + WrapIComparableConcept.class)); static ComparableConceptInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(ComparableConceptInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DataModelConceptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DataModelConceptInternal.java index f4efa1f390..263591f799 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DataModelConceptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DataModelConceptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.concept; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DataModelConceptInternal extends DataModelConcept { return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelConceptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelConcept.IID_IDATA_MODEL_CONCEPT), - WrapIDataModelConcept.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelConcept.IID_IDATA_MODEL_CONCEPT), + WrapIDataModelConcept.class)); static DataModelConceptInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelConceptInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DynamicConceptProviderConceptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DynamicConceptProviderConceptInternal.java index 8bf277a335..4a412e7fc8 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DynamicConceptProviderConceptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DynamicConceptProviderConceptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.concept; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -36,15 +35,12 @@ public interface DynamicConceptProviderConceptInternal extends DynamicConceptPro return DbgModelUtil.lazyWeakCache(CACHE, data, DynamicConceptProviderConceptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put( - new REFIID( - IDynamicConceptProviderConcept.IID_IDYNAMIC_CONCEPT_PROVIDER_CONCEPT), - WrapIDynamicConceptProviderConcept.class) // - .build(); + Map.ofEntries( + Map.entry( + new REFIID( + IDynamicConceptProviderConcept.IID_IDYNAMIC_CONCEPT_PROVIDER_CONCEPT), + WrapIDynamicConceptProviderConcept.class)); static DynamicConceptProviderConceptInternal tryPreferredInterfaces( InterfaceSupplier supplier) { diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DynamicKeyProviderConceptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DynamicKeyProviderConceptInternal.java index 8b56ea5f08..d19c689bce 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DynamicKeyProviderConceptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/DynamicKeyProviderConceptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.concept; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DynamicKeyProviderConceptInternal extends DynamicKeyProviderCon return DbgModelUtil.lazyWeakCache(CACHE, data, DynamicKeyProviderConceptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDynamicKeyProviderConcept.IID_IDYNAMIC_KEY_PROVIDER_CONCEPT), - WrapIDynamicKeyProviderConcept.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDynamicKeyProviderConcept.IID_IDYNAMIC_KEY_PROVIDER_CONCEPT), + WrapIDynamicKeyProviderConcept.class)); static DynamicKeyProviderConceptInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DynamicKeyProviderConceptInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/EquatableConceptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/EquatableConceptInternal.java index 1e06199cab..3b0ca95d4e 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/EquatableConceptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/EquatableConceptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.concept; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface EquatableConceptInternal extends EquatableConcept { return DbgModelUtil.lazyWeakCache(CACHE, data, EquatableConceptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IEquatableConcept.IID_IEQUATABLE_CONCEPT), - WrapIEquatableConcept.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IEquatableConcept.IID_IEQUATABLE_CONCEPT), + WrapIEquatableConcept.class)); static EquatableConceptInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(EquatableConceptInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/IndexableConceptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/IndexableConceptInternal.java index 717fd31dff..bd38b0cde6 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/IndexableConceptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/IndexableConceptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.concept; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface IndexableConceptInternal extends IndexableConcept { return DbgModelUtil.lazyWeakCache(CACHE, data, IndexableConceptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IIndexableConcept.IID_IINDEXABLE_CONCEPT), - WrapIIndexableConcept.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IIndexableConcept.IID_IINDEXABLE_CONCEPT), + WrapIIndexableConcept.class)); static IndexableConceptInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(IndexableConceptInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/IterableConceptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/IterableConceptInternal.java index db98f44937..ad72ecc4d4 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/IterableConceptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/IterableConceptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.concept; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,10 @@ public interface IterableConceptInternal extends IterableConcept { return DbgModelUtil.lazyWeakCache(CACHE, data, IterableConceptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IIterableConcept.IID_IITERABLE_CONCEPT), WrapIIterableConcept.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IIterableConcept.IID_IITERABLE_CONCEPT), + WrapIIterableConcept.class)); static IterableConceptInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(IterableConceptInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/PreferredRuntimeTypeConceptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/PreferredRuntimeTypeConceptInternal.java index 28a8c985d8..c9f028b847 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/PreferredRuntimeTypeConceptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/PreferredRuntimeTypeConceptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.concept; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface PreferredRuntimeTypeConceptInternal extends PreferredRuntimeTyp return DbgModelUtil.lazyWeakCache(CACHE, data, PreferredRuntimeTypeConceptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IPreferredRuntimeTypeConcept.IID_IPREFERRED_RUNTIME_TYPE_CONCEPT), - WrapIPreferredRuntimeTypeConcept.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IPreferredRuntimeTypeConcept.IID_IPREFERRED_RUNTIME_TYPE_CONCEPT), + WrapIPreferredRuntimeTypeConcept.class)); static PreferredRuntimeTypeConceptInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(PreferredRuntimeTypeConceptInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/StringDisplayableConceptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/StringDisplayableConceptInternal.java index 96693b443d..bf98d5e8c0 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/StringDisplayableConceptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/concept/StringDisplayableConceptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.concept; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface StringDisplayableConceptInternal extends StringDisplayableConce return DbgModelUtil.lazyWeakCache(CACHE, data, StringDisplayableConceptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IStringDisplayableConcept.IID_ISTRING_DISPLAYABLE_CONCEPT), - WrapIStringDisplayableConcept.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IStringDisplayableConcept.IID_ISTRING_DISPLAYABLE_CONCEPT), + WrapIStringDisplayableConcept.class)); static StringDisplayableConceptInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(StringDisplayableConceptInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/DataModelManagerInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/DataModelManagerInternal.java index 936363774c..d7bb6d138a 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/DataModelManagerInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/DataModelManagerInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -38,15 +37,12 @@ public interface DataModelManagerInternal extends DataModelManager1 { return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelManagerImpl2::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelManager2.IID_IDATA_MODEL_MANAGER2), - WrapIDataModelManager2.class) // - .put(new REFIID(IDataModelManager1.IID_IDATA_MODEL_MANAGER), - WrapIDataModelManager1.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelManager2.IID_IDATA_MODEL_MANAGER2), + WrapIDataModelManager2.class), + Map.entry(new REFIID(IDataModelManager1.IID_IDATA_MODEL_MANAGER), + WrapIDataModelManager1.class)); static DataModelManagerInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelManagerInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelNameBinderInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelNameBinderInternal.java index be65feeff6..61a2c4554e 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelNameBinderInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelNameBinderInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DataModelNameBinderInternal extends DataModelNameBinder { return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelNameBinderImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelNameBinder.IID_IDATA_MODEL_NAME_BINDER), - WrapIDataModelNameBinder.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelNameBinder.IID_IDATA_MODEL_NAME_BINDER), + WrapIDataModelNameBinder.class)); static DataModelNameBinderInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelNameBinderInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptClientInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptClientInternal.java index eddef9d7d0..333b283e63 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptClientInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptClientInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DataModelScriptClientInternal extends DataModelScriptClient { return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptClientImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelScriptClient.IID_IDATA_MODEL_SCRIPT_CLIENT), - WrapIDataModelScriptClient.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelScriptClient.IID_IDATA_MODEL_SCRIPT_CLIENT), + WrapIDataModelScriptClient.class)); static DataModelScriptClientInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelScriptClientInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptHostContextInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptHostContextInternal.java index 36452168ab..36fb692e50 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptHostContextInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptHostContextInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DataModelScriptHostContextInternal extends DataModelScriptHostC return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptHostContextImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelScriptHostContext.IID_IDATA_MODEL_SCRIPT_HOST_CONTEXT), - WrapIDataModelScriptHostContext.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelScriptHostContext.IID_IDATA_MODEL_SCRIPT_HOST_CONTEXT), + WrapIDataModelScriptHostContext.class)); static DataModelScriptHostContextInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelScriptHostContextInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptInternal.java index 9251ccb54a..56e67eaa6a 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DataModelScriptInternal extends DataModelScript { return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelScript.IID_IDATA_MODEL_SCRIPT), - WrapIDataModelScript.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelScript.IID_IDATA_MODEL_SCRIPT), + WrapIDataModelScript.class)); static DataModelScriptInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelScriptInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptManagerInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptManagerInternal.java index b662a32586..e80a6a2bf2 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptManagerInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptManagerInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DataModelScriptManagerInternal extends DataModelScriptManager { return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptManagerImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelScriptManager.IID_IDATA_MODEL_SCRIPT_MANAGER), - WrapIDataModelScriptManager.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelScriptManager.IID_IDATA_MODEL_SCRIPT_MANAGER), + WrapIDataModelScriptManager.class)); static DataModelScriptManagerInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelScriptManagerInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptProviderEnumeratorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptProviderEnumeratorInternal.java index e2fd91fcd0..b7a5ff041e 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptProviderEnumeratorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptProviderEnumeratorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -37,15 +36,12 @@ public interface DataModelScriptProviderEnumeratorInternal return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptProviderEnumeratorImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put( - new REFIID( - IDataModelScriptProviderEnumerator.IID_IDATA_MODEL_SCRIPT_PROVIDER_ENUMERATOR), - WrapIDataModelScriptProviderEnumerator.class) // - .build(); + Map.ofEntries( + Map.entry( + new REFIID( + IDataModelScriptProviderEnumerator.IID_IDATA_MODEL_SCRIPT_PROVIDER_ENUMERATOR), + WrapIDataModelScriptProviderEnumerator.class)); static DataModelScriptProviderEnumeratorInternal tryPreferredInterfaces( InterfaceSupplier supplier) { diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptProviderInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptProviderInternal.java index 638d387696..6e773b89ad 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptProviderInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptProviderInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DataModelScriptProviderInternal extends DataModelScriptProvider return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptProviderImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelScriptProvider.IID_IDATA_MODEL_SCRIPT_PROVIDER), - WrapIDataModelScriptProvider.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelScriptProvider.IID_IDATA_MODEL_SCRIPT_PROVIDER), + WrapIDataModelScriptProvider.class)); static DataModelScriptProviderInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelScriptProviderInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptTemplateEnumeratorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptTemplateEnumeratorInternal.java index 594abc9f5e..7223b11ceb 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptTemplateEnumeratorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptTemplateEnumeratorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -37,15 +36,11 @@ public interface DataModelScriptTemplateEnumeratorInternal return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptTemplateEnumeratorImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put( - new REFIID( - IDataModelScriptTemplateEnumerator.IID_IDATA_MODEL_SCRIPT_TEMPLATE_ENUMERATOR), - WrapIDataModelScriptTemplateEnumerator.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID( + IDataModelScriptTemplateEnumerator.IID_IDATA_MODEL_SCRIPT_TEMPLATE_ENUMERATOR), + WrapIDataModelScriptTemplateEnumerator.class)); static DataModelScriptTemplateEnumeratorInternal tryPreferredInterfaces( InterfaceSupplier supplier) { diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptTemplateInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptTemplateInternal.java index 438fea7466..a06f3a3144 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptTemplateInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/DataModelScriptTemplateInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DataModelScriptTemplateInternal extends DataModelScriptTemplate return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptTemplateImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelScriptTemplate.IID_IDATA_MODEL_SCRIPT_TEMPLATE), - WrapIDataModelScriptTemplate.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelScriptTemplate.IID_IDATA_MODEL_SCRIPT_TEMPLATE), + WrapIDataModelScriptTemplate.class)); static DataModelScriptTemplateInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelScriptTemplateInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugBreakpointEnumeratorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugBreakpointEnumeratorInternal.java index 55ffbf4e9b..1a6581fba6 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugBreakpointEnumeratorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugBreakpointEnumeratorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script.debug; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -38,15 +37,12 @@ public interface DataModelScriptDebugBreakpointEnumeratorInternal DataModelScriptDebugBreakpointEnumeratorImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put( - new REFIID( - IDataModelScriptDebugBreakpointEnumerator.IID_IDATA_MODEL_SCRIPT_DEBUG_BREAKPOINT_ENUMERATOR), - WrapIDataModelScriptDebugBreakpointEnumerator.class) // - .build(); + Map.ofEntries( + Map.entry( + new REFIID( + IDataModelScriptDebugBreakpointEnumerator.IID_IDATA_MODEL_SCRIPT_DEBUG_BREAKPOINT_ENUMERATOR), + WrapIDataModelScriptDebugBreakpointEnumerator.class)); static DataModelScriptDebugBreakpointEnumeratorInternal tryPreferredInterfaces( InterfaceSupplier supplier) { diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugBreakpointInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugBreakpointInternal.java index d48adc2ff7..ce505e9356 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugBreakpointInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugBreakpointInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script.debug; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -36,15 +35,12 @@ public interface DataModelScriptDebugBreakpointInternal extends DataModelScriptD return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptDebugBreakpointImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put( - new REFIID( - IDataModelScriptDebugBreakpoint.IID_IDATA_MODEL_SCRIPT_DEBUG_BREAKPOINT), - WrapIDataModelScriptDebugBreakpoint.class) // - .build(); + Map.ofEntries( + Map.entry( + new REFIID( + IDataModelScriptDebugBreakpoint.IID_IDATA_MODEL_SCRIPT_DEBUG_BREAKPOINT), + WrapIDataModelScriptDebugBreakpoint.class)); static DataModelScriptDebugBreakpointInternal tryPreferredInterfaces( InterfaceSupplier supplier) { diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugClientInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugClientInternal.java index a1073c7d57..a18df300d4 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugClientInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugClientInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script.debug; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -36,14 +35,11 @@ public interface DataModelScriptDebugClientInternal extends DataModelScriptDebug return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptDebugClientImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put( - new REFIID(IDataModelScriptDebugClient.IID_IDATA_MODEL_SCRIPT_DEBUG_CLIENT), - WrapIDataModelScriptDebugClient.class) // - .build(); + Map.ofEntries( + Map.entry( + new REFIID(IDataModelScriptDebugClient.IID_IDATA_MODEL_SCRIPT_DEBUG_CLIENT), + WrapIDataModelScriptDebugClient.class)); static DataModelScriptDebugClientInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelScriptDebugClientInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugInternal.java index 8a048a9bff..1d99b853cb 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script.debug; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -34,15 +33,12 @@ public interface DataModelScriptDebugInternal extends DataModelScriptDebug1 { return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptDebugImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDataModelScriptDebug2.IID_IDATA_MODEL_SCRIPT_DEBUG2), - WrapIDataModelScriptDebug.class) // - .put(new REFIID(IDataModelScriptDebug.IID_IDATA_MODEL_SCRIPT_DEBUG), - WrapIDataModelScriptDebug.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDataModelScriptDebug2.IID_IDATA_MODEL_SCRIPT_DEBUG2), + WrapIDataModelScriptDebug.class), + Map.entry(new REFIID(IDataModelScriptDebug.IID_IDATA_MODEL_SCRIPT_DEBUG), + WrapIDataModelScriptDebug.class)); static DataModelScriptDebugInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelScriptDebugInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugStackFrameInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugStackFrameInternal.java index 2fb72d2cab..a495b2f528 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugStackFrameInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugStackFrameInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script.debug; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -36,15 +35,12 @@ public interface DataModelScriptDebugStackFrameInternal extends DataModelScriptD return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptDebugStackFrameImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put( - new REFIID( - IDataModelScriptDebugStackFrame.IID_IDATA_MODEL_SCRIPT_DEBUG_STACK_FRAME), - WrapIDataModelScriptDebugStackFrame.class) // - .build(); + Map.ofEntries( + Map.entry( + new REFIID( + IDataModelScriptDebugStackFrame.IID_IDATA_MODEL_SCRIPT_DEBUG_STACK_FRAME), + WrapIDataModelScriptDebugStackFrame.class)); static DataModelScriptDebugStackFrameInternal tryPreferredInterfaces( InterfaceSupplier supplier) { diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugStackInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugStackInternal.java index 79ee30c230..5847e117ae 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugStackInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugStackInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script.debug; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -36,14 +35,11 @@ public interface DataModelScriptDebugStackInternal extends DataModelScriptDebugS return DbgModelUtil.lazyWeakCache(CACHE, data, DataModelScriptDebugStackImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put( - new REFIID(IDataModelScriptDebugStack.IID_IDATA_MODEL_SCRIPT_DEBUG_STACK), - WrapIDataModelScriptDebugStack.class) // - .build(); + Map.ofEntries( + Map.entry( + new REFIID(IDataModelScriptDebugStack.IID_IDATA_MODEL_SCRIPT_DEBUG_STACK), + WrapIDataModelScriptDebugStack.class)); static DataModelScriptDebugStackInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DataModelScriptDebugStackInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugVariableSetEnumeratorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugVariableSetEnumeratorInternal.java index 141b57eccd..a44c2ffb0e 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugVariableSetEnumeratorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/datamodel/script/debug/DataModelScriptDebugVariableSetEnumeratorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.datamodel.script.debug; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -39,15 +38,12 @@ public interface DataModelScriptDebugVariableSetEnumeratorInternal DataModelScriptDebugVariableSetEnumeratorImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put( - new REFIID( - IDataModelScriptDebugVariableSetEnumerator.IID_IDATA_MODEL_SCRIPT_DEBUG_VARIABLE_SET_ENUMERATOR), - WrapIDataModelScriptDebugVariableSetEnumerator.class) // - .build(); + Map.ofEntries( + Map.entry( + new REFIID( + IDataModelScriptDebugVariableSetEnumerator.IID_IDATA_MODEL_SCRIPT_DEBUG_VARIABLE_SET_ENUMERATOR), + WrapIDataModelScriptDebugVariableSetEnumerator.class)); static DataModelScriptDebugVariableSetEnumeratorInternal tryPreferredInterfaces( InterfaceSupplier supplier) { diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostBaseClassInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostBaseClassInternal.java index 2fb9b491f6..697c2e7d37 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostBaseClassInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostBaseClassInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -36,13 +35,10 @@ public interface DebugHostBaseClassInternal extends DebugHostBase { return DbgModelUtil.lazyWeakCache(CACHE, data, X_DebugHostBaseClassImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(X_IDebugHostBaseClass.IID_IDEBUG_HOST_BASE_CLASS), - X_WrapIDebugHostBaseClass.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(X_IDebugHostBaseClass.IID_IDEBUG_HOST_BASE_CLASS), + X_WrapIDebugHostBaseClass.class)); static X_DebugHostBaseClassInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(X_DebugHostBaseClassInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostConstantInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostConstantInternal.java index cdbbe9b55b..0ca397dd01 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostConstantInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostConstantInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostConstantInternal extends DebugHostConstant { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostConstantImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostConstant.IID_IDEBUG_HOST_CONSTANT), - WrapIDebugHostConstant.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostConstant.IID_IDEBUG_HOST_CONSTANT), + WrapIDebugHostConstant.class)); static DebugHostConstantInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostConstantInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostContextInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostContextInternal.java index 1589a4e85b..784477d9ff 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostContextInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostContextInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostContextInternal extends DebugHostContext { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostContextImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostContext.IID_IDEBUG_HOST_CONTEXT), - WrapIDebugHostContext.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostContext.IID_IDEBUG_HOST_CONTEXT), + WrapIDebugHostContext.class)); static DebugHostContextInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostContextInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostDataInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostDataInternal.java index 3c0789b453..340a556ca0 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostDataInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostDataInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,9 @@ public interface DebugHostDataInternal extends DebugHostData { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostDataImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostData.IID_IDEBUG_HOST_DATA), WrapIDebugHostData.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostData.IID_IDEBUG_HOST_DATA), WrapIDebugHostData.class)); static DebugHostDataInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostDataInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostErrorSinkInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostErrorSinkInternal.java index 3fd059d7a7..3e9553f19e 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostErrorSinkInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostErrorSinkInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostErrorSinkInternal extends DebugHostErrorSink { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostErrorSinkImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostErrorSink.IID_IDEBUG_HOST_ERROR_SINK), - WrapIDebugHostErrorSink.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostErrorSink.IID_IDEBUG_HOST_ERROR_SINK), + WrapIDebugHostErrorSink.class)); static DebugHostErrorSinkInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostErrorSinkInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostEvaluatorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostEvaluatorInternal.java index 01bdf5949f..cf8767d91d 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostEvaluatorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostEvaluatorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -38,15 +37,12 @@ public interface DebugHostEvaluatorInternal extends DebugHostEvaluator1 { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostEvaluatorImpl2::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostEvaluator2.IID_IDEBUG_HOST_EVALUATOR2), - WrapIDebugHostEvaluator2.class) // - .put(new REFIID(IDebugHostEvaluator1.IID_IDEBUG_HOST_EVALUATOR), - WrapIDebugHostEvaluator1.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostEvaluator2.IID_IDEBUG_HOST_EVALUATOR2), + WrapIDebugHostEvaluator2.class), + Map.entry(new REFIID(IDebugHostEvaluator1.IID_IDEBUG_HOST_EVALUATOR), + WrapIDebugHostEvaluator1.class)); static DebugHostEvaluatorInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostEvaluatorInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostExtensabilityInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostExtensabilityInternal.java index 87ace450ff..87186a76d1 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostExtensabilityInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostExtensabilityInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostExtensabilityInternal extends DebugHostExtensability { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostExtensabilityImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostExtensability.IID_IDEBUG_HOST_EXTENSABILITY), - WrapIDebugHostExtensability.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostExtensability.IID_IDEBUG_HOST_EXTENSABILITY), + WrapIDebugHostExtensability.class)); static DebugHostExtensabilityInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostExtensabilityInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostFieldInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostFieldInternal.java index 7854f81453..e213546e8c 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostFieldInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostFieldInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,10 @@ public interface DebugHostFieldInternal extends DebugHostField { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostFieldImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostField.IID_IDEBUG_HOST_FIELD), WrapIDebugHostField.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostField.IID_IDEBUG_HOST_FIELD), + WrapIDebugHostField.class)); static DebugHostFieldInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostFieldInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostInternal.java index 68e30984bc..cd3203f350 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,9 @@ public interface DebugHostInternal extends DebugHost { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHost.IID_IDEBUG_HOST), WrapIDebugHost.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHost.IID_IDEBUG_HOST), WrapIDebugHost.class)); static DebugHostInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostMemoryInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostMemoryInternal.java index 89c37a3424..976fcb7994 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostMemoryInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostMemoryInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -38,15 +37,12 @@ public interface DebugHostMemoryInternal extends DebugHostMemory1 { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostMemoryImpl2::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostMemory2.IID_IDEBUG_HOST_MEMORY2), - WrapIDebugHostMemory2.class) // - .put(new REFIID(IDebugHostMemory1.IID_IDEBUG_HOST_MEMORY), - WrapIDebugHostMemory1.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostMemory2.IID_IDEBUG_HOST_MEMORY2), + WrapIDebugHostMemory2.class), + Map.entry(new REFIID(IDebugHostMemory1.IID_IDEBUG_HOST_MEMORY), + WrapIDebugHostMemory1.class)); static DebugHostMemoryInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostMemoryInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostModuleInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostModuleInternal.java index 330cb673f2..2829ca3199 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostModuleInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostModuleInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -38,15 +37,12 @@ public interface DebugHostModuleInternal extends DebugHostModule1 { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostModuleImpl2::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostModule2.IID_IDEBUG_HOST_MODULE2), - WrapIDebugHostModule2.class) // - .put(new REFIID(IDebugHostModule1.IID_IDEBUG_HOST_MODULE), - WrapIDebugHostModule1.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostModule2.IID_IDEBUG_HOST_MODULE2), + WrapIDebugHostModule2.class), + Map.entry(new REFIID(IDebugHostModule1.IID_IDEBUG_HOST_MODULE), + WrapIDebugHostModule1.class)); static DebugHostModuleInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostModuleInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostModuleSignatureInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostModuleSignatureInternal.java index b2b8943597..b52439eff4 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostModuleSignatureInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostModuleSignatureInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostModuleSignatureInternal extends DebugHostModuleSignatu return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostModuleSignatureImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostModuleSignature.IID_IDEBUG_HOST_MODULE_SIGNATURE), - WrapIDebugHostModuleSignature.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostModuleSignature.IID_IDEBUG_HOST_MODULE_SIGNATURE), + WrapIDebugHostModuleSignature.class)); static DebugHostModuleSignatureInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostModuleSignatureInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostPublicInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostPublicInternal.java index d5ce337069..5b3a6339c6 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostPublicInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostPublicInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostPublicInternal extends DebugHostPublic { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostPublicImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostPublic.IID_IDEBUG_HOST_PUBLIC), - WrapIDebugHostPublic.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostPublic.IID_IDEBUG_HOST_PUBLIC), + WrapIDebugHostPublic.class)); static DebugHostPublicInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostPublicInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostScriptHostInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostScriptHostInternal.java index 983727e949..1cc55eaba2 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostScriptHostInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostScriptHostInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostScriptHostInternal extends DebugHostScriptHost { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostScriptHostImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostScriptHost.IID_IDEBUG_HOST_SCRIPT_HOST), - WrapIDebugHostScriptHost.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostScriptHost.IID_IDEBUG_HOST_SCRIPT_HOST), + WrapIDebugHostScriptHost.class)); static DebugHostScriptHostInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostScriptHostInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostStatusInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostStatusInternal.java index 46c0e21847..ffd4313970 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostStatusInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostStatusInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostStatusInternal extends DebugHostStatus { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostStatusImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostStatus.IID_IDEBUG_HOST_STATUS), - WrapIDebugHostStatus.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostStatus.IID_IDEBUG_HOST_STATUS), + WrapIDebugHostStatus.class)); static DebugHostStatusInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostStatusInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolEnumeratorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolEnumeratorInternal.java index ec0bef0979..897dac77ec 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolEnumeratorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolEnumeratorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostSymbolEnumeratorInternal extends DebugHostSymbolEnumer return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostSymbolEnumeratorImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostSymbolEnumerator.IID_IDEBUG_HOST_SYMBOL_ENUMERATOR), - WrapIDebugHostSymbolEnumerator.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostSymbolEnumerator.IID_IDEBUG_HOST_SYMBOL_ENUMERATOR), + WrapIDebugHostSymbolEnumerator.class)); static DebugHostSymbolEnumeratorInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostSymbolEnumeratorInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolInternal.java index 811c1c3027..c6755f6a1f 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -38,15 +37,12 @@ public interface DebugHostSymbolInternal extends DebugHostSymbol1 { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostSymbolImpl2::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostSymbol2.IID_IDEBUG_HOST_SYMBOL2), - WrapIDebugHostSymbol2.class) // - .put(new REFIID(IDebugHostSymbol1.IID_IDEBUG_HOST_SYMBOL), - WrapIDebugHostSymbol1.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostSymbol2.IID_IDEBUG_HOST_SYMBOL2), + WrapIDebugHostSymbol2.class), + Map.entry(new REFIID(IDebugHostSymbol1.IID_IDEBUG_HOST_SYMBOL), + WrapIDebugHostSymbol1.class)); static DebugHostSymbolInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostSymbolInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolsInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolsInternal.java index 10f884e5fa..3a1d53fab4 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolsInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostSymbolsInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostSymbolsInternal extends DebugHostSymbols { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostSymbolsImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostSymbols.IID_IDEBUG_HOST_SYMBOLS), - WrapIDebugHostSymbols.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostSymbols.IID_IDEBUG_HOST_SYMBOLS), + WrapIDebugHostSymbols.class)); static DebugHostSymbolsInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostSymbolsInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostTypeInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostTypeInternal.java index b6e9c42278..0451cd90f1 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostTypeInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostTypeInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -38,13 +37,10 @@ public interface DebugHostTypeInternal extends DebugHostType1 { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostTypeImpl2::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostType2.IID_IDEBUG_HOST_TYPE2), WrapIDebugHostType2.class) // - .put(new REFIID(IDebugHostType1.IID_IDEBUG_HOST_TYPE), WrapIDebugHostType1.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostType2.IID_IDEBUG_HOST_TYPE2), WrapIDebugHostType2.class), + Map.entry(new REFIID(IDebugHostType1.IID_IDEBUG_HOST_TYPE), WrapIDebugHostType1.class)); static DebugHostTypeInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostTypeInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostTypeSignatureInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostTypeSignatureInternal.java index 34e894110d..ebb53b4bfb 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostTypeSignatureInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/DebugHostTypeSignatureInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface DebugHostTypeSignatureInternal extends DebugHostTypeSignature { return DbgModelUtil.lazyWeakCache(CACHE, data, DebugHostTypeSignatureImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IDebugHostTypeSignature.IID_IDEBUG_HOST_TYPE_SIGNATURE), - WrapIDebugHostTypeSignature.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IDebugHostTypeSignature.IID_IDEBUG_HOST_TYPE_SIGNATURE), + WrapIDebugHostTypeSignature.class)); static DebugHostTypeSignatureInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(DebugHostTypeSignatureInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/X_DebugHostBaseClassInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/X_DebugHostBaseClassInternal.java index 7f8923b4c2..cc2d0b311e 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/X_DebugHostBaseClassInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/debughost/X_DebugHostBaseClassInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.debughost; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface X_DebugHostBaseClassInternal extends DebugHostBaseClass { return DbgModelUtil.lazyWeakCache(CACHE, data, X_DebugHostBaseClassImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(X_IDebugHostBaseClass.IID_IDEBUG_HOST_BASE_CLASS), - X_WrapIDebugHostBaseClass.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(X_IDebugHostBaseClass.IID_IDEBUG_HOST_BASE_CLASS), + X_WrapIDebugHostBaseClass.class)); static X_DebugHostBaseClassInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(X_DebugHostBaseClassInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/KeyEnumeratorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/KeyEnumeratorInternal.java index 48551b3941..082a18f417 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/KeyEnumeratorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/KeyEnumeratorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.main; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,9 @@ public interface KeyEnumeratorInternal extends KeyEnumerator { return DbgModelUtil.lazyWeakCache(CACHE, data, KeyEnumeratorImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IKeyEnumerator.IID_IKEY_ENUMERATOR), WrapIKeyEnumerator.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IKeyEnumerator.IID_IKEY_ENUMERATOR), WrapIKeyEnumerator.class)); static KeyEnumeratorInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(KeyEnumeratorInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/KeyStoreInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/KeyStoreInternal.java index 4cc34f2e01..d5b44d7a6b 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/KeyStoreInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/KeyStoreInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.main; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,9 @@ public interface KeyStoreInternal extends KeyStore { return DbgModelUtil.lazyWeakCache(CACHE, data, KeyStoreImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IKeyStore.IID_IKEY_STORE), WrapIKeyStore.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IKeyStore.IID_IKEY_STORE), WrapIKeyStore.class)); static KeyStoreInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(KeyStoreInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelIteratorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelIteratorInternal.java index 4f2706a66c..16184fa139 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelIteratorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelIteratorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.main; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,9 @@ public interface ModelIteratorInternal extends ModelIterator { return DbgModelUtil.lazyWeakCache(CACHE, data, ModelIteratorImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IModelIterator.IID_IMODEL_ITERATOR), WrapIModelIterator.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IModelIterator.IID_IMODEL_ITERATOR), WrapIModelIterator.class)); static ModelIteratorInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(ModelIteratorInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelKeyReferenceInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelKeyReferenceInternal.java index 72c237e80d..ec1eec99fb 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelKeyReferenceInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelKeyReferenceInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.main; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -38,15 +37,12 @@ public interface ModelKeyReferenceInternal extends ModelKeyReference1 { return DbgModelUtil.lazyWeakCache(CACHE, data, ModelKeyReferenceImpl2::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IModelKeyReference2.IID_IMODEL_REFERENCE2), - WrapIModelKeyReference2.class) // - .put(new REFIID(IModelKeyReference.IID_IMODEL_REFERENCE), - WrapIModelKeyReference1.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IModelKeyReference2.IID_IMODEL_REFERENCE2), + WrapIModelKeyReference2.class), + Map.entry(new REFIID(IModelKeyReference.IID_IMODEL_REFERENCE), + WrapIModelKeyReference1.class)); static ModelKeyReferenceInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(ModelKeyReferenceInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelMethodInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelMethodInternal.java index 3b4db49ce4..aacbabe51b 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelMethodInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelMethodInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.main; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,9 @@ public interface ModelMethodInternal extends ModelMethod { return DbgModelUtil.lazyWeakCache(CACHE, data, ModelMethodImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IModelMethod.IID_IMODEL_METHOD), WrapIModelMethod.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IModelMethod.IID_IMODEL_METHOD), WrapIModelMethod.class)); static ModelMethodInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(ModelMethodInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelObjectInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelObjectInternal.java index a62119f6c4..32d5542481 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelObjectInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelObjectInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.main; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,9 @@ public interface ModelObjectInternal extends ModelObject { return DbgModelUtil.lazyWeakCache(CACHE, data, ModelObjectImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IModelObject.IID_IMODEL_OBJECT), WrapIModelObject.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IModelObject.IID_IMODEL_OBJECT), WrapIModelObject.class)); static ModelObjectInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(ModelObjectInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelPropertyAccessorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelPropertyAccessorInternal.java index 8187cee6b9..2d43de3336 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelPropertyAccessorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/ModelPropertyAccessorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.main; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,13 +34,10 @@ public interface ModelPropertyAccessorInternal extends ModelPropertyAccessor { return DbgModelUtil.lazyWeakCache(CACHE, data, ModelPropertyAccessorImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IModelPropertyAccessor.IID_IMODEL_PROPERTY_ACCESSOR), - WrapIModelPropertyAccessor.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IModelPropertyAccessor.IID_IMODEL_PROPERTY_ACCESSOR), + WrapIModelPropertyAccessor.class)); static ModelPropertyAccessorInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(ModelPropertyAccessorInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/RawEnumeratorInternal.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/RawEnumeratorInternal.java index 351d11d8fc..fb8d09aae0 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/RawEnumeratorInternal.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/impl/dbgmodel/main/RawEnumeratorInternal.java @@ -17,7 +17,6 @@ package agent.dbgmodel.impl.dbgmodel.main; import java.util.Map; -import com.google.common.collect.ImmutableMap; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.REFIID; @@ -35,12 +34,9 @@ public interface RawEnumeratorInternal extends RawEnumerator { return DbgModelUtil.lazyWeakCache(CACHE, data, RawEnumeratorImpl::new); } - ImmutableMap.Builder> PREFERRED_DATA_SPACES_IIDS_BUILDER = - ImmutableMap.builder(); Map> PREFERRED_DATA_SPACES_IIDS = - PREFERRED_DATA_SPACES_IIDS_BUILDER // - .put(new REFIID(IRawEnumerator.IID_IRAW_ENUMERATOR), WrapIRawEnumerator.class) // - .build(); + Map.ofEntries( + Map.entry(new REFIID(IRawEnumerator.IID_IRAW_ENUMERATOR), WrapIRawEnumerator.class)); static RawEnumeratorInternal tryPreferredInterfaces(InterfaceSupplier supplier) { return DbgModelUtil.tryPreferredInterfaces(RawEnumeratorInternal.class, diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/model/impl/DelegateDbgModel2TargetObject.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/model/impl/DelegateDbgModel2TargetObject.java index 77f2fef03d..ad4973ce8e 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/model/impl/DelegateDbgModel2TargetObject.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/model/impl/DelegateDbgModel2TargetObject.java @@ -68,6 +68,7 @@ import ghidra.dbg.target.TargetStack; import ghidra.dbg.target.TargetStackFrame; import ghidra.dbg.target.TargetThread; import ghidra.dbg.util.PathUtils; +import ghidra.util.datastruct.ListenerMap.ListenerEntry; import ghidra.util.datastruct.ListenerSet; public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl implements // @@ -210,8 +211,8 @@ public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl imp private final ListenerSet breakpointActions = new ListenerSet<>(TargetBreakpointAction.class) { // Use strong references on actions - protected Map createMap() { - return Collections.synchronizedMap(new LinkedHashMap<>()); + protected Map> createMap() { + return new LinkedHashMap<>(); }; }; diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/manager/reason/GdbReason.java b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/manager/reason/GdbReason.java index 289c54a840..5fea26c781 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/manager/reason/GdbReason.java +++ b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/manager/reason/GdbReason.java @@ -18,8 +18,6 @@ package agent.gdb.manager.reason; import java.util.Map; import java.util.function.Function; -import com.google.common.collect.ImmutableMap; - import agent.gdb.manager.GdbState; import agent.gdb.manager.parsing.GdbMiParser.GdbMiFieldList; import ghidra.util.Msg; @@ -38,13 +36,12 @@ public interface GdbReason { * A map of reason strings to reason classes */ static final Map> TYPES = - new ImmutableMap.Builder>() - .put("signal-received", GdbSignalReceivedReason::new) - .put("breakpoint-hit", GdbBreakpointHitReason::new) - .put("end-stepping-range", GdbEndSteppingRangeReason::new) - .put("exited", GdbExitedReason::new) - .put("exited-normally", GdbExitNormallyReason::new) - .build(); + Map.ofEntries( + Map.entry("signal-received", GdbSignalReceivedReason::new), + Map.entry("breakpoint-hit", GdbBreakpointHitReason::new), + Map.entry("end-stepping-range", GdbEndSteppingRangeReason::new), + Map.entry("exited", GdbExitedReason::new), + Map.entry("exited-normally", GdbExitNormallyReason::new)); /** * Reasons other than those given by GDB diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetBreakpointSpec.java b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetBreakpointSpec.java index 01c26444fa..c011cb71a6 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetBreakpointSpec.java +++ b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetBreakpointSpec.java @@ -29,6 +29,7 @@ import ghidra.dbg.target.schema.TargetAttributeType; import ghidra.dbg.target.schema.TargetObjectSchemaInfo; import ghidra.dbg.util.PathUtils; import ghidra.util.Msg; +import ghidra.util.datastruct.ListenerMap.ListenerEntry; import ghidra.util.datastruct.ListenerSet; import ghidra.util.datastruct.WeakValueHashMap; @@ -62,8 +63,8 @@ public class GdbModelTargetBreakpointSpec extends protected final ListenerSet actions = new ListenerSet<>(TargetBreakpointAction.class) { // Use strong references on actions - protected Map createMap() { - return Collections.synchronizedMap(new LinkedHashMap<>()); + protected Map> createMap() { + return new LinkedHashMap<>(); }; }; diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/test/java/agent/gdb/manager/GdbTableTest.java b/Ghidra/Debug/Debugger-agent-gdb/src/test/java/agent/gdb/manager/GdbTableTest.java index b21737e6f6..1945d677b1 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/src/test/java/agent/gdb/manager/GdbTableTest.java +++ b/Ghidra/Debug/Debugger-agent-gdb/src/test/java/agent/gdb/manager/GdbTableTest.java @@ -22,10 +22,6 @@ import java.util.function.Consumer; import org.junit.Test; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; - -import agent.gdb.manager.GdbTable; import agent.gdb.manager.parsing.GdbMiParser.GdbMiFieldList; public class GdbTableTest { @@ -35,16 +31,16 @@ public class GdbTableTest { return builder.build(); } - protected Map buildMap(Consumer> conf) { - ImmutableMap.Builder builder = ImmutableMap.builder(); + protected Map buildMap(Consumer> conf) { + Map builder = new HashMap<>(); conf.accept(builder); - return builder.build(); + return Map.copyOf(builder); } - protected List buildList(Consumer> conf) { - ImmutableList.Builder builder = ImmutableList.builder(); + protected List buildList(Consumer> conf) { + List builder = new ArrayList<>(); conf.accept(builder); - return builder.build(); + return List.copyOf(builder); } protected GdbTable buildTestTable() { diff --git a/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/manager/cmd/LldbReadMemoryCommand.java b/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/manager/cmd/LldbReadMemoryCommand.java index ea7c7de99b..3aa361ac49 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/manager/cmd/LldbReadMemoryCommand.java +++ b/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/manager/cmd/LldbReadMemoryCommand.java @@ -18,8 +18,6 @@ package agent.lldb.manager.cmd; import java.math.BigInteger; import java.nio.ByteBuffer; -import com.google.common.collect.*; - import SWIG.*; import agent.lldb.manager.impl.LldbManagerImpl; import ghidra.program.model.address.*; diff --git a/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetAbstractXpointSpec.java b/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetAbstractXpointSpec.java index 61e8bee985..f89de3ce7a 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetAbstractXpointSpec.java +++ b/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetAbstractXpointSpec.java @@ -26,13 +26,14 @@ import ghidra.async.AsyncUtils; import ghidra.dbg.target.TargetBreakpointSpecContainer.TargetBreakpointKindSet; import ghidra.dbg.target.schema.*; import ghidra.dbg.util.PathUtils; +import ghidra.util.datastruct.ListenerMap.ListenerEntry; import ghidra.util.datastruct.ListenerSet; import ghidra.util.datastruct.WeakValueHashMap; @TargetObjectSchemaInfo( name = "BreakpointSpec", elements = { // - @TargetElementType(type = LldbModelTargetBreakpointLocationImpl.class) // + @TargetElementType(type = LldbModelTargetBreakpointLocationImpl.class) }, attributes = { @TargetAttributeType(name = "Type", type = String.class), @@ -60,8 +61,8 @@ public abstract class LldbModelTargetAbstractXpointSpec extends LldbModelTargetO protected final ListenerSet actions = new ListenerSet<>(TargetBreakpointAction.class) { // Use strong references on actions - protected Map createMap() { - return Collections.synchronizedMap(new LinkedHashMap<>()); + protected Map> createMap() { + return new LinkedHashMap<>(); }; }; diff --git a/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetBreakpointSpecImpl.java b/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetBreakpointSpecImpl.java index 59e1fa3682..7cd67f78cd 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetBreakpointSpecImpl.java +++ b/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetBreakpointSpecImpl.java @@ -19,19 +19,21 @@ import java.math.BigInteger; import java.util.*; import java.util.stream.Collectors; -import SWIG.*; +import SWIG.SBBreakpoint; +import SWIG.SBStream; import agent.lldb.model.iface2.LldbModelTargetBreakpointContainer; import agent.lldb.model.iface2.LldbModelTargetBreakpointLocation; import ghidra.dbg.target.TargetBreakpointLocation; import ghidra.dbg.target.TargetBreakpointSpecContainer.TargetBreakpointKindSet; import ghidra.dbg.target.TargetObject; import ghidra.dbg.target.schema.*; +import ghidra.util.datastruct.ListenerMap.ListenerEntry; import ghidra.util.datastruct.ListenerSet; @TargetObjectSchemaInfo( name = "BreakpointSpec", elements = { // - @TargetElementType(type = LldbModelTargetBreakpointLocationImpl.class) // + @TargetElementType(type = LldbModelTargetBreakpointLocationImpl.class) }, attributes = { @TargetAttributeType(name = "Type", type = String.class), @@ -46,8 +48,8 @@ public class LldbModelTargetBreakpointSpecImpl extends LldbModelTargetAbstractXp protected final ListenerSet actions = new ListenerSet<>(TargetBreakpointAction.class) { // Use strong references on actions - protected Map createMap() { - return Collections.synchronizedMap(new LinkedHashMap<>()); + protected Map> createMap() { + return new LinkedHashMap<>(); }; }; diff --git a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/DelegateGadpClientTargetObject.java b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/DelegateGadpClientTargetObject.java index 9782a933ad..6f28c69992 100644 --- a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/DelegateGadpClientTargetObject.java +++ b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/DelegateGadpClientTargetObject.java @@ -33,6 +33,7 @@ import ghidra.dbg.target.TargetObject; import ghidra.dbg.target.schema.TargetObjectSchema; import ghidra.program.model.address.AddressSpace; import ghidra.util.Msg; +import ghidra.util.datastruct.ListenerMap.ListenerEntry; import ghidra.util.datastruct.ListenerSet; import utilities.util.ProxyUtilities; @@ -276,8 +277,8 @@ public class DelegateGadpClientTargetObject if (actions == null && createIfAbsent) { actions = new ListenerSet<>(TargetBreakpointAction.class) { // Want strong references on actions - protected Map createMap() { - return Collections.synchronizedMap(new LinkedHashMap<>()); + protected Map> createMap() { + return new LinkedHashMap<>(); }; }; } diff --git a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/GadpClient.java b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/GadpClient.java index 73f1d0fb46..b1beed640c 100644 --- a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/GadpClient.java +++ b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/GadpClient.java @@ -26,7 +26,6 @@ import java.util.function.Function; import org.apache.commons.lang3.exception.ExceptionUtils; import org.jdom.JDOMException; -import com.google.common.cache.RemovalNotification; import com.google.protobuf.Message; import com.google.protobuf.ProtocolStringList; @@ -48,6 +47,7 @@ import ghidra.dbg.target.schema.XmlSchemaContext; import ghidra.dbg.util.PathUtils; import ghidra.program.model.address.*; import ghidra.util.*; +import ghidra.util.datastruct.FixedSizeHashMap; import ghidra.util.exception.DuplicateNameException; import utilities.util.ProxyUtilities; @@ -58,7 +58,6 @@ public class GadpClient extends AbstractDebuggerObjectModel // TODO: More sophisticated cache management // TODO: Perhaps no cache at all, and rely totally on async notifications protected static final int MAX_OUTSTANDING_REQUESTS = Integer.MAX_VALUE; - protected static final int REQUEST_TIMEOUT_MILLIS = Integer.MAX_VALUE; protected static final ProtobufOneofByTypeHelper MSG_HELPER = ProtobufOneofByTypeHelper.create(Gadp.RootMessage.getDefaultInstance(), @@ -218,13 +217,22 @@ public class GadpClient extends AbstractDebuggerObjectModel new AsyncDebouncer<>(AsyncTimer.DEFAULT_TIMER, 500); public MessagePairingCache() { - super(4, REQUEST_TIMEOUT_MILLIS, MAX_OUTSTANDING_REQUESTS); + super(MAX_OUTSTANDING_REQUESTS); cacheMonitor.addListener(this::cacheSettled); } @Override - protected void resultRemoved(RemovalNotification rn) { - Msg.error(this, "Received message with unexpected sequence number: " + rn); + protected Map createResultCache(int max) { + return new FixedSizeHashMap<>(max) { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + if (!super.removeEldestEntry(eldest)) { + return false; + } + Msg.error(this, "Received message with unexpected sequence number: " + eldest); + return true; + } + }; } @Override @@ -235,17 +243,23 @@ public class GadpClient extends AbstractDebuggerObjectModel } @Override - protected void promiseRemoved( - RemovalNotification> rn) { - if (rn.wasEvicted()) { - String message = "Command with sequence number " + rn.getKey() + - " evicted because " + rn.getCause(); - Msg.error(this, message); - AsyncUtils.FRAMEWORK_EXECUTOR.execute(() -> { - rn.getValue().completeExceptionally(new TimeoutException(message)); - }); - } - cacheMonitor.contact(null); + protected Map> createPromiseCache(int max) { + return new FixedSizeHashMap<>(max) { + @Override + protected boolean removeEldestEntry( + Map.Entry> eldest) { + if (!super.removeEldestEntry(eldest)) { + return false; + } + String message = "Command with sequence number " + eldest.getKey() + + " evicted"; + Msg.error(this, message); + AsyncUtils.FRAMEWORK_EXECUTOR.execute(() -> { + eldest.getValue().completeExceptionally(new TimeoutException(message)); + }); + return true; + } + }; } private void cacheSettled(Void __) { diff --git a/Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/model/JdiModelTargetBreakpointSpec.java b/Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/model/JdiModelTargetBreakpointSpec.java index 76c3af34b9..399d38c934 100644 --- a/Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/model/JdiModelTargetBreakpointSpec.java +++ b/Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/model/JdiModelTargetBreakpointSpec.java @@ -20,11 +20,12 @@ import java.util.concurrent.CompletableFuture; import ghidra.dbg.jdi.manager.breakpoint.JdiBreakpointInfo; import ghidra.dbg.jdi.model.iface1.JdiModelTargetDeletable; -import ghidra.dbg.target.TargetBreakpointSpecContainer.TargetBreakpointKindSet; import ghidra.dbg.target.TargetBreakpointLocation; import ghidra.dbg.target.TargetBreakpointSpec; +import ghidra.dbg.target.TargetBreakpointSpecContainer.TargetBreakpointKindSet; import ghidra.dbg.target.schema.TargetAttributeType; import ghidra.dbg.target.schema.TargetObjectSchemaInfo; +import ghidra.util.datastruct.ListenerMap.ListenerEntry; import ghidra.util.datastruct.ListenerSet; @TargetObjectSchemaInfo( @@ -48,8 +49,8 @@ public class JdiModelTargetBreakpointSpec extends JdiModelTargetObjectImpl protected final ListenerSet actions = new ListenerSet<>(TargetBreakpointAction.class) { // Use strong references on actions - protected Map createMap() { - return Collections.synchronizedMap(new LinkedHashMap<>()); + protected Map> createMap() { + return new LinkedHashMap<>(); } }; diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/time/DebuggerSnapshotTablePanel.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/time/DebuggerSnapshotTablePanel.java index b99d780507..f0f78990dc 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/time/DebuggerSnapshotTablePanel.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/time/DebuggerSnapshotTablePanel.java @@ -25,8 +25,6 @@ import java.util.function.Function; import javax.swing.*; import javax.swing.table.*; -import com.google.common.collect.Collections2; - import docking.widgets.table.*; import docking.widgets.table.DefaultEnumeratedColumnTableModel.EnumeratedTableColumn; import ghidra.docking.settings.Settings; @@ -239,8 +237,8 @@ public class DebuggerSnapshotTablePanel extends JPanel { Collection snapshots = hideScratch ? manager.getSnapshots(0, true, Long.MAX_VALUE, true) : manager.getAllSnapshots(); - snapshotTableModel.addAll(Collections2.transform(snapshots, - s -> new SnapshotRow(currentTrace, s))); + snapshotTableModel + .addAll(snapshots.stream().map(s -> new SnapshotRow(currentTrace, s)).toList()); } protected void deleteScratchSnapshots() { @@ -252,9 +250,10 @@ public class DebuggerSnapshotTablePanel extends JPanel { return; } TraceTimeManager manager = currentTrace.getTimeManager(); - snapshotTableModel.addAll(Collections2.transform( - manager.getSnapshots(Long.MIN_VALUE, true, 0, false), - s -> new SnapshotRow(currentTrace, s))); + snapshotTableModel.addAll(manager.getSnapshots(Long.MIN_VALUE, true, 0, false) + .stream() + .map(s -> new SnapshotRow(currentTrace, s)) + .toList()); } public ListSelectionModel getSelectionModel() { diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/LoneLogicalBreakpoint.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/LoneLogicalBreakpoint.java index 47ae1a0dd4..b3f2d1205f 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/LoneLogicalBreakpoint.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/LoneLogicalBreakpoint.java @@ -112,7 +112,7 @@ public class LoneLogicalBreakpoint implements LogicalBreakpointInternal { @Override public Set getTraceBreakpoints() { - return new HashSet<>(breaks.getBreakpoints()); + return breaks.getBreakpoints(); } @Override diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/MappedLogicalBreakpoint.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/MappedLogicalBreakpoint.java index 1a009898c6..34f4ef5c33 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/MappedLogicalBreakpoint.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/MappedLogicalBreakpoint.java @@ -334,7 +334,7 @@ public class MappedLogicalBreakpoint implements LogicalBreakpointInternal { synchronized (traceBreaks) { breaks = traceBreaks.get(trace); } - return breaks == null ? Set.of() : new HashSet<>(breaks.getBreakpoints()); + return breaks == null ? Set.of() : breaks.getBreakpoints(); } @Override diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/TraceBreakpointSet.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/TraceBreakpointSet.java index 9bfa6d3dfe..374714e7b9 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/TraceBreakpointSet.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/TraceBreakpointSet.java @@ -16,8 +16,7 @@ package ghidra.app.plugin.core.debug.service.breakpoint; import java.util.*; - -import com.google.common.collect.Collections2; +import java.util.stream.Collectors; import ghidra.app.services.*; import ghidra.app.services.LogicalBreakpoint.TraceMode; @@ -239,8 +238,8 @@ class TraceBreakpointSet { * * @return the breakpoints */ - public Collection getBreakpoints() { - return Collections2.transform(breakpoints, e -> e.obj); + public Set getBreakpoints() { + return breakpoints.stream().map(e -> e.obj).collect(Collectors.toUnmodifiableSet()); } /** diff --git a/Ghidra/Debug/Framework-AsyncComm/src/main/java/ghidra/async/AsyncPairingCache.java b/Ghidra/Debug/Framework-AsyncComm/src/main/java/ghidra/async/AsyncPairingCache.java index cf733c1ad0..af3e45b81f 100644 --- a/Ghidra/Debug/Framework-AsyncComm/src/main/java/ghidra/async/AsyncPairingCache.java +++ b/Ghidra/Debug/Framework-AsyncComm/src/main/java/ghidra/async/AsyncPairingCache.java @@ -17,14 +17,12 @@ package ghidra.async; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; import java.util.function.Function; -import com.google.common.cache.*; - /** * A cache of futures which pairs each to its result by key * + *

* The cache accepts promises and results, storing unpaired entries for a timeout period. Each * promise is fulfilled when the cache accepts its corresponding result, determined by key. * Conversely, a cached result fulfills its corresponding promise, determined by key, when the cache @@ -32,6 +30,7 @@ import com.google.common.cache.*; * given key enter the cache, they are paired, the promise is fulfilled, and both are removed from * the cache. * + *

* If an entry is not paired within the timeout period, it is evicted. An evicted promise is likely * a recoverable error, e.g., a request timed out. An evicted result is likely a logic or * synchronization error. Requests, i.e., promises, are usually created before the result is @@ -53,66 +52,26 @@ public abstract class AsyncPairingCache { /** * Construct a new matching cache * - * @param concurrencyLevel the maximum number of thread expected to simultaneously access the - * cache - * @param timeoutMillis the amount of time (in milliseconds) a promise or result may pend before - * eviction * @param maxPending the maximum number of pending promises or results before the eldest is * evicted. Each is counted independently, e.g., a value of 5 permits 5 pending * promises and 5 pending results simultaneously. */ - public AsyncPairingCache(int concurrencyLevel, int timeoutMillis, int maxPending) { - results = CacheBuilder.newBuilder() - .concurrencyLevel(concurrencyLevel) - .expireAfterWrite(timeoutMillis, TimeUnit.MILLISECONDS) - .maximumSize(maxPending) - .removalListener(this::resultRemoved) - .build() - .asMap(); + public AsyncPairingCache(int maxPending) { + results = createResultCache(maxPending); resultsView = Collections.unmodifiableMap(results); - promises = CacheBuilder.newBuilder() - .concurrencyLevel(concurrencyLevel) - .expireAfterWrite(timeoutMillis, TimeUnit.MILLISECONDS) - .maximumSize(maxPending) - .removalListener(this::promiseRemoved) - .build() - .asMap(); + promises = createPromiseCache(maxPending); promisesView = Collections.unmodifiableMap(promises); } - /** - * Called when a result is removed - * - * Eviction is likely due to a logic bug or a gratuitous result from an external source. - * - * @param rn the removal notification for the result entry - */ - protected abstract void resultRemoved(RemovalNotification rn); + protected abstract Map createResultCache(int max); - /** - * Called when a promise is removed - * - * The most common implementation is to complete the future exceptionally. The default - * implementation completes the future with a {@link RuntimeException}. Extensions should - * override this method. Note that this method is called for removal as a result of normal - * completion, too. In that case {@link RemovalNotification#getCause()} will return - * {@link RemovalCause#EXPLICIT}. - * - * @param rn the removal notification for the promise entry - */ - protected void promiseRemoved(RemovalNotification> rn) { - if (rn.getCause() != RemovalCause.EXPLICIT) { - rn.getValue() - .completeExceptionally(new RuntimeException( - "Promise with key " + rn.getKey() + - " was evicted with the default handler")); - } - } + protected abstract Map> createPromiseCache(int max); /** * Enter a promise for the the given key into the cache * + *

* If the result for the given key is already available, the promise does not enter the cache. * Instead, the result is removed and the promise is completed. * @@ -126,6 +85,7 @@ public abstract class AsyncPairingCache { /** * Enter a promise for the the given key into the cache * + *

* If the result for the given key is already available, the promise does not enter the cache. * Instead, the result is removed and the promise is completed. * @@ -148,6 +108,7 @@ public abstract class AsyncPairingCache { /** * Enter a result for the given key into the cache * + *

* If a promise for the key already exists, the result does not enter the cache. Instead, the * promise is removed and completed. * @@ -169,11 +130,8 @@ public abstract class AsyncPairingCache { /** * Flush the cache, completing all pending requests exceptionally * - * Both sides of the cache are cleared. Note that this will invoke the removal callback for each - * entry giving {@link RemovalCause#EXPLICIT} as the cause. For requests, the callback ought not - * to complete the request, exceptionally or otherwise, since the flush is about to complete it - * with the given exception. The implementor may freely choose how to handle flushed pending - * results. + *

+ * Both sides of the cache are cleared. * * @param exc the exception for completing the requests */ diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/framework/data/DomainObjectEventQueues.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/framework/data/DomainObjectEventQueues.java index a064c4b6bb..8d4ba49895 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/framework/data/DomainObjectEventQueues.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/framework/data/DomainObjectEventQueues.java @@ -15,25 +15,50 @@ */ package ghidra.framework.data; -import java.util.Map; -import java.util.NoSuchElementException; - -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalNotification; +import java.lang.ref.Cleaner; +import java.util.*; import ghidra.framework.model.*; import ghidra.util.Lock; public class DomainObjectEventQueues { + protected static class PrivateQueue { + private static final Cleaner CLEANER = Cleaner.create(); + + static class State implements Runnable { + final DomainObjectChangeSupport docs; + + public State(DomainObjectChangeSupport docs) { + this.docs = docs; + } + + @Override + public void run() { + docs.dispose(); + } + } + + private final State state; + private final Cleaner.Cleanable cleanable; + + public PrivateQueue(DomainObjectChangeSupport docs) { + this.state = new State(docs); + this.cleanable = CLEANER.register(this, state); + } + + public void flush() { + state.docs.flush(); + } + + public void fireEvent(DomainObjectChangeRecord ev) { + state.docs.fireEvent(ev); + } + } + protected final DomainObject source; protected final Lock lock; protected final DomainObjectChangeSupport eventQueue; - protected final Map privateEventQueues = - CacheBuilder.newBuilder() - .removalListener(this::privateQueueRemoved) - .weakKeys() - .build() - .asMap(); + protected final Map privateEventQueues = new WeakHashMap<>(); protected volatile boolean eventsEnabled = true; @@ -43,14 +68,9 @@ public class DomainObjectEventQueues { eventQueue = new DomainObjectChangeSupport(source, timeInterval, lock); } - private void privateQueueRemoved( - RemovalNotification rn) { - rn.getValue().dispose(); - } - public void flushEvents() { eventQueue.flush(); - for (DomainObjectChangeSupport privateQueue : privateEventQueues.values()) { + for (PrivateQueue privateQueue : privateEventQueues.values()) { privateQueue.flush(); } } @@ -65,20 +85,23 @@ public class DomainObjectEventQueues { public EventQueueID createPrivateEventQueue(DomainObjectListener listener, int maxDelay) { EventQueueID id = new EventQueueID(); - DomainObjectChangeSupport privateQueue = - new DomainObjectChangeSupport(source, maxDelay, lock); - privateQueue.addListener(listener); - privateEventQueues.put(id, privateQueue); + DomainObjectChangeSupport docs = new DomainObjectChangeSupport(source, maxDelay, lock); + docs.addListener(listener); + privateEventQueues.put(id, new PrivateQueue(docs)); return id; } public boolean removePrivateEventQueue(EventQueueID id) { - return privateEventQueues.remove(id) != null; - // NOTE: Removal callback will dispose() + PrivateQueue privateQueue = privateEventQueues.remove(id); + if (privateQueue == null) { + return false; + } + privateQueue.cleanable.clean(); + return true; } public void flushPrivateEventQueue(EventQueueID id) { - DomainObjectChangeSupport privateQueue = privateEventQueues.get(id); + PrivateQueue privateQueue = privateEventQueues.get(id); if (privateQueue == null) { throw new NoSuchElementException("Private queue no longer exists"); } @@ -88,7 +111,7 @@ public class DomainObjectEventQueues { public void fireEvent(DomainObjectChangeRecord ev) { if (eventsEnabled) { eventQueue.fireEvent(ev); - for (DomainObjectChangeSupport privateQueue : privateEventQueues.values()) { + for (PrivateQueue privateQueue : privateEventQueues.values()) { privateQueue.fireEvent(ev); } } @@ -103,7 +126,7 @@ public class DomainObjectEventQueues { DomainObjectChangeRecord restored = new DomainObjectChangeRecord(DomainObject.DO_OBJECT_RESTORED); eventQueue.fireEvent(restored); - for (DomainObjectChangeSupport privateQueue : privateEventQueues.values()) { + for (PrivateQueue privateQueue : privateEventQueues.values()) { privateQueue.fireEvent(restored); } } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/RequireIsKnownTraceCachedWriteBytesPcodeExecutorStatePiece.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/RequireIsKnownTraceCachedWriteBytesPcodeExecutorStatePiece.java index 38bdc460ce..ed32bfc313 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/RequireIsKnownTraceCachedWriteBytesPcodeExecutorStatePiece.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/RequireIsKnownTraceCachedWriteBytesPcodeExecutorStatePiece.java @@ -16,7 +16,6 @@ package ghidra.pcode.exec.trace; import ghidra.pcode.exec.AccessPcodeExecutionException; -import ghidra.pcode.exec.PcodeExecutorStatePiece; import ghidra.pcode.exec.trace.data.PcodeTraceDataAccess; import ghidra.program.model.address.*; import ghidra.trace.model.memory.TraceMemorySpace; diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTrace.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTrace.java index 3146b72940..91b4df5605 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTrace.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTrace.java @@ -21,8 +21,6 @@ import java.util.function.Consumer; import org.apache.commons.collections4.collection.CompositeCollection; -import com.google.common.cache.RemovalNotification; - import db.DBHandle; import generic.depends.DependentService; import generic.depends.err.ServiceConstructionException; @@ -229,10 +227,6 @@ public class DBTrace extends DBCachedDomainObjectAdapter implements Trace, Trace super.dbError(e); } - protected void fixedProgramViewRemoved(RemovalNotification rn) { - Msg.debug(this, "Dropped cached fixed view at snap=" + rn.getKey()); - } - @Internal public void assertValidAddress(Address pc) { if (pc == null) { diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceCacheForContainingQueries.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceCacheForContainingQueries.java index 06fd72b6e7..7f04ba2fdc 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceCacheForContainingQueries.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceCacheForContainingQueries.java @@ -20,12 +20,10 @@ import java.util.Map.Entry; import org.apache.commons.lang3.tuple.ImmutablePair; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalNotification; - import ghidra.program.model.address.*; import ghidra.trace.database.DBTraceCacheForContainingQueries.GetKey; import ghidra.trace.model.*; +import ghidra.util.datastruct.FixedSizeHashMap; public abstract class DBTraceCacheForContainingQueries { public static class GetKey { @@ -73,16 +71,7 @@ public abstract class DBTraceCacheForContainingQueries { public DBTraceCacheForContainingQueries(int snapBreadth, int addressBreadth, int maxPoints) { this.snapBreadth = snapBreadth; this.addressBreadth = addressBreadth; - this.pointCache = CacheBuilder.newBuilder() - .removalListener(this::getContainingRemoved) - .maximumSize(maxPoints) - .concurrencyLevel(2) - .build() - .asMap(); - } - - private void getContainingRemoved(RemovalNotification rn) { - // Nothing + this.pointCache = new FixedSizeHashMap<>(maxPoints); } protected abstract void loadRangeCache(TraceAddressSnapRange range); diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceTimeViewport.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceTimeViewport.java index 882e66e19a..ac8db646d0 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceTimeViewport.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceTimeViewport.java @@ -19,8 +19,6 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; -import com.google.common.collect.*; - import ghidra.program.model.address.*; import ghidra.trace.model.*; import ghidra.trace.model.Lifespan.DefaultLifeSet; @@ -324,10 +322,10 @@ public class DBTraceTimeViewport implements TraceTimeViewport { public List getReversedSnaps() { try (LockHold hold = trace.lockRead()) { synchronized (ordered) { - return Lists.reverse(ordered) - .stream() - .map(Lifespan::lmax) - .collect(Collectors.toList()); + List reversed = + ordered.stream().map(Lifespan::lmax).collect(Collectors.toList()); + Collections.reverse(reversed); + return reversed; } } } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractBaseDBTraceCodeUnitsMemoryView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractBaseDBTraceCodeUnitsMemoryView.java index 3072bb27d5..9fcaf2d460 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractBaseDBTraceCodeUnitsMemoryView.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractBaseDBTraceCodeUnitsMemoryView.java @@ -15,12 +15,9 @@ */ package ghidra.trace.database.listing; -import java.util.Collection; import java.util.Collections; import java.util.concurrent.locks.Lock; -import com.google.common.collect.Collections2; - import generic.NestedIterator; import ghidra.program.model.address.*; import ghidra.trace.database.DBTraceUtils; @@ -40,7 +37,6 @@ import ghidra.util.LockHold; public abstract class AbstractBaseDBTraceCodeUnitsMemoryView> implements DBTraceDelegatingManager { protected final DBTraceCodeManager manager; - protected final Collection activeSpacesView; /** * Construct a composite view @@ -49,8 +45,6 @@ public abstract class AbstractBaseDBTraceCodeUnitsMemoryView get(long snap, Address min, Address max, boolean forward) { Collection> itCol = - Collections2.transform(parts, p -> p.get(snap, min, max, forward).iterator()); + parts.stream().map(p -> p.get(snap, min, max, forward).iterator()).toList(); return () -> new MergeSortingIterator(itCol, forward ? DBTraceDefinedUnitsView::compareForward : DBTraceDefinedUnitsView::compareBackward); @@ -91,9 +89,10 @@ public abstract class AbstractComposedDBTraceCodeUnitsView getIntersecting(TraceAddressSnapRange tasr) { - Collection> itCol = - Collections2.transform(parts, p -> p.getIntersecting(tasr).iterator()); - return () -> Iterators.concat(itCol.iterator()); + return () -> parts.stream() + .flatMap(p -> StreamSupport.stream(p.getIntersecting(tasr).spliterator(), false) + .map(t -> (T) t)) + .iterator(); } @Override @@ -165,7 +164,7 @@ public abstract class AbstractComposedDBTraceCodeUnitsView p.getAddressSetView(snap, within))); + parts.stream().map(p -> p.getAddressSetView(snap, within)).toList()); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractWithUndefinedDBTraceCodeUnitsMemoryView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractWithUndefinedDBTraceCodeUnitsMemoryView.java index 9154fdfbf0..72d86e1f60 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractWithUndefinedDBTraceCodeUnitsMemoryView.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractWithUndefinedDBTraceCodeUnitsMemoryView.java @@ -16,8 +16,7 @@ package ghidra.trace.database.listing; import java.util.Iterator; - -import com.google.common.collect.Iterators; +import java.util.stream.StreamSupport; import ghidra.program.model.address.*; import ghidra.trace.model.TraceAddressSnapRange; @@ -83,9 +82,12 @@ public abstract class AbstractWithUndefinedDBTraceCodeUnitsMemoryView emptyOrFullIterableUndefined(TraceAddressSnapRange tasr) { - Iterator> itIt = - Iterators.transform(tasr.getLifespan().iterator(), - snap -> emptyOrFullIterableUndefined(snap, tasr.getRange(), true).iterator()); - return () -> Iterators.concat(itIt); + return () -> StreamSupport.stream(tasr.getLifespan().spliterator(), false) + .flatMap(snap -> StreamSupport + .stream(emptyOrFullIterableUndefined(snap, tasr.getRange(), true) + .spliterator(), + false) + .map(t -> (T) t)) + .iterator(); } } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeManager.java index 29b9db2ede..946270c548 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeManager.java @@ -23,9 +23,6 @@ import java.util.*; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalNotification; - import db.DBHandle; import db.DBRecord; import ghidra.lifecycle.Internal; @@ -56,6 +53,7 @@ import ghidra.trace.util.TraceAddressSpace; import ghidra.util.*; import ghidra.util.database.*; import ghidra.util.database.annot.*; +import ghidra.util.datastruct.WeakValueHashMap; import ghidra.util.exception.CancelledException; import ghidra.util.exception.VersionException; import ghidra.util.task.TaskMonitor; @@ -323,11 +321,7 @@ public class DBTraceCodeManager extends AbstractDBTraceSpaceBasedManager undefinedCache = - CacheBuilder.newBuilder() - .removalListener(this::undefinedRemovedFromCache) - .weakValues() - .build() - .asMap(); + new WeakValueHashMap<>(); public DBTraceCodeManager(DBHandle dbh, DBOpenMode openMode, ReadWriteLock lock, TaskMonitor monitor, Language baseLanguage, DBTrace trace, @@ -349,11 +343,6 @@ public class DBTraceCodeManager extends AbstractDBTraceSpaceBasedManager rn) { - // Do nothing - } - // Internal public UndefinedDBTraceData doCreateUndefinedUnit(long snap, Address address, TraceThread thread, int frameLevel) { diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeUnitAdapter.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeUnitAdapter.java index 66da485a20..14bb7813c9 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeUnitAdapter.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeUnitAdapter.java @@ -21,7 +21,7 @@ import java.nio.ByteBuffer; import java.util.*; import java.util.Map.Entry; -import com.google.common.collect.Iterators; +import org.apache.commons.collections4.IteratorUtils; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressRangeImpl; @@ -196,7 +196,7 @@ public interface DBTraceCodeUnitAdapter extends TraceCodeUnit, MemBufferAdapter @Override default Iterator propertyNames() { Lifespan span = Lifespan.at(getStartSnap()); - return Iterators.transform(Iterators.filter( + return IteratorUtils.transformedIterator(IteratorUtils.filteredIterator( getTrace().getInternalAddressPropertyManager().getAllProperties().entrySet().iterator(), e -> e.getValue().getAddressSetView(span).contains(getAddress())), Entry::getKey); } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceUndefinedDataView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceUndefinedDataView.java index 95017b3f11..f74d40c36e 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceUndefinedDataView.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceUndefinedDataView.java @@ -17,16 +17,16 @@ package ghidra.trace.database.listing; import java.util.Iterator; import java.util.Map; +import java.util.stream.StreamSupport; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalNotification; -import com.google.common.collect.Iterators; +import org.apache.commons.collections4.IteratorUtils; import ghidra.program.model.address.*; import ghidra.trace.model.Lifespan; import ghidra.trace.model.TraceAddressSnapRange; import ghidra.trace.model.listing.*; import ghidra.util.*; +import ghidra.util.datastruct.FixedSizeHashMap; /** * The implementation of {@link TraceCodeSpace#undefinedData()} @@ -39,11 +39,7 @@ public class DBTraceUndefinedDataView extends protected final DBTraceCodeManager manager; - protected final Map cache = CacheBuilder.newBuilder() - .removalListener(this::cacheEntryRemoved) - .maximumSize(CACHE_MAX_SNAPS) - .build() - .asMap(); + protected final Map cache = new FixedSizeHashMap<>(CACHE_MAX_SNAPS); /** * Construct the view @@ -55,10 +51,6 @@ public class DBTraceUndefinedDataView extends this.manager = space.manager; } - private void cacheEntryRemoved(RemovalNotification rn) { - // Nothing - } - /** * Generate an undefined data unit at the given point * @@ -150,15 +142,16 @@ public class DBTraceUndefinedDataView extends boolean forward) { Iterator

ait = getAddressSetView(snap, new AddressRangeImpl(min, max)).getAddresses(forward); - return () -> Iterators.transform(ait, a -> doCreateUnit(snap, a)); + return () -> IteratorUtils.transformedIterator(ait, a -> doCreateUnit(snap, a)); } @Override public Iterable getIntersecting(TraceAddressSnapRange tasr) { - Iterator> itIt = - Iterators.transform(tasr.getLifespan().iterator(), - snap -> get(snap, tasr.getX1(), tasr.getX2(), true).iterator()); - return () -> Iterators.concat(itIt); + return () -> StreamSupport.stream(tasr.getLifespan().spliterator(), false) + .flatMap(snap -> StreamSupport + .stream(get(snap, tasr.getX1(), tasr.getX2(), true).spliterator(), false) + .map(u -> (UndefinedDBTraceData) u)) + .iterator(); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMap.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMap.java index b3405ba535..f7b9b04b61 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMap.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMap.java @@ -22,8 +22,6 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.function.Predicate; -import com.google.common.collect.Collections2; - import db.DBHandle; import db.DBRecord; import ghidra.program.model.address.AddressSetView; @@ -235,7 +233,7 @@ public class DBTraceAddressSnapRangePropertyMap predicate) { return new UnionAddressSetView( - Collections2.transform(memSpacesView, m -> m.getAddressSetView(span, predicate))); + memSpaces.values().stream().map(m -> m.getAddressSetView(span, predicate)).toList()); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMapAddressSetView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMapAddressSetView.java index 10acf7bb05..a6115de0c6 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMapAddressSetView.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMapAddressSetView.java @@ -21,7 +21,7 @@ import java.util.NoSuchElementException; import java.util.concurrent.locks.ReadWriteLock; import java.util.function.Predicate; -import com.google.common.collect.Iterators; +import org.apache.commons.collections4.IteratorUtils; import ghidra.program.model.address.*; import ghidra.trace.database.map.DBTraceAddressSnapRangePropertyMapTree.TraceAddressSnapRangeQuery; @@ -171,8 +171,9 @@ public class DBTraceAddressSnapRangePropertyMapAddressSetView extends Abstrac .orderedEntries() .iterator(); Iterator> fltIt = - Iterators.filter(mapIt, e -> predicate.test(e.getValue())); - Iterator rawIt = Iterators.transform(fltIt, e -> e.getKey().getRange()); + IteratorUtils.filteredIterator(mapIt, e -> predicate.test(e.getValue())); + Iterator rawIt = + IteratorUtils.transformedIterator(fltIt, e -> e.getKey().getRange()); return new UnionAddressRangeIterator(rawIt, forward); } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryManager.java index 952cd5d922..94e7483997 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryManager.java @@ -24,8 +24,6 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.function.Predicate; -import com.google.common.collect.Collections2; - import db.DBHandle; import ghidra.dbg.target.TargetMemoryRegion; import ghidra.program.model.address.*; @@ -226,8 +224,9 @@ public class DBTraceMemoryManager extends AbstractDBTraceSpaceBasedManager true); } - return new UnionAddressSetView(Collections2.transform(getActiveMemorySpaces(), - m -> m.getRegionsAddressSet(snap))); + return new UnionAddressSetView(getActiveMemorySpaces().stream() + .map(m -> m.getRegionsAddressSet(snap)) + .toList()); } @Override @@ -238,8 +237,9 @@ public class DBTraceMemoryManager extends AbstractDBTraceSpaceBasedManager m.getRegionsAddressSetWith(snap, predicate))); + return new UnionAddressSetView(getActiveMemorySpaces().stream() + .map(m -> m.getRegionsAddressSetWith(snap, predicate)) + .toList()); } @Override @@ -298,15 +298,17 @@ public class DBTraceMemoryManager extends AbstractDBTraceSpaceBasedManager predicate) { - return new UnionAddressSetView(Collections2.transform(getActiveMemorySpaces(), - m -> m.getAddressesWithState(snap, predicate))); + return new UnionAddressSetView(getActiveMemorySpaces().stream() + .map(m -> m.getAddressesWithState(snap, predicate)) + .toList()); } @Override public AddressSetView getAddressesWithState(Lifespan lifespan, Predicate predicate) { - return new UnionAddressSetView(Collections2.transform(getActiveMemorySpaces(), - m -> m.getAddressesWithState(lifespan, predicate))); + return new UnionAddressSetView(getActiveMemorySpaces().stream() + .map(m -> m.getAddressesWithState(lifespan, predicate)) + .toList()); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java index 5bca3aed0c..ab13bedd1c 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java @@ -23,9 +23,6 @@ import java.util.Map.Entry; import java.util.concurrent.locks.ReadWriteLock; import java.util.function.Predicate; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalNotification; - import db.DBHandle; import ghidra.program.model.address.*; import ghidra.program.model.mem.MemBuffer; @@ -47,6 +44,7 @@ import ghidra.util.*; import ghidra.util.AddressIteratorAdapter; import ghidra.util.database.*; import ghidra.util.database.spatial.rect.Rectangle2DDirection; +import ghidra.util.datastruct.FixedSizeHashMap; import ghidra.util.exception.DuplicateNameException; import ghidra.util.exception.VersionException; import ghidra.util.task.TaskMonitor; @@ -74,24 +72,16 @@ public class DBTraceMemorySpace protected final DBTraceAddressSnapRangePropertyMapSpace regionMapSpace; protected final DBCachedObjectIndex regionsByPath; protected final Collection regionView; - protected final Map regionCache = CacheBuilder - .newBuilder() - .removalListener(this::regionCacheEntryRemoved) - .maximumSize(10) - .build() - .asMap(); + protected final Map regionCache = + new FixedSizeHashMap<>(10); protected final DBTraceAddressSnapRangePropertyMapSpace stateMapSpace; protected final DBCachedObjectStore bufferStore; protected final DBCachedObjectStore blockStore; protected final DBCachedObjectIndex blocksByOffset; - protected final Map blockCacheMostRecent = CacheBuilder - .newBuilder() - .removalListener(this::blockCacheEntryRemoved) - .maximumSize(10) - .build() - .asMap(); + protected final Map blockCacheMostRecent = + new FixedSizeHashMap<>(10); protected final DBTraceTimeViewport viewport; @@ -146,16 +136,6 @@ public class DBTraceMemorySpace return lock; } - private void regionCacheEntryRemoved( - RemovalNotification rn) { - // Nothing - } - - private void blockCacheEntryRemoved( - RemovalNotification rn) { - // Nothing - } - @Override public Trace getTrace() { return trace; diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewListing.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewListing.java index 1362cbf294..4fe10894b2 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewListing.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewListing.java @@ -18,9 +18,7 @@ package ghidra.trace.database.program; import java.nio.ByteBuffer; import java.util.*; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalNotification; -import com.google.common.collect.Iterators; +import org.apache.commons.collections4.IteratorUtils; import generic.NestedIterator; import ghidra.program.database.ProgramDB; @@ -51,6 +49,7 @@ import ghidra.trace.model.symbol.TraceFunctionSymbol; import ghidra.trace.util.*; import ghidra.util.*; import ghidra.util.AddressIteratorAdapter; +import ghidra.util.datastruct.WeakValueHashMap; import ghidra.util.exception.*; import ghidra.util.task.TaskMonitor; @@ -84,12 +83,7 @@ public abstract class AbstractDBTraceProgramViewListing implements TraceProgramV new HashMap<>(); protected final Map undefinedCache = - CacheBuilder.newBuilder() - .removalListener( - this::undefinedRemovedFromCache) - .weakValues() - .build() - .asMap(); + new WeakValueHashMap<>(); public AbstractDBTraceProgramViewListing(DBTraceProgramView program, TraceCodeOperations codeOperations) { @@ -101,11 +95,6 @@ public abstract class AbstractDBTraceProgramViewListing implements TraceProgramV this.rootModule = new DBTraceProgramViewRootModule(this); } - private void undefinedRemovedFromCache( - RemovalNotification rn) { - // Do nothing - } - @Override public TraceProgramView getProgram() { return program; @@ -165,7 +154,7 @@ public abstract class AbstractDBTraceProgramViewListing implements TraceProgramV protected Iterator getTopCodeIterator( java.util.function.Function> iterFunc, boolean forward) { - return Iterators.filter( + return IteratorUtils.filteredIterator( program.viewport.mergedIterator(iterFunc, getUnitComparator(forward)), cu -> program.isCodeVisible(cu, cu.getLifespan())); } @@ -239,16 +228,17 @@ public abstract class AbstractDBTraceProgramViewListing implements TraceProgramV defStart = defUnit.getMinAddress(); } } - Iterator defIter = Iterators.transform( + Iterator defIter = IteratorUtils.transformedIterator( getDefinedUnitIterator(defStart, forward), u -> u.getRange()); AddressRangeIterator undefIter = AddressRangeIterators.subtract(set.iterator(forward), defIter, start, forward); AddressIteratorAdapter undefAddrIter = new AddressIteratorAdapter(undefIter, forward); - return Iterators.transform(undefAddrIter.iterator(), a -> doCreateUndefinedUnit(a)); + return IteratorUtils.transformedIterator(undefAddrIter.iterator(), + a -> doCreateUndefinedUnit(a)); } protected AddressRangeIterator getUndefinedRangeIterator(AddressSetView set, boolean forward) { - Iterator defIter = Iterators.transform( + Iterator defIter = IteratorUtils.transformedIterator( getDefinedUnitIterator(set, forward), u -> u.getRange()); return AddressRangeIterators.subtract(set.iterator(forward), defIter, forward ? set.getMinAddress() : set.getMaxAddress(), forward); @@ -274,7 +264,8 @@ public abstract class AbstractDBTraceProgramViewListing implements TraceProgramV protected Iterator getUndefinedDataIterator(AddressSetView set, boolean forward) { AddressRangeIterator undefIter = getUndefinedRangeIterator(set, forward); AddressIteratorAdapter undefAddrIter = new AddressIteratorAdapter(undefIter, forward); - return Iterators.transform(undefAddrIter.iterator(), a -> doCreateUndefinedUnit(a)); + return IteratorUtils.transformedIterator(undefAddrIter.iterator(), + a -> doCreateUndefinedUnit(a)); } protected Iterator getCodeUnitIterator(AddressSetView set, boolean forward) { diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewMemory.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewMemory.java index 8ed236a282..3f74c8fc34 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewMemory.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewMemory.java @@ -21,8 +21,6 @@ import java.nio.ByteBuffer; import java.util.*; import java.util.function.Consumer; -import com.google.common.cache.RemovalNotification; - import ghidra.framework.store.LockException; import ghidra.program.database.mem.*; import ghidra.program.model.address.*; @@ -57,16 +55,6 @@ public abstract class AbstractDBTraceProgramViewMemory setSnap(program.snap); } - protected void regionBlockRemoved( - RemovalNotification rn) { - // Nothing - } - - protected void spaceBlockRemoved( - RemovalNotification rn) { - // Nothing - } - protected abstract void recomputeAddressSet(); protected void forPhysicalSpaces(Consumer consumer) { diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java index 1b4ec34311..ba1c5bb32b 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java @@ -23,8 +23,6 @@ import javax.swing.Icon; import org.apache.commons.collections4.IteratorUtils; -import com.google.common.collect.Iterators; - import generic.NestedIterator; import ghidra.program.model.address.*; import ghidra.program.model.listing.Bookmark; @@ -283,6 +281,7 @@ public class DBTraceProgramViewBookmarkManager implements TraceProgramViewBookma * A less restrictive casting of * {@link IteratorUtils#filteredIterator(Iterator, org.apache.commons.collections4.Predicate)}. * + *

* This one understands that the predicate will be testing things of the (possibly * more-specific) type of elements in the original iterator, not that of the returned iterator. * @@ -293,7 +292,7 @@ public class DBTraceProgramViewBookmarkManager implements TraceProgramViewBookma @SuppressWarnings("unchecked") protected static Iterator filteredIterator(Iterator it, Predicate predicate) { - return (Iterator) Iterators.filter(it, e -> predicate.test(e)); + return (Iterator) IteratorUtils.filteredIterator(it, e -> predicate.test(e)); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewEquateTable.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewEquateTable.java index a30019791e..98dfa11d4b 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewEquateTable.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewEquateTable.java @@ -17,9 +17,7 @@ package ghidra.trace.database.program; import java.util.*; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalNotification; -import com.google.common.collect.Iterators; +import org.apache.commons.collections4.IteratorUtils; import ghidra.program.model.address.*; import ghidra.program.model.symbol.Equate; @@ -30,6 +28,7 @@ import ghidra.trace.model.Lifespan; import ghidra.trace.model.listing.TraceCodeUnit; import ghidra.util.IntersectionAddressSetView; import ghidra.util.LockHold; +import ghidra.util.datastruct.WeakValueHashMap; import ghidra.util.exception.*; import ghidra.util.task.TaskMonitor; @@ -37,18 +36,13 @@ public class DBTraceProgramViewEquateTable implements EquateTable { protected final DBTraceProgramView program; protected final DBTraceEquateManager equateManager; - protected final Map cache = - CacheBuilder.newBuilder().removalListener(this::equateRemoved).weakValues().build().asMap(); + protected final Map cache = new WeakValueHashMap<>(); public DBTraceProgramViewEquateTable(DBTraceProgramView program) { this.program = program; this.equateManager = program.trace.getEquateManager(); } - private void equateRemoved(RemovalNotification rn) { - // Nothing - } - @Override public Equate createEquate(String name, long value) throws DuplicateNameException, InvalidInputException { @@ -77,7 +71,8 @@ public class DBTraceProgramViewEquateTable implements EquateTable { @Override public void deleteAddressRange(Address start, Address end, TaskMonitor monitor) throws CancelledException { - equateManager.clearReferences(Lifespan.nowOn(program.snap), new AddressRangeImpl(start, end), + equateManager.clearReferences(Lifespan.nowOn(program.snap), + new AddressRangeImpl(start, end), monitor); } @@ -161,7 +156,8 @@ public class DBTraceProgramViewEquateTable implements EquateTable { @Override public Iterator getEquates() { - return Iterators.transform(equateManager.getAll().iterator(), e -> doGetViewEquate(e)); + return IteratorUtils.transformedIterator(equateManager.getAll().iterator(), + e -> doGetViewEquate(e)); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewMemory.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewMemory.java index 94cf24aa31..00d2b5f6db 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewMemory.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewMemory.java @@ -19,28 +19,19 @@ import java.util.*; import java.util.function.Consumer; import java.util.function.Function; -import com.google.common.cache.CacheBuilder; - import ghidra.program.model.address.*; import ghidra.program.model.mem.MemoryBlock; import ghidra.trace.model.memory.TraceMemoryRegion; import ghidra.util.LockHold; +import ghidra.util.datastruct.WeakValueHashMap; public class DBTraceProgramViewMemory extends AbstractDBTraceProgramViewMemory { // NB. Keep both per-region and force-full (per-space) block sets ready private final Map regionBlocks = - CacheBuilder.newBuilder() - .removalListener(this::regionBlockRemoved) - .weakValues() - .build() - .asMap(); + new WeakValueHashMap<>(); private final Map spaceBlocks = - CacheBuilder.newBuilder() - .removalListener(this::spaceBlockRemoved) - .weakValues() - .build() - .asMap(); + new WeakValueHashMap<>(); public DBTraceProgramViewMemory(DBTraceProgramView program) { super(program); diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewSymbolTable.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewSymbolTable.java index a9f4e2dfc2..3cab78d479 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewSymbolTable.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewSymbolTable.java @@ -16,8 +16,7 @@ package ghidra.trace.database.program; import java.util.*; - -import com.google.common.collect.Iterators; +import java.util.stream.StreamSupport; import generic.NestedIterator; import generic.util.PeekableIterator; @@ -393,12 +392,12 @@ public class DBTraceProgramViewSymbolTable implements SymbolTable { protected Iterator getSymbolIteratorAtMySnap( TraceSymbolWithLocationView view, AddressSetView asv, boolean includeDynamicSymbols, boolean forward) { - Iterator rit = asv.iterator(forward); - Iterator> iit = Iterators.transform(rit, range -> { + Spliterator spliterator = + Spliterators.spliteratorUnknownSize(asv.iterator(forward), 0); + return StreamSupport.stream(spliterator, false).flatMap(range -> { return view.getIntersecting(Lifespan.at(program.snap), null, range, - includeDynamicSymbols, forward).iterator(); - }); - return Iterators.concat(iit); + includeDynamicSymbols, forward).stream(); + }).iterator(); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbol.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbol.java index 2eb9ca8b5e..fd532daa90 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbol.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbol.java @@ -22,10 +22,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; -import com.google.common.collect.Collections2; - import db.DBRecord; -import generic.CatenatedCollection; import ghidra.program.model.address.*; import ghidra.program.model.listing.CircularDependencyException; import ghidra.program.model.listing.Program; @@ -197,11 +194,14 @@ public abstract class AbstractDBTraceSymbol extends DBAnnotatedObject return SpecialAddress.NO_ADDRESS; } - protected Collection getRanges() { - return new CatenatedCollection<>(Collections2.transform(manager.idMap.getActiveSpaces(), - space -> Collections2.transform( - space.getUserIndex(long.class, DBTraceSymbolIDEntry.ID_COLUMN).get(getID()), - ent -> ent.getShape()))); + protected Iterable getRanges() { + return () -> manager.idMap.getActiveSpaces() + .stream() + .flatMap(space -> space.getUserIndex(long.class, DBTraceSymbolIDEntry.ID_COLUMN) + .get(getID()) + .stream()) + .map(ent -> ent.getShape()) + .iterator(); } // Internal @@ -399,7 +399,7 @@ public abstract class AbstractDBTraceSymbol extends DBAnnotatedObject if (dbns == null) { return false; } - return MySymbolTypes.values()[this.getSymbolType().getID()].isValidParent(dbns); + return MySymbolTypes.VALUES.get(this.getSymbolType().getID()).isValidParent(dbns); } protected DBTraceNamespaceSymbol checkCircular(DBTraceNamespaceSymbol newParent) diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbolSingleTypeView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbolSingleTypeView.java index efa32301cd..d9b8f5aa64 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbolSingleTypeView.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbolSingleTypeView.java @@ -17,8 +17,7 @@ package ghidra.trace.database.symbol; import java.util.*; import java.util.function.Predicate; - -import com.google.common.collect.Collections2; +import java.util.stream.Collectors; import ghidra.program.model.symbol.Namespace; import ghidra.trace.model.symbol.TraceNamespaceSymbol; @@ -66,8 +65,10 @@ public abstract class AbstractDBTraceSymbolSingleTypeView name.equals(s.name))); + return symbolsByParentID.get(dbnsParent.getID()) + .stream() + .filter(s -> name.equals(s.name)) + .collect(Collectors.toUnmodifiableList()); } } @@ -85,7 +86,7 @@ public abstract class AbstractDBTraceSymbolSingleTypeView getWithMatchingName(String glob, boolean caseSensitive) { Predicate predicate = UserSearchUtils.createSearchPattern(glob, caseSensitive).asPredicate(); - return Collections2.filter(view, s -> predicate.test(s.name)); + return view.stream().filter(s -> predicate.test(s.name)).toList(); } public Iterator scanByName(String startName) { diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbolSingleTypeWithLocationView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbolSingleTypeWithLocationView.java index 6c29145f1b..304130e35a 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbolSingleTypeWithLocationView.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbolSingleTypeWithLocationView.java @@ -20,8 +20,6 @@ import java.util.Map.Entry; import org.apache.commons.lang3.tuple.ImmutablePair; -import com.google.common.collect.Collections2; - import ghidra.program.model.address.*; import ghidra.program.model.symbol.Namespace; import ghidra.trace.database.DBTraceCacheForContainingQueries; @@ -35,6 +33,7 @@ import ghidra.trace.model.TraceAddressSnapRange; import ghidra.trace.model.symbol.TraceNamespaceSymbol; import ghidra.trace.model.symbol.TraceSymbolManager; import ghidra.trace.model.thread.TraceThread; +import ghidra.util.LazyCollection; import ghidra.util.LockHold; import ghidra.util.database.DBCachedObjectStore; import ghidra.util.database.spatial.rect.Rectangle2DDirection; @@ -200,12 +199,13 @@ public abstract class AbstractDBTraceSymbolSingleTypeWithLocationView sids = - space.reduce(TraceAddressSnapRangeQuery.intersecting(range, span)).values(); - Collection matchingTid = - Collections2.filter(sids, s -> DBTraceSymbolManager.unpackTypeID(s) == this.typeID); - return Collections2.transform(matchingTid, - s -> store.getObjectAt(DBTraceSymbolManager.unpackKey(s))); + return new LazyCollection<>(() -> { + return space.reduce(TraceAddressSnapRangeQuery.intersecting(range, span)) + .values() + .stream() + .filter(s -> DBTraceSymbolManager.unpackTypeID(s) == this.typeID) + .map(s -> store.getObjectAt(DBTraceSymbolManager.unpackKey(s))); + }); } } @@ -220,16 +220,16 @@ public abstract class AbstractDBTraceSymbolSingleTypeWithLocationView sids = space - .reduce(TraceAddressSnapRangeQuery.intersecting(range, span) - .starting( - forward ? Rectangle2DDirection.LEFTMOST - : Rectangle2DDirection.RIGHTMOST)) - .orderedValues(); - Collection matchingTid = - Collections2.filter(sids, s -> DBTraceSymbolManager.unpackTypeID(s) == this.typeID); - return Collections2.transform(matchingTid, - s -> store.getObjectAt(DBTraceSymbolManager.unpackKey(s))); + return new LazyCollection(() -> { + return space.reduce(TraceAddressSnapRangeQuery.intersecting(range, span) + .starting(forward + ? Rectangle2DDirection.LEFTMOST + : Rectangle2DDirection.RIGHTMOST)) + .orderedValues() + .stream() + .filter(s -> DBTraceSymbolManager.unpackTypeID(s) == this.typeID) + .map(s -> store.getObjectAt(DBTraceSymbolManager.unpackKey(s))); + }); } } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceEquateManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceEquateManager.java index 9217bc682c..58a59b2a9d 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceEquateManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceEquateManager.java @@ -21,8 +21,6 @@ import java.util.Collections; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; -import com.google.common.collect.Collections2; - import db.DBHandle; import ghidra.program.model.address.*; import ghidra.program.model.lang.Language; @@ -165,7 +163,7 @@ public class DBTraceEquateManager extends AbstractDBTraceSpaceBasedManager m.getReferringAddresses(span))); + memSpacesView.stream().map(m -> m.getReferringAddresses(span)).toList()); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceEquateSpace.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceEquateSpace.java index 5d5ddee2b3..3686b875ad 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceEquateSpace.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceEquateSpace.java @@ -19,8 +19,6 @@ import java.io.IOException; import java.util.Collection; import java.util.concurrent.locks.ReadWriteLock; -import com.google.common.collect.Collections2; - import db.DBHandle; import db.DBRecord; import ghidra.program.model.address.*; @@ -198,25 +196,29 @@ public class DBTraceEquateSpace implements DBTraceSpaceBased, TraceEquateSpace { @Override public Collection getReferenced(long snap, Address address, int operandIndex) { - Collection refs = - equateMapSpace.reduce(TraceAddressSnapRangeQuery.at(address, snap)).values(); - Collection filt = Collections2.filter(refs, r -> { - if (r.type != EquateRefType.OP) { - return false; - } - if (r.opOrHash != operandIndex) { - return false; - } - return true; - }); - return Collections2.transform(filt, r -> manager.equateStore.getObjectAt(r.equateKey)); + return equateMapSpace.reduce(TraceAddressSnapRangeQuery.at(address, snap)) + .values() + .stream() + .filter(r -> { + if (r.type != EquateRefType.OP) { + return false; + } + if (r.opOrHash != operandIndex) { + return false; + } + return true; + }) + .map(r -> manager.equateStore.getObjectAt(r.equateKey)) + .toList(); } @Override public Collection getReferenced(long snap, Address address) { - Collection refs = - equateMapSpace.reduce(TraceAddressSnapRangeQuery.at(address, snap)).values(); - return Collections2.transform(refs, r -> manager.equateStore.getObjectAt(r.equateKey)); + return equateMapSpace.reduce(TraceAddressSnapRangeQuery.at(address, snap)) + .values() + .stream() + .map(r -> manager.equateStore.getObjectAt(r.equateKey)) + .toList(); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceFunctionSymbol.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceFunctionSymbol.java index f43e53a648..0da88f305d 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceFunctionSymbol.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceFunctionSymbol.java @@ -21,8 +21,6 @@ import java.util.*; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; -import com.google.common.collect.Collections2; - import db.DBRecord; import ghidra.program.database.function.OverlappingFunctionException; import ghidra.program.model.address.*; @@ -244,9 +242,10 @@ public class DBTraceFunctionSymbol extends DBTraceNamespaceSymbol if (!foundBadVariables) { return; } - List badns = new ArrayList<>(); - badns.addAll(Collections2.filter(manager.allLocals.getChildren(this), - DBTraceFunctionSymbol::isBadVariable)); + List badns = manager.allLocals.getChildren(this) + .stream() + .filter(DBTraceFunctionSymbol::isBadVariable) + .toList(); if (badns.isEmpty()) { return; } @@ -1451,7 +1450,7 @@ public class DBTraceFunctionSymbol extends DBTraceNamespaceSymbol into.addAll(from); } else { - into.addAll(Collections2.filter(from, filter::matches)); + from.stream().filter(v -> filter.matches(v)).forEach(into::add); } } @@ -1741,7 +1740,7 @@ public class DBTraceFunctionSymbol extends DBTraceNamespaceSymbol if (DBTraceSymbolManager.DEFAULT_CALLING_CONVENTION_ID == callingConventionID) { return cs.getDefaultCallingConvention(); } - String ccName = manager.callingConventionMap.inverse().get(callingConventionID); + String ccName = manager.callingConventionMap.getKey(callingConventionID); if (ccName == null) { return null; } @@ -1758,7 +1757,7 @@ public class DBTraceFunctionSymbol extends DBTraceNamespaceSymbol if (DBTraceSymbolManager.DEFAULT_CALLING_CONVENTION_ID == callingConventionID) { return DBTraceSymbolManager.DEFAULT_CALLING_CONVENTION_NAME; } - return manager.callingConventionMap.inverse().get(callingConventionID); + return manager.callingConventionMap.getKey(callingConventionID); } } @@ -1970,9 +1969,11 @@ public class DBTraceFunctionSymbol extends DBTraceNamespaceSymbol @Override public void promoteLocalUserLabelsToGlobal() { try (LockHold hold = LockHold.lock(manager.lock.writeLock())) { - List toPromote = - new ArrayList<>(Collections2.filter(manager.labels().getChildren(this), - l -> l.getSource() == SourceType.USER_DEFINED)); + List toPromote = manager.labels() + .getChildren(this) + .stream() + .filter(l -> l.getSource() == SourceType.USER_DEFINED) + .toList(); for (DBTraceLabelSymbol label : toPromote) { try { label.setNamespace(manager.getGlobalNamespace()); diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceManager.java index 5f150773f0..650ab8b900 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceManager.java @@ -21,8 +21,6 @@ import java.util.Collections; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; -import com.google.common.collect.Collections2; - import db.DBHandle; import ghidra.program.model.address.*; import ghidra.program.model.lang.Language; @@ -273,13 +271,13 @@ public class DBTraceReferenceManager extends AbstractDBTraceSpaceBasedManager s.getReferenceSources(span))); + memSpacesView.stream().map(s -> s.getReferenceSources(span)).toList()); } @Override public AddressSetView getReferenceDestinations(Lifespan span) { return new UnionAddressSetView( - Collections2.transform(memSpacesView, s -> s.getReferenceDestinations(span))); + memSpacesView.stream().map(s -> s.getReferenceDestinations(span)).toList()); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceSpace.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceSpace.java index 0428d40a87..007b16803b 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceSpace.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceSpace.java @@ -18,8 +18,7 @@ package ghidra.trace.database.symbol; import java.io.IOException; import java.util.Collection; import java.util.concurrent.locks.ReadWriteLock; - -import com.google.common.collect.Collections2; +import java.util.stream.Stream; import db.DBHandle; import db.DBRecord; @@ -47,8 +46,7 @@ import ghidra.trace.model.symbol.TraceReference; import ghidra.trace.model.symbol.TraceReferenceSpace; import ghidra.trace.model.thread.TraceThread; import ghidra.trace.util.TraceChangeRecord; -import ghidra.util.LockHold; -import ghidra.util.Msg; +import ghidra.util.*; import ghidra.util.database.*; import ghidra.util.database.annot.*; import ghidra.util.exception.VersionException; @@ -598,49 +596,53 @@ public class DBTraceReferenceSpace implements DBTraceSpaceBased, TraceReferenceS } } + private Stream streamReferencesFrom(long snap, + Address fromAddress) { + return referenceMapSpace.reduce(TraceAddressSnapRangeQuery.at(fromAddress, snap)) + .values() + .stream() + .map(e -> e.ref); + } + @Override public Collection getReferencesFrom(long snap, Address fromAddress) { - return Collections2.transform( - referenceMapSpace.reduce(TraceAddressSnapRangeQuery.at(fromAddress, snap)).values(), - e -> e.ref); + return streamReferencesFrom(snap, fromAddress).toList(); } @Override public Collection getReferencesFrom(long snap, Address fromAddress, int operandIndex) { - return Collections2.filter(getReferencesFrom(snap, fromAddress), - r -> r.getOperandIndex() == operandIndex); + return streamReferencesFrom(snap, fromAddress) + .filter(r -> r.getOperandIndex() == operandIndex) + .toList(); } @Override public Collection getReferencesFromRange(Lifespan span, AddressRange range) { - return Collections2.transform( - referenceMapSpace.reduce(TraceAddressSnapRangeQuery.intersecting(range, span)).values(), - e -> e.ref); + return new LazyCollection<>( + () -> referenceMapSpace.reduce(TraceAddressSnapRangeQuery.intersecting(range, span)) + .values() + .stream() + .map(e -> e.ref)); } @Override public DBTraceReference getPrimaryReferenceFrom(long snap, Address fromAddress, int operandIndex) { - for (DBTraceReference ref : getReferencesFrom(snap, fromAddress)) { - if (!ref.isPrimary()) { - continue; - } - if (ref.getOperandIndex() != operandIndex) { - continue; - } - return ref; - } - return null; + return streamReferencesFrom(snap, fromAddress) + .filter(r -> r.isPrimary() && r.getOperandIndex() == operandIndex) + .findFirst() + .orElse(null); } @Override public Collection getFlowReferencesFrom(long snap, Address fromAddress) { - return Collections2.filter(getReferencesFrom(snap, fromAddress), - r -> r.getReferenceType().isFlow()); + return streamReferencesFrom(snap, fromAddress) + .filter(r -> r.getReferenceType().isFlow()) + .toList(); } @Override @@ -669,17 +671,21 @@ public class DBTraceReferenceSpace implements DBTraceSpaceBased, TraceReferenceS @Override public Collection getReferencesTo(long snap, Address toAddress) { - return Collections2.transform( - xrefMapSpace.reduce(TraceAddressSnapRangeQuery.at(toAddress, snap)).values(), - this::getRefForXRefEntry); + return xrefMapSpace.reduce(TraceAddressSnapRangeQuery.at(toAddress, snap)) + .values() + .stream() + .map(this::getRefForXRefEntry) + .toList(); } @Override public Collection getReferencesToRange(Lifespan span, AddressRange range) { - return Collections2.transform( - xrefMapSpace.reduce(TraceAddressSnapRangeQuery.intersecting(range, span)).values(), - this::getRefForXRefEntry); + return new LazyCollection<>( + () -> xrefMapSpace.reduce(TraceAddressSnapRangeQuery.intersecting(range, span)) + .values() + .stream() + .map(this::getRefForXRefEntry)); } protected void truncateOrDeleteEntry(DBTraceReferenceEntry ref, long otherStartSnap) { @@ -732,7 +738,7 @@ public class DBTraceReferenceSpace implements DBTraceSpaceBased, TraceReferenceS } protected Collection getReferencesBySymbolId(long id) { - return Collections2.transform(refsBySymbolId.get(id), e -> e.ref); + return refsBySymbolId.get(id).stream().map(e -> e.ref).toList(); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolManager.java index a12353abfb..d3cd85d3b4 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolManager.java @@ -20,8 +20,8 @@ import java.lang.reflect.Field; import java.util.*; import java.util.concurrent.locks.ReadWriteLock; -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.bidimap.DualHashBidiMap; import db.*; import ghidra.program.model.address.*; @@ -413,6 +413,8 @@ public class DBTraceSymbolManager implements TraceSymbolManager, DBTraceManager } }; + public static final List VALUES = List.of(values()); + abstract boolean isValidParent(DBTraceNamespaceSymbol parent); boolean isNoFunctionAncestor(DBTraceNamespaceSymbol parent) { @@ -434,7 +436,7 @@ public class DBTraceSymbolManager implements TraceSymbolManager, DBTraceManager protected final DBTraceAddressSnapRangePropertyMap idMap; protected final DBCachedObjectStore callingConventionStore; - protected final BiMap callingConventionMap = HashBiMap.create(); + protected final BidiMap callingConventionMap = new DualHashBidiMap<>(); protected final DBCachedObjectStore tagStore; protected final DBCachedObjectIndex tagsByName; diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesView.java index 6fd825bf2f..129077e1c5 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesView.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesView.java @@ -18,10 +18,8 @@ package ghidra.trace.database.symbol; import java.util.*; import java.util.stream.Collectors; -import com.google.common.collect.Collections2; - -import generic.CatenatedCollection; import ghidra.trace.model.symbol.*; +import ghidra.util.LazyCollection; import ghidra.util.MergeSortingIterator; public class DBTraceSymbolMultipleTypesView @@ -49,30 +47,30 @@ public class DBTraceSymbolMultipleTypesView @Override public Collection getAll(boolean includeDynamicSymbols) { - return new CatenatedCollection<>( - Collections2.transform(parts, p -> p.getAll(includeDynamicSymbols))); + return new LazyCollection<>( + () -> parts.stream().flatMap(p -> p.getAll(includeDynamicSymbols).stream())); } @Override public Collection getChildrenNamed(String name, TraceNamespaceSymbol parent) { - return new CatenatedCollection<>( - Collections2.transform(parts, p -> p.getChildrenNamed(name, parent))); + return parts.stream().flatMap(p -> p.getChildrenNamed(name, parent).stream()).toList(); } @Override public Collection getChildren(TraceNamespaceSymbol parent) { - return new CatenatedCollection<>(Collections2.transform(parts, p -> p.getChildren(parent))); + return new LazyCollection<>( + () -> parts.stream().flatMap(p -> p.getChildren(parent).stream())); } @Override public Collection getNamed(String name) { - return new CatenatedCollection<>(Collections2.transform(parts, p -> p.getNamed(name))); + return parts.stream().flatMap(p -> p.getNamed(name).stream()).toList(); } @Override public Collection getWithMatchingName(String glob, boolean caseSensitive) { - return new CatenatedCollection<>( - Collections2.transform(parts, p -> p.getWithMatchingName(glob, caseSensitive))); + return new LazyCollection<>(() -> parts.stream() + .flatMap(p -> p.getWithMatchingName(glob, caseSensitive).stream())); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesWithAddressView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesWithAddressView.java index c8bc19656f..8116b31464 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesWithAddressView.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesWithAddressView.java @@ -17,12 +17,10 @@ package ghidra.trace.database.symbol; import java.util.Collection; -import com.google.common.collect.Collections2; - -import generic.CatenatedCollection; import ghidra.program.model.address.*; import ghidra.trace.model.symbol.TraceNamespaceSymbol; import ghidra.trace.model.symbol.TraceSymbolWithAddressView; +import ghidra.util.LazyCollection; import ghidra.util.LockHold; public class DBTraceSymbolMultipleTypesWithAddressView @@ -60,8 +58,8 @@ public class DBTraceSymbolMultipleTypesWithAddressView getIntersecting(AddressRange range, boolean includeDynamicSymbols) { - return new CatenatedCollection<>(Collections2.transform(getParts(), - p -> p.getIntersecting(range, includeDynamicSymbols))); + return new LazyCollection<>(() -> getParts().stream() + .flatMap(p -> p.getIntersecting(range, includeDynamicSymbols).stream())); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesWithLocationView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesWithLocationView.java index 8dbf5a1f88..52235da920 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesWithLocationView.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolMultipleTypesWithLocationView.java @@ -18,9 +18,6 @@ package ghidra.trace.database.symbol; import java.util.Collection; import java.util.Collections; -import com.google.common.collect.Collections2; - -import generic.CatenatedCollection; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressRange; import ghidra.trace.database.map.DBTraceAddressSnapRangePropertyMapSpace; @@ -31,6 +28,7 @@ import ghidra.trace.model.Lifespan; import ghidra.trace.model.symbol.TraceNamespaceSymbol; import ghidra.trace.model.symbol.TraceSymbolWithLocationView; import ghidra.trace.model.thread.TraceThread; +import ghidra.util.LazyCollection; import ghidra.util.LockHold; import ghidra.util.database.spatial.rect.Rectangle2DDirection; @@ -70,8 +68,9 @@ public class DBTraceSymbolMultipleTypesWithLocationView getAt(long snap, TraceThread thread, Address address, boolean includeDynamicSymbols) { - return new CatenatedCollection<>(Collections2.transform(getParts(), - p -> p.getAt(snap, thread, address, includeDynamicSymbols))); + return getParts().stream() + .flatMap(p -> p.getAt(snap, thread, address, includeDynamicSymbols).stream()) + .toList(); } @Override @@ -87,30 +86,31 @@ public class DBTraceSymbolMultipleTypesWithLocationView sids = - space.reduce(TraceAddressSnapRangeQuery.intersecting(range, span) - .starting( - forward ? Rectangle2DDirection.LEFTMOST - : Rectangle2DDirection.RIGHTMOST)) - .orderedValues(); - Collection matchingTid = Collections2.filter(sids, s -> { - byte tid = DBTraceSymbolManager.unpackTypeID(s); - for (AbstractDBTraceSymbolSingleTypeView p : parts) { - if (p.typeID == tid) { - return true; - } - } - return false; - }); - return Collections2.transform(matchingTid, s -> { - byte tid = DBTraceSymbolManager.unpackTypeID(s); - for (AbstractDBTraceSymbolSingleTypeView p : parts) { - if (p.typeID == tid) { - return p.store.getObjectAt(DBTraceSymbolManager.unpackKey(s)); - } - } - throw new AssertionError(); // Was filtered above - }); + return new LazyCollection<>(() -> space + .reduce(TraceAddressSnapRangeQuery.intersecting(range, span) + .starting( + forward ? Rectangle2DDirection.LEFTMOST + : Rectangle2DDirection.RIGHTMOST)) + .orderedValues() + .stream() + .filter(s -> { + byte tid = DBTraceSymbolManager.unpackTypeID(s); + for (AbstractDBTraceSymbolSingleTypeView p : parts) { + if (p.typeID == tid) { + return true; + } + } + return false; + }) + .map(s -> { + byte tid = DBTraceSymbolManager.unpackTypeID(s); + for (AbstractDBTraceSymbolSingleTypeView p : parts) { + if (p.typeID == tid) { + return p.store.getObjectAt(DBTraceSymbolManager.unpackKey(s)); + } + } + throw new AssertionError(); // Was filtered above + })); } } } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObject.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObject.java index 16b45f10b7..56747f5d3d 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObject.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObject.java @@ -21,10 +21,6 @@ import java.util.*; import java.util.function.Function; import java.util.stream.*; -import org.apache.commons.collections4.IteratorUtils; - -import com.google.common.collect.Iterators; - import db.DBRecord; import db.StringField; import ghidra.dbg.target.TargetObject; @@ -60,8 +56,7 @@ import ghidra.trace.model.target.*; import ghidra.trace.model.target.annot.TraceObjectInterfaceUtils; import ghidra.trace.model.thread.TraceObjectThread; import ghidra.trace.util.TraceChangeRecord; -import ghidra.util.LockHold; -import ghidra.util.Msg; +import ghidra.util.*; import ghidra.util.database.*; import ghidra.util.database.DBCachedObjectStoreFactory.AbstractDBFieldCodec; import ghidra.util.database.annot.*; @@ -605,23 +600,20 @@ public class DBTraceObject extends DBAnnotatedObject implements TraceObject { Rectangle2DDirection dir = forward ? Rectangle2DDirection.BOTTOMMOST : Rectangle2DDirection.TOPMOST; - List> iterators = manager.rangeValueMap + List> streams = manager.rangeValueMap .getActiveMemorySpaces() .stream() - .map(s -> IteratorUtils.filteredIterator(s + .map(s -> StreamSupport.stream(s .reduce(TraceAddressSnapRangeQuery.intersecting(span, s.getAddressSpace()) .starting(dir)) .orderedValues() - .iterator(), - v -> key.equals(v.getEntryKey()) && this == v.getParent())) - .collect(Collectors.toList()); + .spliterator(), + false).filter(v -> key.equals(v.getEntryKey()) && this == v.getParent())) + .toList(); Comparator order = forward ? Comparator.naturalOrder() : Comparator.reverseOrder(); Comparator comparator = Comparator.comparing(v -> v.getMinSnap(), order); - Iterator merged = - Iterators.mergeSorted(iterators, comparator); - return StreamSupport - .stream(Spliterators.spliteratorUnknownSize(merged, Spliterator.ORDERED), false); + return StreamUtils.merge(streams, comparator); } @Override @@ -642,10 +634,7 @@ public class DBTraceObject extends DBAnnotatedObject implements TraceObject { Comparator order = forward ? Comparator.naturalOrder() : Comparator.reverseOrder(); Comparator comparator = Comparator.comparing(v -> v.getMinSnap(), order); - Iterator merged = - Iterators.mergeSorted(Arrays.asList(nrVals.iterator(), rVals.iterator()), comparator); - return StreamSupport - .stream(Spliterators.spliteratorUnknownSize(merged, Spliterator.ORDERED), false); + return StreamUtils.merge(List.of(nrVals, rVals), comparator); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/WrappingFunctionIterator.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/WrappingFunctionIterator.java index 19981b7124..553cce6f4c 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/WrappingFunctionIterator.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/WrappingFunctionIterator.java @@ -16,9 +16,9 @@ package ghidra.trace.util; import java.util.Iterator; +import java.util.function.Predicate; -import com.google.common.base.Predicate; -import com.google.common.collect.Iterators; +import org.apache.commons.collections4.IteratorUtils; import ghidra.program.model.listing.Function; import ghidra.program.model.listing.FunctionIterator; @@ -32,7 +32,7 @@ public class WrappingFunctionIterator implements FunctionIterator { public WrappingFunctionIterator(Iterator it, Predicate filter) { - this.it = Iterators.filter(it, filter); + this.it = IteratorUtils.filteredIterator(it, e -> filter.test(e)); } @Override diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/generic/CatenatedCollection.java b/Ghidra/Debug/ProposedUtils/src/main/java/generic/CatenatedCollection.java index 6557c90757..3938d615de 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/generic/CatenatedCollection.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/generic/CatenatedCollection.java @@ -17,8 +17,7 @@ package generic; import java.util.Collection; import java.util.Iterator; - -import com.google.common.collect.Iterators; +import java.util.stream.Stream; public class CatenatedCollection extends AbstractUnionedCollection { @@ -33,18 +32,7 @@ public class CatenatedCollection extends AbstractUnionedCollection { @Override public Iterator iterator() { - return Iterators.concat(new Iterator>() { - Iterator> it = collections.iterator(); - - @Override - public boolean hasNext() { - return it.hasNext(); - } - - @Override - public Iterator next() { - return it.next().iterator(); - } - }); + Stream flat = collections.stream().flatMap(Collection::stream); + return flat.iterator(); } } diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/generic/depends/DependentServiceResolver.java b/Ghidra/Debug/ProposedUtils/src/main/java/generic/depends/DependentServiceResolver.java index d203f609a1..a959410ecd 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/generic/depends/DependentServiceResolver.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/generic/depends/DependentServiceResolver.java @@ -19,9 +19,6 @@ import java.lang.reflect.*; import java.util.*; import java.util.Map.Entry; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; - import generic.depends.err.*; public class DependentServiceResolver { @@ -44,8 +41,8 @@ public class DependentServiceResolver { } private final Set> classesIncluded = new HashSet<>(); - private final Multimap, Field> fieldsByClass = HashMultimap.create(); - private final Multimap, Class> depsByDependents = HashMultimap.create(); + private final Map, Set> fieldsByClass = new HashMap<>(); + private final Map, Set>> depsByDependents = new HashMap<>(); private final Map, Method> constructors = new HashMap<>(); private final List> ordered = new ArrayList<>(); @@ -86,14 +83,14 @@ public class DependentServiceResolver { throw new IllegalArgumentException( "Overridden constructor must return same or subclass of original"); } - depsByDependents.put(override, rCls); + depsByDependents.computeIfAbsent(override, o -> new HashSet<>()).add(rCls); constructors.put(override, m); } constructors.put(rCls, m); m.setAccessible(true); for (Class pType : m.getParameterTypes()) { - depsByDependents.put(rCls, pType); + depsByDependents.computeIfAbsent(rCls, c -> new HashSet<>()).add(pType); } } for (Field f : cls.getDeclaredFields()) { @@ -102,7 +99,7 @@ public class DependentServiceResolver { continue; } Class fCls = f.getType(); - fieldsByClass.put(fCls, f); + fieldsByClass.computeIfAbsent(fCls, c -> new HashSet<>()).add(f); f.setAccessible(true); } } @@ -124,7 +121,14 @@ public class DependentServiceResolver { Method m = constructors.get(ready); unordered.remove(ready); ordered.add(new DependentServiceConstructor<>(ready, m)); - depsByDependents.values().removeAll(Collections.singleton(ready)); + for (Iterator>> iterator = + depsByDependents.values().iterator(); iterator.hasNext();) { + Set> deps = iterator.next(); + deps.remove(ready); + if (deps.isEmpty()) { + iterator.remove(); + } + } } } assert ordered.size() == constructors.size(); @@ -141,12 +145,14 @@ public class DependentServiceResolver { } instancesByClass.put(cons.cls, service); } - for (Entry, Field> entry : fieldsByClass.entries()) { - try { - entry.getValue().set(obj, instancesByClass.get(entry.getKey())); - } - catch (IllegalArgumentException | IllegalAccessException e) { - throw new AssertionError(e); + for (Entry, Set> entry : fieldsByClass.entrySet()) { + for (Field f : entry.getValue()) { + try { + f.set(obj, instancesByClass.get(entry.getKey())); + } + catch (IllegalArgumentException | IllegalAccessException e) { + throw new AssertionError(e); + } } } } diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/framework/options/AutoOptions.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/framework/options/AutoOptions.java index 7a5ccf36cf..daa55380a6 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/framework/options/AutoOptions.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/framework/options/AutoOptions.java @@ -24,8 +24,6 @@ import java.util.function.Function; import org.apache.commons.lang3.StringUtils; -import com.google.common.collect.ImmutableList; - import generic.ComparableTupleRecord; import generic.theme.GColor; import ghidra.framework.options.annotation.*; @@ -37,7 +35,7 @@ public interface AutoOptions { static class CategoryAndName implements ComparableTupleRecord { public static final List>> ACCESSORS = - ImmutableList.of(CategoryAndName::getCategory, CategoryAndName::getName); + List.of(CategoryAndName::getCategory, CategoryAndName::getName); private final String category; private final String name; diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/AddressRangeIterators.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/AddressRangeIterators.java index e2d537069f..84aa7ebe03 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/AddressRangeIterators.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/AddressRangeIterators.java @@ -19,7 +19,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.Map.Entry; -import com.google.common.collect.Iterators; +import org.apache.commons.collections4.IteratorUtils; import ghidra.program.model.address.*; import ghidra.util.TwoWayBreakdownAddressRangeIterator.Which; @@ -72,8 +72,8 @@ public enum AddressRangeIterators { public static AddressRangeIterator subtract(Iterator a, Iterator b, Address start, boolean forward) { - return new WrappingAddressRangeIterator(Iterators.transform( - Iterators.filter(new TwoWayBreakdownAddressRangeIterator(a, b, forward), + return new WrappingAddressRangeIterator(IteratorUtils.transformedIterator( + IteratorUtils.filteredIterator(new TwoWayBreakdownAddressRangeIterator(a, b, forward), e -> doCheckStart(e.getKey(), start, forward) && e.getValue().inSubtract()), e -> e.getKey())); } @@ -82,19 +82,21 @@ public enum AddressRangeIterators { Address start, boolean forward) { Iterator> eit = new TwoWayBreakdownAddressRangeIterator(a, b, forward); - Iterator> fit = Iterators.filter(eit, e -> e.getValue().inXor()); - Iterator rit = Iterators.transform(fit, e -> e.getKey()); + Iterator> fit = + IteratorUtils.filteredIterator(eit, e -> e.getValue().inXor()); + Iterator rit = IteratorUtils.transformedIterator(fit, e -> e.getKey()); // Use union to coalesce just-connected ranges in opposite iterators. Iterator uit = new UnionAddressRangeIterator(rit, forward); // Have to do this filter after union, otherwise parts of ranges are omitted. - Iterator result = Iterators.filter(uit, r -> doCheckStart(r, start, forward)); + Iterator result = + IteratorUtils.filteredIterator(uit, r -> doCheckStart(r, start, forward)); return new WrappingAddressRangeIterator(result); } public static AddressRangeIterator intersect(Iterator a, Iterator b, boolean forward) { - return new WrappingAddressRangeIterator(Iterators.transform( - Iterators.filter(new TwoWayBreakdownAddressRangeIterator(a, b, forward), + return new WrappingAddressRangeIterator(IteratorUtils.transformedIterator( + IteratorUtils.filteredIterator(new TwoWayBreakdownAddressRangeIterator(a, b, forward), e -> e.getValue().inIntersect()), e -> e.getKey())); } diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/AnnotatedSaveable.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/AnnotatedSaveable.java deleted file mode 100644 index 2d2fc0072d..0000000000 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/AnnotatedSaveable.java +++ /dev/null @@ -1,281 +0,0 @@ -/* ### - * IP: GHIDRA - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package ghidra.util; - -import java.lang.annotation.*; -import java.lang.reflect.Field; -import java.util.*; -import java.util.function.BiConsumer; -import java.util.function.Function; - -import com.google.common.collect.ImmutableMap; - -@Deprecated -public abstract class AnnotatedSaveable implements Saveable { - protected static ImmutableMap.Builder, FieldAccessorFactory> accessorFactoriesBuilder = - ImmutableMap.builder(); - protected static Map, FieldAccessorFactory> accessorFactories = - accessorFactoriesBuilder // - .put(boolean.class, BoolFieldAccessor::new) // - .put(Boolean.class, BoolFieldAccessor::new) // - .put(byte.class, ByteFieldAccessor::new) // - .put(Byte.class, ByteFieldAccessor::new) // - .put(byte[].class, ByteArrayFieldAccessor::new) // - .put(double.class, DoubleFieldAccessor::new) // - .put(Double.class, DoubleFieldAccessor::new) // - .put(double[].class, DoubleArrayFieldAccessor::new) // - .put(float.class, FloatFieldAccessor::new) // - .put(Float.class, FloatFieldAccessor::new) // - .put(float[].class, FloatArrayFieldAccessor::new) // - .put(int.class, IntFieldAccessor::new) // - .put(Integer.class, IntFieldAccessor::new) // - .put(int[].class, IntArrayFieldAccessor::new) // - .put(long.class, LongFieldAccessor::new) // - .put(Long.class, LongFieldAccessor::new) // - .put(long[].class, LongArrayFieldAccessor::new) // - .put(short.class, ShortFieldAccessor::new) // - .put(Short.class, ShortFieldAccessor::new) // - .put(short[].class, ShortArrayFieldAccessor::new) // - .put(String.class, StringFieldAccessor::new) // - .put(String[].class, StringArrayFieldAccessor::new) // - .build(); - - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.FIELD) - public static @interface SaveableField { - } - - public static interface FieldAccessor { - void save(AnnotatedSaveable saveable, ObjectStorage objStorage); - - void restore(AnnotatedSaveable saveable, ObjectStorage objStorage); - } - - public static abstract class AbstractFieldAccessor implements FieldAccessor { - protected final Field field; - protected final Function objGetter; - protected final BiConsumer objPutter; - - public AbstractFieldAccessor(Field field, Function objGetter, - BiConsumer objPutter) { - this.field = field; - this.objGetter = objGetter; - this.objPutter = objPutter; - } - - @SuppressWarnings("unchecked") - @Override - public void save(AnnotatedSaveable saveable, ObjectStorage objStorage) { - try { - objPutter.accept(objStorage, (T) field.get(saveable)); - } - catch (Exception e) { - throw new AssertionError(e); - } - } - - @Override - public void restore(AnnotatedSaveable saveable, ObjectStorage objStorage) { - try { - field.set(saveable, objGetter.apply(objStorage)); - } - catch (Exception e) { - throw new AssertionError(e); - } - } - } - - public static class BoolFieldAccessor extends AbstractFieldAccessor { - public BoolFieldAccessor(Field field) { - super(field, ObjectStorage::getBoolean, ObjectStorage::putBoolean); - } - } - - public static class ByteFieldAccessor extends AbstractFieldAccessor { - public ByteFieldAccessor(Field field) { - super(field, ObjectStorage::getByte, ObjectStorage::putByte); - } - } - - public static class ByteArrayFieldAccessor extends AbstractFieldAccessor { - public ByteArrayFieldAccessor(Field field) { - super(field, ObjectStorage::getBytes, ObjectStorage::putBytes); - } - } - - public static class DoubleFieldAccessor extends AbstractFieldAccessor { - public DoubleFieldAccessor(Field field) { - super(field, ObjectStorage::getDouble, ObjectStorage::putDouble); - } - } - - public static class DoubleArrayFieldAccessor extends AbstractFieldAccessor { - public DoubleArrayFieldAccessor(Field field) { - super(field, ObjectStorage::getDoubles, ObjectStorage::putDoubles); - } - } - - public static class FloatFieldAccessor extends AbstractFieldAccessor { - public FloatFieldAccessor(Field field) { - super(field, ObjectStorage::getFloat, ObjectStorage::putFloat); - } - } - - public static class FloatArrayFieldAccessor extends AbstractFieldAccessor { - public FloatArrayFieldAccessor(Field field) { - super(field, ObjectStorage::getFloats, ObjectStorage::putFloats); - } - } - - public static class IntFieldAccessor extends AbstractFieldAccessor { - public IntFieldAccessor(Field field) { - super(field, ObjectStorage::getInt, ObjectStorage::putInt); - } - } - - public static class IntArrayFieldAccessor extends AbstractFieldAccessor { - public IntArrayFieldAccessor(Field field) { - super(field, ObjectStorage::getInts, ObjectStorage::putInts); - } - } - - public static class LongFieldAccessor extends AbstractFieldAccessor { - public LongFieldAccessor(Field field) { - super(field, ObjectStorage::getLong, ObjectStorage::putLong); - } - } - - public static class LongArrayFieldAccessor extends AbstractFieldAccessor { - public LongArrayFieldAccessor(Field field) { - super(field, ObjectStorage::getLongs, ObjectStorage::putLongs); - } - } - - public static class ShortFieldAccessor extends AbstractFieldAccessor { - public ShortFieldAccessor(Field field) { - super(field, ObjectStorage::getShort, ObjectStorage::putShort); - } - } - - public static class ShortArrayFieldAccessor extends AbstractFieldAccessor { - public ShortArrayFieldAccessor(Field field) { - super(field, ObjectStorage::getShorts, ObjectStorage::putShorts); - } - } - - public static class StringFieldAccessor extends AbstractFieldAccessor { - public StringFieldAccessor(Field field) { - super(field, ObjectStorage::getString, ObjectStorage::putString); - } - } - - public static class StringArrayFieldAccessor extends AbstractFieldAccessor { - public StringArrayFieldAccessor(Field field) { - super(field, ObjectStorage::getStrings, ObjectStorage::putStrings); - } - } - - public static interface FieldAccessorFactory extends Function { - } - - public static class AnnotatedSaveableException extends AssertionError { - public AnnotatedSaveableException(String message) { - super(message); - } - } - - protected final FieldAccessor[] fields; - protected final Class[] fieldClasses; - - public AnnotatedSaveable() { - List fields = new ArrayList<>(); - collectAnnotatedFields(fields, this.getClass()); - fields.sort((f1, f2) -> { - int result; - result = f1.getClass().getName().compareTo(f2.getClass().getName()); - if (result != 0) { - return result; - } - result = f1.getName().compareTo(f2.getName()); - if (result != 0) { - return result; - } - return 0; - }); - this.fields = new FieldAccessor[fields.size()]; - this.fieldClasses = new Class[fields.size()]; - for (int i = 0; i < fields.size(); i++) { - Field f = fields.get(i); - FieldAccessorFactory factory = accessorFactories.get(f.getType()); - if (factory == null) { - throw new AnnotatedSaveableException("Cannot type for field " + f); - } - this.fields[i] = factory.apply(f); - this.fieldClasses[i] = f.getType(); - } - } - - @SuppressWarnings("unchecked") - static void collectAnnotatedFields(List fields, Class cls) { - if (cls.equals(AnnotatedSaveable.class)) { - return; - } - collectAnnotatedFields(fields, (Class) cls.getSuperclass()); - for (Field f : cls.getDeclaredFields()) { - SaveableField annot = f.getAnnotation(SaveableField.class); - if (annot == null) { - continue; - } - f.setAccessible(true); - fields.add(f); - } - } - - @Override - public Class[] getObjectStorageFields() { - return fieldClasses; - } - - @Override - public void save(ObjectStorage objStorage) { - for (FieldAccessor fa : fields) { - fa.save(this, objStorage); - } - } - - @Override - public void restore(ObjectStorage objStorage) { - for (FieldAccessor fa : fields) { - fa.restore(this, objStorage); - } - } - - @Override - public boolean isUpgradeable(int oldSchemaVersion) { - return false; - } - - @Override - public boolean upgrade(ObjectStorage oldObjStorage, int oldSchemaVersion, - ObjectStorage currentObjStorage) { - return false; - } - - @Override - public boolean isPrivate() { - return false; - } -} diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/LazyCollection.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/LazyCollection.java new file mode 100644 index 0000000000..8368331abd --- /dev/null +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/LazyCollection.java @@ -0,0 +1,100 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.util; + +import java.util.*; +import java.util.function.Supplier; +import java.util.stream.Stream; + +import javax.help.UnsupportedOperationException; + +public class LazyCollection implements Collection { + private final Supplier> streamFactory; + + public LazyCollection(Supplier> streamFactory) { + this.streamFactory = streamFactory; + } + + @Override + public int size() { + return (int) streamFactory.get().count(); + } + + @Override + public boolean isEmpty() { + return streamFactory.get().findAny().isEmpty(); + } + + @Override + public boolean contains(Object o) { + return streamFactory.get().anyMatch(e -> Objects.equals(e, o)); + } + + @Override + @SuppressWarnings("unchecked") + public Iterator iterator() { + return (Iterator) streamFactory.get().iterator(); + } + + @Override + public Object[] toArray() { + return streamFactory.get().toArray(); + } + + @Override + public U[] toArray(U[] a) { + return streamFactory.get().toList().toArray(a); + } + + @Override + public boolean add(T e) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean remove(Object o) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean containsAll(Collection c) { + Set remains = new HashSet<>(c); + return remains.isEmpty() || streamFactory.get().anyMatch(e -> { + remains.remove(e); + return remains.isEmpty(); + }); + } + + @Override + public boolean addAll(Collection c) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean removeAll(Collection c) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean retainAll(Collection c) { + throw new UnsupportedOperationException(); + } + + @Override + public void clear() { + throw new UnsupportedOperationException(); + } +} diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/MergeSortingIterator.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/MergeSortingIterator.java index bcd421ff99..28c74c40df 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/MergeSortingIterator.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/MergeSortingIterator.java @@ -18,21 +18,11 @@ package ghidra.util; import java.util.*; import java.util.Map.Entry; -import com.google.common.collect.*; - import generic.util.PeekableIterator; /** * An iterator which merges sorted iterators according to a comparator * - *

- * TODO: This may be replaceable with {@link Iterators#mergeSorted(Iterable, Comparator)}. I - * hesitate, since I benefit from this implementation complying with {@link PeekableIterator}, while - * Guava's does not -- though, they would use {@link PeekingIterator} instead. Currently, my - * {@link UnionAddressRangeIterator} takes advantage of the {@link PeekableIterator} interface of - * this implementation. I could use {@link Iterators#peekingIterator(Iterator)}, but this would - * introduce a wrapper. - * * @param the type of elements in each iterator */ public class MergeSortingIterator implements PeekableIterator { @@ -112,7 +102,7 @@ public class MergeSortingIterator implements PeekableIterator { public static MergeSortingIterator> withLabels( Map> iterMap, Comparator comparator) { Collection> iterators = - Collections2.transform(iterMap.entrySet(), LabeledIterator::create); + iterMap.entrySet().stream().map(LabeledIterator::create).toList(); Comparator> comp = Comparator.comparing(Entry::getValue, comparator); return new MergeSortingIterator>(iterators, comp); } diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/MergeSortingSpliterator.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/MergeSortingSpliterator.java new file mode 100644 index 0000000000..46cb68a8e8 --- /dev/null +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/MergeSortingSpliterator.java @@ -0,0 +1,86 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.util; + +import java.util.*; +import java.util.function.Consumer; + +public class MergeSortingSpliterator implements Spliterator { + static class SpliteratorEntry { + final Spliterator spliterator; + T next; + boolean hasNext; + + SpliteratorEntry(Spliterator spliterator) { + this.spliterator = spliterator; + tryNext(); + } + + boolean tryNext() { + return hasNext = spliterator.tryAdvance(n -> next = n); + } + } + + private final Comparator comparator; + private final PriorityQueue> queue; + + public MergeSortingSpliterator(Iterable> spliterators, + Comparator comparator) { + this.comparator = comparator; + this.queue = new PriorityQueue<>(Comparator.comparing(se -> se.next, comparator)); + for (Spliterator s : spliterators) { + SpliteratorEntry se = new SpliteratorEntry<>(s); + if (se.hasNext) { + queue.add(se); + } + } + } + + @Override + public boolean tryAdvance(Consumer action) { + SpliteratorEntry se = queue.poll(); + if (se == null) { + return false; + } + T next = se.next; + if (se.tryNext()) { + queue.add(se); + } + action.accept(next); + return true; + } + + @Override + public Spliterator trySplit() { + return null; + } + + @Override + public long estimateSize() { + return queue.stream().mapToLong(se -> se.spliterator.estimateSize()).sum() + + queue.size(); + } + + @Override + public int characteristics() { + return Spliterator.ORDERED | Spliterator.SORTED; + } + + @Override + public Comparator getComparator() { + return comparator; + } +} diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/StreamUtils.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/StreamUtils.java new file mode 100644 index 0000000000..6f89d6cddc --- /dev/null +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/StreamUtils.java @@ -0,0 +1,34 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.util; + +import java.util.Collection; +import java.util.Comparator; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +public enum StreamUtils { + ; + @SuppressWarnings("unchecked") + public static Stream merge(Collection> streams, + Comparator comparator) { + if (streams.size() == 1) { + return (Stream) streams.iterator().next(); + } + return StreamSupport.stream(new MergeSortingSpliterator<>( + streams.stream().map(s -> s.spliterator()).toList(), comparator), false); + } +} diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/UnionAddressSetView.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/UnionAddressSetView.java index 15193d19f6..c093ccc545 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/UnionAddressSetView.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/UnionAddressSetView.java @@ -21,8 +21,6 @@ import static ghidra.util.ComparatorMath.cmin; import java.util.Arrays; import java.util.Collection; -import com.google.common.collect.Collections2; - import ghidra.program.model.address.*; public class UnionAddressSetView extends AbstractAddressSetView { @@ -92,12 +90,12 @@ public class UnionAddressSetView extends AbstractAddressSetView { @Override public AddressRangeIterator getAddressRanges() { - return AddressRangeIterators.union(Collections2.transform(views, v -> v.iterator()), true); + return AddressRangeIterators.union(views.stream().map(v -> v.iterator()).toList(), true); } @Override public AddressRangeIterator getAddressRanges(boolean forward) { - return AddressRangeIterators.union(Collections2.transform(views, v -> v.iterator(forward)), + return AddressRangeIterators.union(views.stream().map(v -> v.iterator(forward)).toList(), forward); } @@ -105,9 +103,9 @@ public class UnionAddressSetView extends AbstractAddressSetView { public AddressRangeIterator getAddressRanges(Address start, boolean forward) { // Need to coalesce in reverse to initialize AddressRangeIterator rev = AddressRangeIterators.union( - Collections2.transform(views, v -> v.iterator(start, !forward)), !forward); + views.stream().map(v -> v.iterator(start, !forward)).toList(), !forward); Address fixedStart = fixStart(rev, start, forward); - return AddressRangeIterators.union( - Collections2.transform(views, v -> v.iterator(fixedStart, forward)), forward); + return AddressRangeIterators + .union(views.stream().map(v -> v.iterator(fixedStart, forward)).toList(), forward); } } diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTree.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTree.java index 6954f3a835..2cb8dcc03e 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTree.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTree.java @@ -20,10 +20,6 @@ import java.util.*; import java.util.Map.Entry; import java.util.function.Consumer; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalNotification; -import com.google.common.collect.Collections2; - import db.DBRecord; import generic.NestedIterator; import generic.util.PeekableIterator; @@ -31,6 +27,7 @@ import ghidra.util.LockHold; import ghidra.util.database.*; import ghidra.util.database.spatial.DBTreeNodeRecord.NodeType; import ghidra.util.database.spatial.Query.QueryInclusion; +import ghidra.util.datastruct.FixedSizeHashMap; import ghidra.util.exception.VersionException; public abstract class AbstractConstraintsTree< // @@ -41,21 +38,15 @@ public abstract class AbstractConstraintsTree< // T, // Q extends Query> { + static final int MAX_CACHE_ENTRIES = 50; + protected final DBCachedObjectStore dataStore; protected final DBCachedObjectStore nodeStore; - protected final Map> cachedDataChildren = CacheBuilder.newBuilder() - .removalListener(this::cachedDataChildrenRemoved) - .concurrencyLevel(4) - .maximumSize(50) - .build() - .asMap(); - protected final Map> cachedNodeChildren = CacheBuilder.newBuilder() - .removalListener(this::cachedNodeChildrenRemoved) - .concurrencyLevel(4) - .maximumSize(50) - .build() - .asMap(); + protected final Map> cachedDataChildren = + new FixedSizeHashMap<>(MAX_CACHE_ENTRIES); + protected final Map> cachedNodeChildren = + new FixedSizeHashMap<>(MAX_CACHE_ENTRIES); protected NR root; protected int leafLevel; @@ -69,14 +60,6 @@ public abstract class AbstractConstraintsTree< // this::createNodeEntry, upgradable); } - private void cachedDataChildrenRemoved(RemovalNotification> rn) { - // Nothing - } - - private void cachedNodeChildrenRemoved(RemovalNotification> rn) { - // Nothing - } - protected abstract DR createDataEntry(DBCachedObjectStore store, DBRecord record); protected abstract NR createNodeEntry(DBCachedObjectStore store, DBRecord record); @@ -580,9 +563,10 @@ public abstract class AbstractConstraintsTree< // * edge of the parent. Furthermore, since an implementation may index on those bounds, there * may be a fast way to discover the "next child in". */ - Collection childBounds = - Collections2.transform(getChildrenOf(node), DBTreeRecord::getBounds); - NS bounds = BoundingShape.boundsUnion(childBounds); + NS bounds = getChildrenOf(node).stream() + .map(DBTreeRecord::getBounds) + .reduce(BoundingShape::unionBounds) + .orElse(null); node.setShape(bounds); } @@ -781,9 +765,10 @@ public abstract class AbstractConstraintsTree< // */ protected void checkNodeIntegrity(NR n) { // Check parent has exactly the minimum bounds of its children - Collection childBounds = - Collections2.transform(getChildrenOf(n), DBTreeRecord::getBounds); - NS expectedBounds = BoundingShape.boundsUnion(childBounds); + NS expectedBounds = getChildrenOf(n).stream() + .map(DBTreeRecord::getBounds) + .reduce(BoundingShape::unionBounds) + .orElse(null); if (expectedBounds == null && n != root) { throw new AssertionError("Non-root node cannot be empty"); } diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTreeSpatialMap.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTreeSpatialMap.java index a9552ee97a..206a7000ae 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTreeSpatialMap.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTreeSpatialMap.java @@ -21,7 +21,7 @@ import java.util.Map.Entry; import java.util.concurrent.locks.ReadWriteLock; import java.util.function.Consumer; -import com.google.common.collect.Iterators; +import org.apache.commons.collections4.IteratorUtils; import ghidra.util.LockHold; import ghidra.util.database.spatial.DBTreeDataRecord.RecordEntry; @@ -173,7 +173,7 @@ public abstract class AbstractConstraintsTreeSpatialMap< // public Iterator> iterator() { try (LockHold hold = LockHold.lock(tree.dataStore.readLock())) { return new SynchronizedIterator<>( - Iterators.transform(tree.iterator(query), r -> r.asEntry()), + IteratorUtils.transformedIterator(tree.iterator(query), r -> r.asEntry()), tree.dataStore.getLock()); } } @@ -230,7 +230,8 @@ public abstract class AbstractConstraintsTreeSpatialMap< // public Iterator> iterator() { try (LockHold hold = LockHold.lock(tree.dataStore.readLock())) { return new SynchronizedIterator<>( - Iterators.transform(tree.orderedIterator(query), r -> r.asEntry()), + IteratorUtils.transformedIterator(tree.orderedIterator(query), + r -> r.asEntry()), tree.dataStore.getLock()); } } @@ -254,7 +255,7 @@ public abstract class AbstractConstraintsTreeSpatialMap< // public Iterator iterator() { try (LockHold hold = LockHold.lock(tree.dataStore.readLock())) { return new SynchronizedIterator<>( - Iterators.transform(tree.iterator(query), r -> r.getShape()), + IteratorUtils.transformedIterator(tree.iterator(query), r -> r.getShape()), tree.dataStore.getLock()); } } @@ -310,7 +311,8 @@ public abstract class AbstractConstraintsTreeSpatialMap< // public Iterator iterator() { try (LockHold hold = LockHold.lock(tree.dataStore.readLock())) { return new SynchronizedIterator<>( - Iterators.transform(tree.orderedIterator(query), r -> r.getShape()), + IteratorUtils.transformedIterator(tree.orderedIterator(query), + r -> r.getShape()), tree.dataStore.getLock()); } } @@ -334,7 +336,8 @@ public abstract class AbstractConstraintsTreeSpatialMap< // public Iterator iterator() { try (LockHold hold = LockHold.lock(tree.dataStore.readLock())) { return new SynchronizedIterator<>( - Iterators.transform(tree.iterator(query), r -> r.getRecordValue()), + IteratorUtils.transformedIterator(tree.iterator(query), + r -> r.getRecordValue()), tree.dataStore.getLock()); } } @@ -390,7 +393,7 @@ public abstract class AbstractConstraintsTreeSpatialMap< // public Iterator iterator() { try (LockHold hold = LockHold.lock(tree.dataStore.readLock())) { return new SynchronizedIterator<>( - Iterators.transform(tree.orderedIterator(query), + IteratorUtils.transformedIterator(tree.orderedIterator(query), r -> r.getRecordValue()), tree.dataStore.getLock()); } diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractRStarConstraintsTree.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractRStarConstraintsTree.java index 161dd47346..29e4420ed0 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractRStarConstraintsTree.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractRStarConstraintsTree.java @@ -18,8 +18,6 @@ package ghidra.util.database.spatial; import java.io.IOException; import java.util.*; -import com.google.common.collect.Collections2; - import ghidra.util.database.DBCachedObjectStoreFactory; import ghidra.util.database.spatial.DBTreeNodeRecord.NodeType; import ghidra.util.exception.VersionException; @@ -251,14 +249,6 @@ public abstract class AbstractRStarConstraintsTree< // return sum; } - protected static int sum(Iterable terms) { - int sum = 0; - for (long t : terms) { - sum += t; - } - return sum; - } - /** * The Split algorithm as defined in Section 4.2 of the paper. * @@ -290,18 +280,20 @@ public abstract class AbstractRStarConstraintsTree< // n2.setType(n.getType()); // Update existing node's metadata - Collection firstBounds = - Collections2.transform(firstGroup, DBTreeRecord::getBounds); - n1.setShape(BoundingShape.boundsUnion(firstBounds)); + n1.setShape(firstGroup.stream() + .map(DBTreeRecord::getBounds) + .reduce(BoundingShape::unionBounds) + .orElse(null)); n1.setChildCount(index); - n1.setDataCount(sum(Collections2.transform(firstGroup, p -> p.getDataCount()))); + n1.setDataCount(firstGroup.stream().mapToInt(DBTreeRecord::getDataCount).sum()); // Set new node's metadata - Collection secondBounds = - Collections2.transform(secondGroup, DBTreeRecord::getBounds); - n2.setShape(BoundingShape.boundsUnion(secondBounds)); + n2.setShape(secondGroup.stream() + .map(DBTreeRecord::getBounds) + .reduce(BoundingShape::unionBounds) + .orElse(null)); n2.setChildCount(maxChildren + 1 - index); - n2.setDataCount(sum(Collections2.transform(secondGroup, p -> p.getDataCount()))); + n2.setDataCount(secondGroup.stream().mapToInt(DBTreeRecord::getDataCount).sum()); // Move split-off children to new node if (n2.getType() == NodeType.LEAF) { @@ -337,27 +329,31 @@ public abstract class AbstractRStarConstraintsTree< // // ************X (M = 12) // mmm-------mmm (m = 3) // 8 distributions : 12 - 2*3 + 2 - Collection firstKBounds = - Collections2.transform(children.subList(0, minChildren), DBTreeRecord::getBounds); - NS boundsFirstKChildren = BoundingShape.boundsUnion(firstKBounds); - Collection lastKBounds = Collections2.transform( - children.subList(maxChildren + 1 - minChildren, maxChildren + 1), - DBTreeRecord::getBounds); - NS bounsaLastKChildren = BoundingShape.boundsUnion(lastKBounds); + NS boundsFirstKChildren = children.subList(0, minChildren) + .stream() + .map(DBTreeRecord::getBounds) + .reduce(BoundingShape::unionBounds) + .orElse(null); + NS boundsLastKChildren = + children.subList(maxChildren + 1 - minChildren, maxChildren + 1) + .stream() + .map(DBTreeRecord::getBounds) + .reduce(BoundingShape::unionBounds) + .orElse(null); int maxK = maxChildren + 1 - minChildren * 2; double marginValue = 0; marginValue += boundsFirstKChildren.getMargin(); - marginValue += bounsaLastKChildren.getMargin(); + marginValue += boundsLastKChildren.getMargin(); for (int k = 0; k <= maxK; k++) { // NOTE: Our k is 0-up. Paper defines using 1-up. NS forFirst = children.get(minChildren + k).getBounds(); NS forSecond = children.get(maxChildren - minChildren - k).getBounds(); boundsFirstKChildren = boundsFirstKChildren.unionBounds(forFirst); - bounsaLastKChildren = bounsaLastKChildren.unionBounds(forSecond); + boundsLastKChildren = boundsLastKChildren.unionBounds(forSecond); marginValue += boundsFirstKChildren.getMargin(); - marginValue += bounsaLastKChildren.getMargin(); + marginValue += boundsLastKChildren.getMargin(); } // CSA2 @@ -380,13 +376,16 @@ public abstract class AbstractRStarConstraintsTree< // // mmm-------mmm (m = 3) // 8 distributions : 12 - 2*3 + 2 - Collection firstBounds = - Collections2.transform(children.subList(0, minChildren), DBTreeRecord::getBounds); - NS boundsFirstKChildren = BoundingShape.boundsUnion(firstBounds); - Collection secondBounds = - Collections2.transform(children.subList(maxChildren + 1 - minChildren, maxChildren + 1), - DBTreeRecord::getBounds); - NS boundsLastKChildren = BoundingShape.boundsUnion(secondBounds); + NS boundsFirstKChildren = children.subList(0, minChildren) + .stream() + .map(DBTreeRecord::getBounds) + .reduce(BoundingShape::unionBounds) + .orElse(null); + NS boundsLastKChildren = children.subList(maxChildren + 1 - minChildren, maxChildren + 1) + .stream() + .map(DBTreeRecord::getBounds) + .reduce(BoundingShape::unionBounds) + .orElse(null); int maxK = maxChildren + 1 - minChildren * 2; Deque boundsFirsts = new ArrayDeque<>(); @@ -581,11 +580,10 @@ public abstract class AbstractRStarConstraintsTree< // p.setDataCount(newDataCount); // I can't think of a better way to re-compute the bounds in the path - Collection childBounds = - Collections2.transform(getChildrenOf(p), DBTreeRecord::getBounds); - NS newBounds = BoundingShape.boundsUnion(childBounds); - p.setShape(newBounds); - + p.setShape(getChildrenOf(p).stream() + .map(DBTreeRecord::getBounds) + .reduce(BoundingShape::unionBounds) + .orElse(null)); p = getParentOf(p); } diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/BoundingShape.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/BoundingShape.java index ac44b36d63..8eed8523ae 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/BoundingShape.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/BoundingShape.java @@ -30,7 +30,7 @@ public interface BoundingShape> extends BoundedShape< S unionBounds(S shape); - static > S boundsUnion(Iterable shapes) { + static > S unionIterable(Iterable shapes) { S result = null; for (S s : shapes) { if (result == null) { diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/ListenerMap.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/ListenerMap.java index 8e4382fe5f..f28b381573 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/ListenerMap.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/ListenerMap.java @@ -15,14 +15,14 @@ */ package ghidra.util.datastruct; +import java.lang.ref.WeakReference; import java.lang.reflect.*; import java.util.*; +import java.util.Map.Entry; import java.util.concurrent.Executor; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.atomic.AtomicReference; -import com.google.common.cache.*; - import ghidra.util.Msg; /** @@ -51,6 +51,24 @@ import ghidra.util.Msg; * @param the type of listeners */ public class ListenerMap { + private static final boolean DEBUG_INCEPTION = false; + + public static class ListenerEntry extends WeakReference { + final String desc; + final Throwable inception; + + public ListenerEntry(V referent) { + super(referent); + this.desc = referent.toString(); + if (DEBUG_INCEPTION) { + this.inception = new Throwable(); + } + else { + this.inception = null; + } + } + } + public static final Executor CALLING_THREAD = new Executor() { @Override public void execute(Runnable command) { @@ -120,12 +138,13 @@ public class ListenerMap { // System.identityHashCode(executor)); // Listener adds/removes need to take immediate effect, even with queued events executor.execute(() -> { - Collection listenersVolatile; + Collection> listenersVolatile; synchronized (lock) { listenersVolatile = map.values(); } - for (V l : listenersVolatile) { - if (!ext.isAssignableFrom(l.getClass())) { + for (ListenerEntry wl : listenersVolatile) { + V l = wl.get(); + if (l == null || !ext.isAssignableFrom(l.getClass())) { continue; } //Msg.debug(this, @@ -149,7 +168,7 @@ public class ListenerMap { private final Object lock = new Object(); private final Class

iface; private final Executor executor; - private Map map = createMap(); + private Map> map = createMap(); /** * A proxy which passes invocations to each value of this map @@ -198,22 +217,12 @@ public class ListenerMap { return map.toString(); } - protected Map createMap() { - /** - * TODO: This is potentially flawed: The removal modifies the map in place. It does not - * adhere to "copy on write." It does have its own concurrency considerations, though. - */ - CacheBuilder builder = CacheBuilder.newBuilder() - .removalListener(this::notifyRemoved) - .weakValues() - .concurrencyLevel(1); - return builder.build().asMap(); + protected Map> createMap() { + return new HashMap<>(); } - protected void notifyRemoved(RemovalNotification rn) { - if (rn.getCause() == RemovalCause.COLLECTED) { - Msg.warn(this, "Listener garbage collected before removal: " + rn); - } + protected void notifyRemoved(ListenerEntry entry) { + Msg.warn(this, "Listener garbage collected before removal: " + entry.desc); } @SuppressWarnings("unchecked") @@ -233,30 +242,42 @@ public class ListenerMap { return map.isEmpty(); } + protected void doPutAllInto(Map> newMap) { + for (Entry> ent : map.entrySet()) { + if (ent.getValue().get() == null) { + notifyRemoved(ent.getValue()); + } + else { + newMap.put(ent.getKey(), ent.getValue()); + } + } + } + public V put(K key, V val) { synchronized (lock) { if (map.get(key) == val) { return val; } - Map newMap = createMap(); - newMap.putAll(map); - V result = newMap.put(key, val); + Map> newMap = createMap(); + doPutAllInto(newMap); + ListenerEntry result = newMap.put(key, new ListenerEntry<>(val)); map = newMap; - return result; + return result == null ? null : result.get(); } } public void putAll(ListenerMap that) { synchronized (lock) { - Map newMap = createMap(); - newMap.putAll(map); - newMap.putAll(that.map); + Map> newMap = createMap(); + doPutAllInto(newMap); + that.doPutAllInto(newMap); map = newMap; } } public V get(K key) { - return map.get(key); + ListenerEntry entry = map.get(key); + return entry == null ? null : entry.get(); } public V remove(K key) { @@ -264,11 +285,11 @@ public class ListenerMap { if (!map.containsKey(key)) { return null; } - Map newMap = createMap(); - newMap.putAll(map); - V result = newMap.remove(key); + Map> newMap = createMap(); + doPutAllInto(newMap); + ListenerEntry result = newMap.remove(key); map = newMap; - return result; + return result == null ? null : result.get(); } } diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/ListenerSet.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/ListenerSet.java index 8ae184812d..f5dce7a6d1 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/ListenerSet.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/ListenerSet.java @@ -16,10 +16,10 @@ package ghidra.util.datastruct; import java.util.Map; +import java.util.WeakHashMap; import java.util.concurrent.Executor; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalNotification; +import ghidra.util.datastruct.ListenerMap.ListenerEntry; /** * A weak set of multiplexed listeners and an invocation proxy @@ -58,7 +58,7 @@ public class ListenerSet { public ListenerSet(Class iface, Executor executor) { map = new ListenerMap(iface, executor) { @Override - protected Map createMap() { + protected Map> createMap() { return ListenerSet.this.createMap(); }; }; @@ -70,17 +70,9 @@ public class ListenerSet { return map.toString(); } - protected Map createMap() { - CacheBuilder builder = CacheBuilder.newBuilder() - .removalListener(this::notifyRemoved) - .weakKeys() - .weakValues() - .concurrencyLevel(1); - return builder.build().asMap(); - } - - protected void notifyRemoved(RemovalNotification rn) { - map.notifyRemoved(rn); + protected Map> createMap() { + // TODO: This doesn't prevent the automatic removal of an entry in the "immutable" map. + return new WeakHashMap<>(); } public T fire(Class ext) { diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/PrivatelyQueuedListener.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/PrivatelyQueuedListener.java index 898af53ddb..f6a0615585 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/PrivatelyQueuedListener.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/PrivatelyQueuedListener.java @@ -29,6 +29,15 @@ import org.apache.commons.lang3.concurrent.BasicThreadFactory; public class PrivatelyQueuedListener

{ protected class ListenerHandler implements InvocationHandler { + private static final Method OBJECT_HASHCODE; + static { + try { + OBJECT_HASHCODE = Object.class.getMethod("hashCode"); + } + catch (NoSuchMethodException | SecurityException e) { + throw new AssertionError(e); + } + } protected final Class

iface; public ListenerHandler(Class

iface) { @@ -37,6 +46,9 @@ public class PrivatelyQueuedListener

{ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + if (OBJECT_HASHCODE.equals(method)) { + return System.identityHashCode(proxy); + } executor.execute(() -> { try { method.invoke(out, args); diff --git a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/framework/options/AutoOptionsTest.java b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/framework/options/AutoOptionsTest.java index 2925e7642e..da89adad38 100644 --- a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/framework/options/AutoOptionsTest.java +++ b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/framework/options/AutoOptionsTest.java @@ -20,7 +20,6 @@ import static org.junit.Assert.assertEquals; import org.junit.*; import ghidra.MiscellaneousPluginPackage; -import ghidra.framework.options.*; import ghidra.framework.options.AutoOptions.NewValue; import ghidra.framework.options.AutoOptions.OldValue; import ghidra.framework.options.annotation.AutoOptionConsumed; diff --git a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/framework/plugintool/AutoServiceTest.java b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/framework/plugintool/AutoServiceTest.java index 98bc3f089d..8bb09d3b6e 100644 --- a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/framework/plugintool/AutoServiceTest.java +++ b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/framework/plugintool/AutoServiceTest.java @@ -17,10 +17,11 @@ package ghidra.framework.plugintool; import static org.junit.Assert.assertEquals; +import java.util.List; + import org.junit.*; import ghidra.MiscellaneousPluginPackage; -import ghidra.framework.plugintool.*; import ghidra.framework.plugintool.annotation.AutoServiceConsumed; import ghidra.framework.plugintool.annotation.AutoServiceProvided; import ghidra.framework.plugintool.util.PluginStatus; @@ -37,14 +38,13 @@ public class AutoServiceTest extends AbstractGhidraHeadedIntegrationTest { // Nothing to implement } - @PluginInfo( // - category = "Testing", // - description = "A class for testing auto services", // - packageName = MiscellaneousPluginPackage.NAME, // - shortDescription = "Service-annotated plugin", // - status = PluginStatus.HIDDEN, // - servicesProvided = TestService.class // - ) + @PluginInfo( + category = "Testing", + description = "A class for testing auto services", + packageName = MiscellaneousPluginPackage.NAME, + shortDescription = "Service-annotated plugin", + status = PluginStatus.HIDDEN, + servicesProvided = TestService.class) public static class AnnotatedServicesProvidedPlugin extends Plugin { @AutoServiceProvided(iface = TestService.class) private final TestServiceImpl testService = new TestServiceImpl(); @@ -57,13 +57,12 @@ public class AutoServiceTest extends AbstractGhidraHeadedIntegrationTest { } } - @PluginInfo( // - category = "Testing", // - description = "A dummy plugin for order testing", // - packageName = MiscellaneousPluginPackage.NAME, // - shortDescription = "Dummy plugin", // - status = PluginStatus.HIDDEN // - ) + @PluginInfo( + category = "Testing", + description = "A dummy plugin for order testing", + packageName = MiscellaneousPluginPackage.NAME, + shortDescription = "Dummy plugin", + status = PluginStatus.HIDDEN) public static class DummyPlugin extends Plugin { public DummyPlugin(PluginTool tool) { super(tool); @@ -158,7 +157,7 @@ public class AutoServiceTest extends AbstractGhidraHeadedIntegrationTest { new AnnotatedServicesConsumedByFieldComponent(plugin); assertEquals(plugin.testService, comp.testService); - tool.removePlugins(new Plugin[] { plugin }); + tool.removePlugins(List.of(plugin)); assertEquals(null, comp.testService); } } diff --git a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/generic/util/datastruct/DynamicSortedTreeSetTest.java b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/generic/util/datastruct/DynamicSortedTreeSetTest.java index bf9e62c5e0..b0b79494b6 100644 --- a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/generic/util/datastruct/DynamicSortedTreeSetTest.java +++ b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/generic/util/datastruct/DynamicSortedTreeSetTest.java @@ -22,8 +22,6 @@ import java.util.*; import org.apache.commons.lang3.ArrayUtils; import org.junit.Test; -import ghidra.generic.util.datastruct.DynamicSortedTreeSet; - public class DynamicSortedTreeSetTest { public static class NonComparable { public NonComparable(String key, int cost) { diff --git a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/AnnotatedSaveableTest.java b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/AnnotatedSaveableTest.java deleted file mode 100644 index 44a5fb8156..0000000000 --- a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/AnnotatedSaveableTest.java +++ /dev/null @@ -1,321 +0,0 @@ -/* ### - * IP: GHIDRA - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package ghidra.util; - -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; - -import java.util.Deque; -import java.util.LinkedList; - -import org.junit.Test; - -public class AnnotatedSaveableTest { - public static class AllFieldTypesSaveable extends AnnotatedSaveable { - @SaveableField - private boolean primitiveBoolean; - - @SaveableField - private Boolean objectBoolean; - - @SaveableField - private byte primitiveByte; - - @SaveableField - private Byte objectByte; - - @SaveableField - private byte[] arrOfByte; - - @SaveableField - private double primitiveDouble; - - @SaveableField - private Double objectDouble; - - @SaveableField - private double[] arrOfDouble; - - @SaveableField - private float primitiveFloat; - - @SaveableField - private Float objectFloat; - - @SaveableField - private float[] arrOfFloat; - - @SaveableField - private int primitiveInt; - - @SaveableField - private Integer objectInt; - - @SaveableField - private int[] arrOfInt; - - @SaveableField - private long primitiveLong; - - @SaveableField - private Long objectLong; - - @SaveableField - private long[] arrOfLong; - - @SaveableField - private short primitiveShort; - - @SaveableField - private Short objectShort; - - @SaveableField - private short[] arrOfShort; - - @SaveableField - private String objectString; - - @SaveableField - private String[] arrOfString; - - @Override - public int getSchemaVersion() { - return 0; - } - } - - class FakeObjectStorage implements ObjectStorage { - final Deque objects = new LinkedList<>(); - - @Override - public void putInt(int value) { - objects.offer(value); - } - - @Override - public void putByte(byte value) { - objects.offer(value); - } - - @Override - public void putShort(short value) { - objects.offer(value); - } - - @Override - public void putLong(long value) { - objects.offer(value); - } - - @Override - public void putString(String value) { - objects.offer(value); - } - - @Override - public void putBoolean(boolean value) { - objects.offer(value); - } - - @Override - public void putFloat(float value) { - objects.offer(value); - } - - @Override - public void putDouble(double value) { - objects.offer(value); - } - - @Override - public int getInt() { - return (Integer) objects.poll(); - } - - @Override - public byte getByte() { - return (Byte) objects.poll(); - } - - @Override - public short getShort() { - return (Short) objects.poll(); - } - - @Override - public long getLong() { - return (Long) objects.poll(); - } - - @Override - public boolean getBoolean() { - return (Boolean) objects.poll(); - } - - @Override - public String getString() { - return (String) objects.poll(); - } - - @Override - public float getFloat() { - return (Float) objects.poll(); - } - - @Override - public double getDouble() { - return (Double) objects.poll(); - } - - @Override - public void putInts(int[] value) { - objects.offer(value); - } - - @Override - public void putBytes(byte[] value) { - objects.offer(value); - } - - @Override - public void putShorts(short[] value) { - objects.offer(value); - } - - @Override - public void putLongs(long[] value) { - objects.offer(value); - } - - @Override - public void putFloats(float[] value) { - objects.offer(value); - } - - @Override - public void putDoubles(double[] value) { - objects.offer(value); - } - - @Override - public void putStrings(String[] value) { - objects.offer(value); - } - - @Override - public int[] getInts() { - return (int[]) objects.poll(); - } - - @Override - public byte[] getBytes() { - return (byte[]) objects.poll(); - } - - @Override - public short[] getShorts() { - return (short[]) objects.poll(); - } - - @Override - public long[] getLongs() { - return (long[]) objects.poll(); - } - - @Override - public float[] getFloats() { - return (float[]) objects.poll(); - } - - @Override - public double[] getDoubles() { - return (double[]) objects.poll(); - } - - @Override - public String[] getStrings() { - return (String[]) objects.poll(); - } - } - - @Test - public void testAllFieldTypes() { - AllFieldTypesSaveable saveable = new AllFieldTypesSaveable(); - saveable.primitiveBoolean = true; - saveable.primitiveByte = 1; - saveable.primitiveDouble = 2.0; - saveable.primitiveFloat = 3.0f; - saveable.primitiveInt = 4; - saveable.primitiveLong = 5; - saveable.primitiveShort = 6; - saveable.objectBoolean = false; - saveable.objectByte = 7; - saveable.objectDouble = 8.0; - saveable.objectFloat = 9.0f; - saveable.objectInt = 10; - saveable.objectLong = 11L; - saveable.objectShort = 12; - saveable.objectString = "13"; - saveable.arrOfByte = new byte[] {}; - saveable.arrOfDouble = new double[] { 14.0, 15.0 }; - saveable.arrOfFloat = new float[] { 16.0f }; - saveable.arrOfInt = new int[] { 17, 18, 19 }; - saveable.arrOfLong = new long[] { 20L, 21L }; - saveable.arrOfShort = new short[] { 22 }; - saveable.arrOfString = new String[] { "23", "24" }; - - FakeObjectStorage storage = new FakeObjectStorage(); - saveable.save(storage); - - AllFieldTypesSaveable restored = new AllFieldTypesSaveable(); - restored.restore(storage); - - assertEquals(restored.primitiveBoolean, true); - assertEquals(restored.primitiveByte, (byte) 1); - assertEquals(restored.primitiveDouble, 2.0, 0); - assertEquals(restored.primitiveFloat, 3.0f, 0); - assertEquals(restored.primitiveInt, 4); - assertEquals(restored.primitiveLong, 5L); - assertEquals(restored.primitiveShort, (short) 6); - - assertEquals(restored.objectBoolean, Boolean.FALSE); - assertEquals(restored.objectByte, Byte.valueOf((byte) 7)); - assertEquals(restored.objectDouble, Double.valueOf(8.0)); - assertEquals(restored.objectFloat, Float.valueOf(9.0f)); - assertEquals(restored.objectInt, Integer.valueOf(10)); - assertEquals(restored.objectLong, Long.valueOf(11)); - assertEquals(restored.objectShort, Short.valueOf((short) 12)); - assertEquals(restored.objectString, "13"); - - assertArrayEquals(restored.arrOfByte, new byte[] {}); - assertArrayEquals(restored.arrOfDouble, new double[] { 14.0, 15.0 }, 0); - assertArrayEquals(restored.arrOfFloat, new float[] { 16.0f }, 0); - assertArrayEquals(restored.arrOfInt, new int[] { 17, 18, 19 }); - assertArrayEquals(restored.arrOfLong, new long[] { 20L, 21L }); - assertArrayEquals(restored.arrOfShort, new short[] { 22 }); - assertArrayEquals(restored.arrOfString, new String[] { "23", "24" }); - } - - @Test - public void testFieldsAlphabetized() { - AllFieldTypesSaveable saveable = new AllFieldTypesSaveable(); - assertArrayEquals(saveable.getObjectStorageFields(), - new Class[] { byte[].class, double[].class, float[].class, int[].class, long[].class, - short[].class, String[].class, Boolean.class, Byte.class, Double.class, Float.class, - Integer.class, Long.class, Short.class, String.class, boolean.class, byte.class, - double.class, float.class, int.class, long.class, short.class, }); - } -} diff --git a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/database/spatial/RStarTreeMapTest.java b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/database/spatial/RStarTreeMapTest.java index e38175c4ae..7b1b7d0433 100644 --- a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/database/spatial/RStarTreeMapTest.java +++ b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/database/spatial/RStarTreeMapTest.java @@ -32,12 +32,11 @@ import java.util.function.Consumer; import javax.swing.JFrame; import javax.swing.JPanel; +import org.apache.commons.collections4.IteratorUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.junit.*; -import com.google.common.collect.Iterators; - import db.DBHandle; import db.DBRecord; import generic.theme.GThemeDefaults.Colors.Palette; @@ -725,11 +724,13 @@ public class RStarTreeMapTest { @Test public void testQueryIntersecting() { List expected = new ArrayList<>(); - Iterators.filter(allRects(range), queryRect::intersects).forEachRemaining(expected::add); + IteratorUtils.filteredIterator(allRects(range), queryRect::intersects) + .forEachRemaining(expected::add); IntRectQuery query = IntRectQuery.intersecting(queryRect); List actual = new ArrayList<>(); - Iterators.filter(allRects(range), query::testData).forEachRemaining(actual::add); + IteratorUtils.filteredIterator(allRects(range), query::testData) + .forEachRemaining(actual::add); assertEquals(expected, actual); } @@ -737,11 +738,13 @@ public class RStarTreeMapTest { @Test public void testQueryEnclosing() { List expected = new ArrayList<>(); - Iterators.filter(allRects(range), queryRect::enclosedBy).forEachRemaining(expected::add); + IteratorUtils.filteredIterator(allRects(range), queryRect::enclosedBy) + .forEachRemaining(expected::add); IntRectQuery query = IntRectQuery.enclosing(queryRect); List actual = new ArrayList<>(); - Iterators.filter(allRects(range), query::testData).forEachRemaining(actual::add); + IteratorUtils.filteredIterator(allRects(range), query::testData) + .forEachRemaining(actual::add); assertEquals(expected, actual); } @@ -749,11 +752,13 @@ public class RStarTreeMapTest { @Test public void testQueryEnclosed() { List expected = new ArrayList<>(); - Iterators.filter(allRects(range), queryRect::encloses).forEachRemaining(expected::add); + IteratorUtils.filteredIterator(allRects(range), queryRect::encloses) + .forEachRemaining(expected::add); IntRectQuery query = IntRectQuery.enclosed(queryRect); List actual = new ArrayList<>(); - Iterators.filter(allRects(range), query::testData).forEachRemaining(actual::add); + IteratorUtils.filteredIterator(allRects(range), query::testData) + .forEachRemaining(actual::add); assertEquals(expected, actual); } @@ -763,7 +768,7 @@ public class RStarTreeMapTest { IntRect queryRect1 = rect(1, 1, 12, 13); IntRect queryRect2 = rect(4, 4, 12, 13); List expected = new ArrayList<>(); - Iterators.filter(allRects(range), + IteratorUtils.filteredIterator(allRects(range), r -> queryRect1.intersects(r) && queryRect2.intersects(r)) .forEachRemaining( expected::add); @@ -773,7 +778,8 @@ public class RStarTreeMapTest { IntRectQuery query = IntRectQuery.intersecting(queryRect1).and(IntRectQuery.intersecting(queryRect2)); List actual = new ArrayList<>(); - Iterators.filter(allRects(range), query::testData).forEachRemaining(actual::add); + IteratorUtils.filteredIterator(allRects(range), query::testData) + .forEachRemaining(actual::add); assertEquals(expected, actual); } diff --git a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/datastruct/ListenerSetTest.java b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/datastruct/ListenerSetTest.java index 9081982a90..63334dfb7e 100644 --- a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/datastruct/ListenerSetTest.java +++ b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/datastruct/ListenerSetTest.java @@ -22,8 +22,6 @@ import java.util.concurrent.atomic.AtomicReference; import org.junit.Test; -import ghidra.util.datastruct.ListenerSet; - public class ListenerSetTest { public interface DummyListener { void event(String e); diff --git a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/datastruct/ObservableCollectionTest.java b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/datastruct/ObservableCollectionTest.java index ba5005b268..d4d18c90b8 100644 --- a/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/datastruct/ObservableCollectionTest.java +++ b/Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/datastruct/ObservableCollectionTest.java @@ -24,10 +24,6 @@ import java.util.concurrent.atomic.AtomicReference; import org.junit.After; import org.junit.Test; -import com.google.common.collect.ImmutableList; - -import ghidra.util.datastruct.CollectionChangeListener; -import ghidra.util.datastruct.DefaultObservableCollection; import ghidra.util.datastruct.ObservableCollection.ChangeAggregator; public class ObservableCollectionTest { @@ -91,12 +87,12 @@ public class ObservableCollectionTest { assertTrue(col.remove("Ent1")); assertFalse(col.contains("Ent1")); assertEquals(1, col.size()); - assertTrue(col.addAll(ImmutableList.of("Ent1", "Ent3"))); - assertFalse(col.addAll(ImmutableList.of("Ent2", "Ent1"))); - assertTrue(col.removeAll(ImmutableList.of("Ent1", "Ent2", "Ent3"))); + assertTrue(col.addAll(List.of("Ent1", "Ent3"))); + assertFalse(col.addAll(List.of("Ent2", "Ent1"))); + assertTrue(col.removeAll(List.of("Ent1", "Ent2", "Ent3"))); assertTrue(col.isEmpty()); - assertTrue(col.addAll(ImmutableList.of("Ent2", "Ent3"))); - assertTrue(col.retainAll(ImmutableList.of("Ent2", "Ent1"))); + assertTrue(col.addAll(List.of("Ent2", "Ent3"))); + assertTrue(col.retainAll(List.of("Ent2", "Ent1"))); assertTrue(col.contains("Ent2")); assertEquals(1, col.size()); col.clear(); @@ -143,7 +139,7 @@ public class ObservableCollectionTest { @Test public void testRemoveViaIteratorCausesEvent() { TestObservableCollection col = new TestObservableCollection(); - col.addAll(ImmutableList.of("Ent1", "Ent2", "Ent3")); + col.addAll(List.of("Ent1", "Ent2", "Ent3")); AtomicReference lastRemoved = new AtomicReference<>(); TestCollectionListener listener = new DefaultTestCollectionListener() { @Override @@ -171,17 +167,17 @@ public class ObservableCollectionTest { } }; col.addChangeListener(listener); - assertTrue(col.addAll(ImmutableList.of("Ent1", "Ent2"))); - assertTrue(col.addAll(ImmutableList.of("Ent3", "Ent2"))); - assertTrue(col.addAll(ImmutableList.of("Ent3", "Ent4"))); - assertFalse(col.addAll(ImmutableList.of("Ent1", "Ent2"))); - assertEquals(ImmutableList.of("Ent1", "Ent2", "Ent3", "Ent4"), added); + assertTrue(col.addAll(List.of("Ent1", "Ent2"))); + assertTrue(col.addAll(List.of("Ent3", "Ent2"))); + assertTrue(col.addAll(List.of("Ent3", "Ent4"))); + assertFalse(col.addAll(List.of("Ent1", "Ent2"))); + assertEquals(List.of("Ent1", "Ent2", "Ent3", "Ent4"), added); } @Test public void testRemovalAllCausesEvent() { TestObservableCollection col = new TestObservableCollection(); - col.addAll(ImmutableList.of("Ent1", "Ent2", "Ent3", "Ent4")); + col.addAll(List.of("Ent1", "Ent2", "Ent3", "Ent4")); List removed = new ArrayList<>(); TestCollectionListener listener = new DefaultTestCollectionListener() { @Override @@ -190,17 +186,17 @@ public class ObservableCollectionTest { } }; col.addChangeListener(listener); - assertTrue(col.removeAll(ImmutableList.of("Ent1", "Ent2"))); - assertTrue(col.removeAll(ImmutableList.of("Ent3", "Ent2"))); - assertTrue(col.removeAll(ImmutableList.of("Ent3", "Ent4"))); - assertFalse(col.removeAll(ImmutableList.of("Ent1", "Ent2"))); - assertEquals(ImmutableList.of("Ent1", "Ent2", "Ent3", "Ent4"), removed); + assertTrue(col.removeAll(List.of("Ent1", "Ent2"))); + assertTrue(col.removeAll(List.of("Ent3", "Ent2"))); + assertTrue(col.removeAll(List.of("Ent3", "Ent4"))); + assertFalse(col.removeAll(List.of("Ent1", "Ent2"))); + assertEquals(List.of("Ent1", "Ent2", "Ent3", "Ent4"), removed); } @Test public void testRetailAllCausesEvent() { TestObservableCollection col = new TestObservableCollection(); - col.addAll(ImmutableList.of("Ent1", "Ent2", "Ent3", "Ent4")); + col.addAll(List.of("Ent1", "Ent2", "Ent3", "Ent4")); List removed = new ArrayList<>(); TestCollectionListener listener = new DefaultTestCollectionListener() { @Override @@ -209,17 +205,17 @@ public class ObservableCollectionTest { } }; col.addChangeListener(listener); - assertTrue(col.retainAll(ImmutableList.of("Ent3", "Ent4"))); - assertTrue(col.retainAll(ImmutableList.of("Ent4", "Ent1"))); - assertTrue(col.retainAll(ImmutableList.of("Ent1", "Ent2"))); - assertFalse(col.retainAll(ImmutableList.of("Ent3", "Ent4"))); - assertEquals(ImmutableList.of("Ent1", "Ent2", "Ent3", "Ent4"), removed); + assertTrue(col.retainAll(List.of("Ent3", "Ent4"))); + assertTrue(col.retainAll(List.of("Ent4", "Ent1"))); + assertTrue(col.retainAll(List.of("Ent1", "Ent2"))); + assertFalse(col.retainAll(List.of("Ent3", "Ent4"))); + assertEquals(List.of("Ent1", "Ent2", "Ent3", "Ent4"), removed); } @Test public void testClearCausesEvent() { TestObservableCollection col = new TestObservableCollection(); - col.addAll(ImmutableList.of("Ent1", "Ent2", "Ent3", "Ent4")); + col.addAll(List.of("Ent1", "Ent2", "Ent3", "Ent4")); List removed = new ArrayList<>(); TestCollectionListener listener = new DefaultTestCollectionListener() { @Override @@ -229,7 +225,7 @@ public class ObservableCollectionTest { }; col.addChangeListener(listener); col.clear(); - assertEquals(ImmutableList.of("Ent1", "Ent2", "Ent3", "Ent4"), removed); + assertEquals(List.of("Ent1", "Ent2", "Ent3", "Ent4"), removed); } @Test @@ -246,7 +242,7 @@ public class ObservableCollectionTest { col.addChangeListener(listener); col.notifyModified("Ent1"); col.notifyModified("Ent1"); - assertEquals(ImmutableList.of("Ent1", "Ent1"), modified); + assertEquals(List.of("Ent1", "Ent1"), modified); } @Test @@ -282,9 +278,9 @@ public class ObservableCollectionTest { col.addChangeListener(listener); try (ChangeAggregator changes = col.aggregateChanges()) { assertTrue(col.add("Ent1")); - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); } - assertEquals(ImmutableList.of("Ent1"), added); + assertEquals(List.of("Ent1"), added); } @Test @@ -301,9 +297,9 @@ public class ObservableCollectionTest { try (ChangeAggregator changes = col.aggregateChanges()) { assertTrue(col.add("Ent1")); assertTrue(col.add("Ent2")); - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); } - assertEquals(ImmutableList.of("Ent1", "Ent2"), added); + assertEquals(List.of("Ent1", "Ent2"), added); } @Test @@ -320,9 +316,9 @@ public class ObservableCollectionTest { try (ChangeAggregator changes = col.aggregateChanges()) { assertTrue(col.add("Ent1")); assertFalse(col.add("Ent1")); - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); } - assertEquals(ImmutableList.of("Ent1"), added); + assertEquals(List.of("Ent1"), added); } @Test @@ -339,9 +335,9 @@ public class ObservableCollectionTest { try (ChangeAggregator changes = col.aggregateChanges()) { assertTrue(col.add("Ent1")); col.notifyModified("Ent1"); - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); } - assertEquals(ImmutableList.of("Ent1"), added); + assertEquals(List.of("Ent1"), added); } @Test @@ -357,11 +353,11 @@ public class ObservableCollectionTest { col.addChangeListener(listener); try (ChangeAggregator changes = col.aggregateChanges()) { assertTrue(col.add("Ent1")); - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); assertTrue(col.remove("Ent1")); - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); } - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); } @Test @@ -378,11 +374,11 @@ public class ObservableCollectionTest { col.addChangeListener(listener); try (ChangeAggregator changes = col.aggregateChanges()) { col.notifyModified("Ent1"); - assertEquals(ImmutableList.of(), modified); + assertEquals(List.of(), modified); assertFalse(col.add("Ent1")); - assertEquals(ImmutableList.of(), modified); + assertEquals(List.of(), modified); } - assertEquals(ImmutableList.of("Ent1"), modified); + assertEquals(List.of("Ent1"), modified); } @Test @@ -399,11 +395,11 @@ public class ObservableCollectionTest { col.addChangeListener(listener); try (ChangeAggregator changes = col.aggregateChanges()) { col.notifyModified("Ent1"); - assertEquals(ImmutableList.of(), modified); + assertEquals(List.of(), modified); col.notifyModified("Ent1"); - assertEquals(ImmutableList.of(), modified); + assertEquals(List.of(), modified); } - assertEquals(ImmutableList.of("Ent1"), modified); + assertEquals(List.of("Ent1"), modified); } @Test @@ -420,11 +416,11 @@ public class ObservableCollectionTest { col.addChangeListener(listener); try (ChangeAggregator changes = col.aggregateChanges()) { col.notifyModified("Ent1"); - assertEquals(ImmutableList.of(), removed); + assertEquals(List.of(), removed); assertTrue(col.remove("Ent1")); - assertEquals(ImmutableList.of(), removed); + assertEquals(List.of(), removed); } - assertEquals(ImmutableList.of("Ent1"), removed); + assertEquals(List.of("Ent1"), removed); } @Test @@ -441,11 +437,11 @@ public class ObservableCollectionTest { col.addChangeListener(listener); try (ChangeAggregator changes = col.aggregateChanges()) { assertTrue(col.remove("Ent1")); - assertEquals(ImmutableList.of(), modified); + assertEquals(List.of(), modified); assertTrue(col.add("Ent1")); - assertEquals(ImmutableList.of(), modified); + assertEquals(List.of(), modified); } - assertEquals(ImmutableList.of("Ent1"), modified); + assertEquals(List.of("Ent1"), modified); } @Test(expected = AssertionError.class) @@ -462,7 +458,7 @@ public class ObservableCollectionTest { col.addChangeListener(listener); try (ChangeAggregator changes = col.aggregateChanges()) { assertTrue(col.remove("Ent1")); - assertEquals(ImmutableList.of(), removed); + assertEquals(List.of(), removed); col.notifyModified("Ent1"); } } @@ -481,11 +477,11 @@ public class ObservableCollectionTest { col.addChangeListener(listener); try (ChangeAggregator changes = col.aggregateChanges()) { assertTrue(col.remove("Ent1")); - assertEquals(ImmutableList.of(), removed); + assertEquals(List.of(), removed); assertFalse(col.remove("Ent1")); - assertEquals(ImmutableList.of(), removed); + assertEquals(List.of(), removed); } - assertEquals(ImmutableList.of("Ent1"), removed); + assertEquals(List.of("Ent1"), removed); } @Test @@ -501,14 +497,14 @@ public class ObservableCollectionTest { col.addChangeListener(listener); try (ChangeAggregator changesOuter = col.aggregateChanges()) { assertTrue(col.add("Ent1")); - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); try (ChangeAggregator changesInner = col.aggregateChanges()) { assertTrue(col.add("Ent2")); - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); } assertTrue(col.add("Ent3")); - assertEquals(ImmutableList.of(), added); + assertEquals(List.of(), added); } - assertEquals(ImmutableList.of("Ent1", "Ent2", "Ent3"), added); + assertEquals(List.of("Ent1", "Ent2", "Ent3"), added); } } diff --git a/Ghidra/Framework/Generic/build.gradle b/Ghidra/Framework/Generic/build.gradle index c470719743..eebb092a54 100644 --- a/Ghidra/Framework/Generic/build.gradle +++ b/Ghidra/Framework/Generic/build.gradle @@ -26,7 +26,6 @@ eclipse.project.name = 'Framework Generic' dependencies { api project(':Utility') - api "com.google.guava:guava:19.0" api "org.jdom:jdom-legacy:1.1.3" api "org.apache.logging.log4j:log4j-api:2.17.1" api "org.apache.logging.log4j:log4j-core:2.17.1" diff --git a/Ghidra/Framework/Gui/src/main/java/generic/theme/ThemeWriter.java b/Ghidra/Framework/Gui/src/main/java/generic/theme/ThemeWriter.java index 1d778e867c..45f49ed5e6 100644 --- a/Ghidra/Framework/Gui/src/main/java/generic/theme/ThemeWriter.java +++ b/Ghidra/Framework/Gui/src/main/java/generic/theme/ThemeWriter.java @@ -16,12 +16,11 @@ package generic.theme; import java.io.*; +import java.nio.file.Files; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import com.google.common.io.Files; - /** * Writes a theme to a file either as a single theme file or as a zip file that contains the theme * file and any external (from the file system, not the classpath) icons used by the theme. @@ -125,7 +124,7 @@ public class ThemeWriter { private void copyToZipFile(String dir, File iconFile, ZipOutputStream zos) throws IOException { ZipEntry entry = new ZipEntry(dir + "images/" + iconFile.getName()); zos.putNextEntry(entry); - Files.copy(iconFile, zos); + Files.copy(iconFile.toPath(), zos); } private void saveThemeFileToZip(String dir, ZipOutputStream zos) throws IOException {