diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/MergeDataTypeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/MergeDataTypeAction.java index 241a91d949..016a5f22b9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/MergeDataTypeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/MergeDataTypeAction.java @@ -57,12 +57,6 @@ public class MergeDataTypeAction extends DockingAction { setHelpLocation(new HelpLocation("DataTypeManagerPlugin", "merge_datatypes")); } - @Override - public boolean isAddToPopup(ActionContext context) { - DataTypeTreeNode node = getSelectedDataTypeTreeNode(context); - return node instanceof DataTypeNode; - } - @Override public boolean isEnabledForContext(ActionContext context) { DataTypeTreeNode node = getSelectedDataTypeTreeNode(context); @@ -75,6 +69,10 @@ public class MergeDataTypeAction extends DockingAction { } DataType dataType = dtNode.getDataType(); + if (!DataTypeUtilities.supportsMerge(dataType)) { + return false; + } + DataTypeManager dataTypeManager = dataType.getDataTypeManager(); // for now, only allow merging on program datatypes. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java index 386e747a37..8dae1301cc 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java @@ -1105,7 +1105,17 @@ public class DataTypeUtilities { public static boolean equalsIgnoreConflict(String name1, String name2) { return getNameWithoutConflict(name1).equals(getNameWithoutConflict(name2)); } + + /** + * Returns true if there is a {@link DataTypeMerger} that can handle the given datatype. Currently, only structures + * unions, and enums are supported. + * @param dataType the dataType to check + * @return true if there is support for merging that dataType + */ + public static boolean supportsMerge(DataType dataType) { + return dataType instanceof Composite || dataType instanceof Enum; + } /** * Convenience method for getting the appropriate datatype merger or throwing an exception * if the two datatypes are not eligible to be merged.