From 47500148ce2b50f87f05b2449f14d30b39320a5c Mon Sep 17 00:00:00 2001 From: dragonmacher <48328597+dragonmacher@users.noreply.github.com> Date: Tue, 26 Nov 2024 14:26:05 -0500 Subject: [PATCH] Test fixes --- .../main/AbstractDataTreeDialog.java | 11 ++++++--- .../app/plugin/core/diff/DualProgramTest.java | 2 +- .../java/docking/DialogActionContext.java | 23 +++++++++++-------- .../datatree/DialogProjectTreeContext.java | 18 +++++++++------ 4 files changed, 34 insertions(+), 20 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/framework/main/AbstractDataTreeDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/framework/main/AbstractDataTreeDialog.java index cd20562578..0209164e54 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/framework/main/AbstractDataTreeDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/framework/main/AbstractDataTreeDialog.java @@ -4,9 +4,9 @@ * 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. @@ -163,7 +163,12 @@ public abstract class AbstractDataTreeDialog extends DialogComponentProvider // must have been closed; some kind of timing issue return super.getActionContext(event); } - return treePanel.getActionContext(null, event); + + ActionContext actionContext = treePanel.getActionContext(null, event); + if (actionContext instanceof DialogActionContext dac) { + dac.setDialogComponentProvider(this); + } + return actionContext; } public void show() { diff --git a/Ghidra/Features/ProgramDiff/src/test.slow/java/ghidra/app/plugin/core/diff/DualProgramTest.java b/Ghidra/Features/ProgramDiff/src/test.slow/java/ghidra/app/plugin/core/diff/DualProgramTest.java index 8158812b52..ba81c1b4e5 100644 --- a/Ghidra/Features/ProgramDiff/src/test.slow/java/ghidra/app/plugin/core/diff/DualProgramTest.java +++ b/Ghidra/Features/ProgramDiff/src/test.slow/java/ghidra/app/plugin/core/diff/DualProgramTest.java @@ -76,7 +76,7 @@ public class DualProgramTest extends DiffTestAdapter { } @Test - public void testEscapeOpenSecondProgram() throws Exception { + public void testOpenSecondProgram_Escape() throws Exception { restoreProgram(diffTestP2); loadProgram(diffTestP1); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DialogActionContext.java b/Ghidra/Framework/Docking/src/main/java/docking/DialogActionContext.java index 86500e2b9e..7768f9aafb 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DialogActionContext.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DialogActionContext.java @@ -16,25 +16,30 @@ package docking; import java.awt.Component; - -import ghidra.util.Msg; +import java.util.Objects; /** * Action context for {@link DialogComponentProvider}s. */ public class DialogActionContext extends DefaultActionContext { + private DialogComponentProvider dialogProvider; + public DialogActionContext(DialogComponentProvider dialogProvider, Component sourceComponent) { super(null, dialogProvider, sourceComponent); + this.dialogProvider = Objects.requireNonNull(dialogProvider); + } + + // this constructor allows clients to set the dialog later + public DialogActionContext(Object contextObject, Component sourceComponent) { + super(null, contextObject, sourceComponent); + } + + public void setDialogComponentProvider(DialogComponentProvider dialogProvider) { + this.dialogProvider = dialogProvider; } public DialogComponentProvider getDialogComponentProvider() { - Object contextObject = getContextObject(); - if (contextObject instanceof DialogComponentProvider dcp) { - return dcp; - } - - Msg.warn(this, "Found dialog context without a DialogComponentProvider context object"); - return null; + return dialogProvider; } } diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DialogProjectTreeContext.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DialogProjectTreeContext.java index 0d2fd5476a..49166d8e93 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DialogProjectTreeContext.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DialogProjectTreeContext.java @@ -4,9 +4,9 @@ * 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. @@ -20,15 +20,19 @@ import java.util.List; import javax.swing.tree.TreePath; -import docking.DefaultActionContext; +import docking.DialogActionContext; import docking.widgets.tree.GTreeNode; import ghidra.framework.main.datatable.ProjectTreeContext; import ghidra.framework.model.*; /** * Context specific to the DataTreeDialog. + * + * Note: this context is used from by the {@link ProjectDataTreePanel}. This class may or may not + * be in a dialog. For convenience, this class extends a dialog action context, but may not always + * be associated with a dialog. */ -public class DialogProjectTreeContext extends DefaultActionContext implements ProjectTreeContext { +public class DialogProjectTreeContext extends DialogActionContext implements ProjectTreeContext { private TreePath[] selectionPaths; private DataTree tree; @@ -36,9 +40,9 @@ public class DialogProjectTreeContext extends DefaultActionContext implements Pr private List selectedFiles; public DialogProjectTreeContext(ProjectData projectData, - TreePath[] selectionPaths, - List folderList, List fileList, DataTree tree) { - super(null, getContextObject(selectionPaths), tree); + TreePath[] selectionPaths, List folderList, List fileList, + DataTree tree) { + super(getContextObject(selectionPaths), tree); this.selectionPaths = selectionPaths; this.selectedFolders = folderList; this.selectedFiles = fileList;