diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterDialog.java index dcdc8ba196..f4af227db3 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterDialog.java @@ -178,7 +178,7 @@ public class DtFilterDialog extends DialogComponentProvider { this.type = type; this.typeCb = new GCheckBox(type); this.typeDefCb = new GCheckBox(); - this.typeDefCb.setName(type + "Typedefs"); + this.typeDefCb.setName(type + "TypeDefs"); } JComponent getLeft() { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterState.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterState.java index 235d892e45..6727b2cb30 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterState.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterState.java @@ -137,40 +137,38 @@ public class DtFilterState { DataType baseDt = DataTypeUtils.getBaseDataType(dt); if (dt instanceof Array) { - return passes(arraysFilter, dt, baseDt); + return passes(arraysFilter, dt); } if (dt instanceof Pointer) { - return passes(pointersFilter, dt, baseDt); + return passes(pointersFilter, dt); } if (baseDt instanceof Enum) { - return passes(enumsFilter, dt, baseDt); + return passes(enumsFilter, dt); } if (baseDt instanceof Function) { - return passes(functionsFilter, dt, baseDt); + return passes(functionsFilter, dt); } if (baseDt instanceof Structure) { - return passes(structuresFilter, dt, baseDt); + return passes(structuresFilter, dt); } if (baseDt instanceof Union) { - return passes(unionsFilter, dt, baseDt); + return passes(unionsFilter, dt); } return true; } - private boolean passes(DtTypeFilter filter, DataType dt, DataType baseDt) { - if (filter.isTypeActive()) { - return true; + private boolean passes(DtTypeFilter filter, DataType dt) { + if (dt instanceof TypeDef) { + return filter.isTypeDefActive(); } - if (filter.isTypeDefActive() && dt instanceof TypeDef) { - return true; - } - return false; + + return filter.isTypeActive(); } public void save(SaveState parentSaveState) { diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/datamgr/DataTypeManagerPluginTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/datamgr/DataTypeManagerPluginTest.java index fd8f7d7556..a9972ba0ee 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/datamgr/DataTypeManagerPluginTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/datamgr/DataTypeManagerPluginTest.java @@ -16,6 +16,7 @@ package ghidra.app.plugin.core.datamgr; import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.*; import java.awt.Container; @@ -959,7 +960,7 @@ public class DataTypeManagerPluginTest extends AbstractGhidraHeadedIntegrationTe // Now also turn off typedefs performAction(action, provider, false); dialog = waitForDialogComponent(DtFilterDialog.class); - setToggleButtonSelected(dialog.getComponent(), "StructuresTypedefs", false); + setToggleButtonSelected(dialog.getComponent(), "StructuresTypeDefs", false); pressButtonByText(dialog, "OK"); waitForTree(); @@ -967,6 +968,26 @@ public class DataTypeManagerPluginTest extends AbstractGhidraHeadedIntegrationTe assertType("TypeDefToMyStruct", false); } + @Test + public void testFilter_Structures_HideTypeDefs() { + + assertStructures(true); + assertType("TypeDefToMyStruct", true); + + // press the filter button + DockingActionIf action = getAction(plugin, "Show Filter"); + performAction(action, provider, false); + DtFilterDialog dialog = waitForDialogComponent(DtFilterDialog.class); + + // turn off Structure TypeDefs + setToggleButtonSelected(dialog.getComponent(), "StructuresTypeDefs", false); + pressButtonByText(dialog, "OK"); + waitForTree(); + + assertStructures(true); // still have structures + assertType("TypeDefToMyStruct", false); // no longer have structure typedefs + } + @Test public void testFilter_ClonedProvider() { @@ -1058,14 +1079,14 @@ public class DataTypeManagerPluginTest extends AbstractGhidraHeadedIntegrationTe } private Map getNodes(DataTypeManager dtm) { - + DataTypeArchiveGTree gTree = provider.getGTree(); GTreeNode rootNode = gTree.getViewRoot(); GTreeNode dtmNode = rootNode.getChild(dtm.getName()); assertNotNull(dtmNode); - + expandNode(dtmNode); - + Map nodesByName = new HashMap<>(); Iterator it = dtmNode.iterator(true); for (GTreeNode node : CollectionUtils.asIterable(it)) { @@ -1076,7 +1097,7 @@ public class DataTypeManagerPluginTest extends AbstractGhidraHeadedIntegrationTe DataType dt = dtNode.getDataType(); nodesByName.put(dt.getName(), dtNode); } - + return nodesByName; }