diff --git a/Ghidra/Features/Base/src/main/java/ghidra/test/TestEnv.java b/Ghidra/Features/Base/src/main/java/ghidra/test/TestEnv.java index e5ce0bfee5..5b3050488e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/test/TestEnv.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/test/TestEnv.java @@ -603,7 +603,7 @@ public class TestEnv { */ public PluginTool launchAnotherDefaultTool() { PluginTool newTool = createDefaultTool(); - newTool.setToolName(newTool.getToolName() + toolID++); + AbstractGenericTest.runSwing(() -> newTool.setToolName(newTool.getToolName() + toolID++)); extraTools.add(newTool); return newTool; diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/clipboard/CopyPasteCommentsTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/clipboard/CopyPasteCommentsTest.java index cc5125d858..394290918f 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/clipboard/CopyPasteCommentsTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/clipboard/CopyPasteCommentsTest.java @@ -48,14 +48,11 @@ import ghidra.program.util.AddressFieldLocation; import ghidra.program.util.ProgramSelection; import ghidra.test.AbstractProgramBasedTest; import ghidra.test.ToyProgramBuilder; -import ghidra.util.task.TaskMonitorAdapter; +import ghidra.util.task.TaskMonitor; /** - * Test the plugin that deals with cut/paste comments and labels. - * - * + * Test the plugin that deals with cut/paste comments and labels */ - public class CopyPasteCommentsTest extends AbstractProgramBasedTest { private PluginTool toolOne; @@ -112,16 +109,13 @@ public class CopyPasteCommentsTest extends AbstractProgramBasedTest { DomainFolder rootFolder = env.getProject().getProjectData().getRootFolder(); Program sdk = program; - final DomainFile df = rootFolder.createFile("sdk1", sdk, TaskMonitorAdapter.DUMMY_MONITOR); - programOne = - (ProgramDB) df.getDomainObject(this, true, false, TaskMonitorAdapter.DUMMY_MONITOR); + final DomainFile df = rootFolder.createFile("sdk1", sdk, TaskMonitor.DUMMY); + programOne = (ProgramDB) df.getDomainObject(this, true, false, TaskMonitor.DUMMY); env.release(sdk); Program sdk2 = buildProgram("sdk2"); - final DomainFile df2 = - rootFolder.createFile("sdk2", sdk2, TaskMonitorAdapter.DUMMY_MONITOR); - programTwo = - (ProgramDB) df2.getDomainObject(this, true, false, TaskMonitorAdapter.DUMMY_MONITOR); + final DomainFile df2 = rootFolder.createFile("sdk2", sdk2, TaskMonitor.DUMMY); + programTwo = (ProgramDB) df2.getDomainObject(this, true, false, TaskMonitor.DUMMY); env.release(sdk2); setupProgramOne(); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/memory/MemoryMapPluginTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/memory/MemoryMapPluginTest.java index 1b094fda95..b035bb9836 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/memory/MemoryMapPluginTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/memory/MemoryMapPluginTest.java @@ -98,12 +98,13 @@ public class MemoryMapPluginTest extends AbstractGhidraHeadedIntegrationTest { env.open(program); Set actions = getActionsByOwner(tool, plugin.getName()); for (DockingActionIf action : actions) { - if (action.getName().equals("Add Block") || action.getName().equals("Set Image Base") || - action.getName().equals("Memory Map")) { + String name = action.getName(); + if (name.equals("Add Block") || name.equals("Set Image Base") || + name.equals("Memory Map") || name.equals("Close Window")) { assertTrue(action.isEnabledForContext(provider.getActionContext(null))); } else { - assertTrue(!action.isEnabledForContext(provider.getActionContext(null))); + assertFalse(action.isEnabledForContext(provider.getActionContext(null))); } } @@ -116,9 +117,11 @@ public class MemoryMapPluginTest extends AbstractGhidraHeadedIntegrationTest { assertEquals(0, table.getModel().getRowCount()); Set actions = getActionsByOwner(tool, plugin.getName()); for (DockingActionIf action : actions) { - if (!action.getName().equals("Memory Map")) { - assertTrue(!action.isEnabledForContext(provider.getActionContext(null))); + String name = action.getName(); + if (name.equals("Memory Map") || name.equals("Close Window")) { + continue; } + assertFalse(action.isEnabledForContext(provider.getActionContext(null))); } } diff --git a/Ghidra/Features/FunctionGraph/src/test/java/ghidra/app/plugin/core/functiongraph/FunctionGraphCacheTest.java b/Ghidra/Features/FunctionGraph/src/test/java/ghidra/app/plugin/core/functiongraph/FunctionGraphCacheTest.java index 15bf5f899e..3bf84eab7d 100644 --- a/Ghidra/Features/FunctionGraph/src/test/java/ghidra/app/plugin/core/functiongraph/FunctionGraphCacheTest.java +++ b/Ghidra/Features/FunctionGraph/src/test/java/ghidra/app/plugin/core/functiongraph/FunctionGraphCacheTest.java @@ -36,7 +36,7 @@ public class FunctionGraphCacheTest extends AbstractFunctionGraphTest { private List
disposedFunctionData = Collections.synchronizedList(new ArrayList<>()); private List
evictedFromCache = Collections.synchronizedList(new ArrayList<>()); - // partial fake of DecompilerController to take control of the buildCache() method and spy + // partial fake of FGController to take control of the buildCache() method and spy // on the two methods that might dispose a FunctionGrahpData object. public class FakeFunctionGraphController extends MockUp { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DockableToolBarManager.java b/Ghidra/Framework/Docking/src/main/java/docking/DockableToolBarManager.java index 929b489a1e..595d162ea9 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DockableToolBarManager.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DockableToolBarManager.java @@ -163,10 +163,13 @@ class DockableToolBarManager { void dispose() { - DockingWindowManager dwm = dockableComponent.getDockingWindowManager(); - DockingTool tool = dwm.getTool(); - ComponentProvider provider = dockableComponent.getComponentProvider(); - tool.removeLocalAction(provider, closeButtonManager.getAction()); + // this will be null for non-standard use cases + if (dockableComponent != null) { + DockingWindowManager dwm = dockableComponent.getDockingWindowManager(); + DockingTool tool = dwm.getTool(); + ComponentProvider provider = dockableComponent.getComponentProvider(); + tool.removeLocalAction(provider, closeButtonManager.getAction()); + } headerUpdater.dispose(); menuManager.dispose(); @@ -186,6 +189,7 @@ class DockableToolBarManager { super("Close Window", owner, KeyBindingType.SHARED); setDescription("Close Window"); setToolBarData(new ToolBarData(CLOSE_ICON, null)); + markHelpUnnecessary(); } @Override