mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-06-01 06:16:45 +08:00
Merge remote-tracking branch 'origin/GP-5679-dragonmacher-dtm-type-filter--SQUASHED' into Ghidra_11.4
This commit is contained in:
+1
-1
@@ -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() {
|
||||
|
||||
+11
-13
@@ -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) {
|
||||
|
||||
+26
-5
@@ -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<String, DataTypeNode> getNodes(DataTypeManager dtm) {
|
||||
|
||||
|
||||
DataTypeArchiveGTree gTree = provider.getGTree();
|
||||
GTreeNode rootNode = gTree.getViewRoot();
|
||||
GTreeNode dtmNode = rootNode.getChild(dtm.getName());
|
||||
assertNotNull(dtmNode);
|
||||
|
||||
|
||||
expandNode(dtmNode);
|
||||
|
||||
|
||||
Map<String, DataTypeNode> nodesByName = new HashMap<>();
|
||||
Iterator<GTreeNode> 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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user