mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
GP-1514 - Find References to - Added support for finding usage of enum
fields Closes #1967
This commit is contained in:
parent
2fb860bcd7
commit
33b2bbbd0b
15 changed files with 108 additions and 135 deletions
|
@ -18,14 +18,14 @@ package ghidra.app.plugin.core.decompile.actions;
|
|||
import docking.ActionContext;
|
||||
import docking.action.MenuData;
|
||||
import ghidra.app.actions.AbstractFindReferencesDataTypeAction;
|
||||
import ghidra.app.decompiler.ClangFieldToken;
|
||||
import ghidra.app.decompiler.ClangToken;
|
||||
import ghidra.app.decompiler.*;
|
||||
import ghidra.app.decompiler.component.*;
|
||||
import ghidra.app.plugin.core.decompile.DecompilerActionContext;
|
||||
import ghidra.app.plugin.core.navigation.locationreferences.LocationReferencesService;
|
||||
import ghidra.app.util.HelpTopics;
|
||||
import ghidra.framework.plugintool.PluginTool;
|
||||
import ghidra.program.model.data.DataType;
|
||||
import ghidra.program.model.data.Enum;
|
||||
import ghidra.util.HelpLocation;
|
||||
|
||||
public class FindReferencesToDataTypeAction extends AbstractFindReferencesDataTypeAction {
|
||||
|
@ -44,12 +44,11 @@ public class FindReferencesToDataTypeAction extends AbstractFindReferencesDataTy
|
|||
|
||||
@Override
|
||||
public DataType getDataType(ActionContext context) {
|
||||
|
||||
return DecompilerUtils.getDataType((DecompilerActionContext) context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getDataTypeField() {
|
||||
protected String getDataTypeField(DataType dataType) {
|
||||
|
||||
DecompilerPanel decompilerPanel = controller.getDecompilerPanel();
|
||||
ClangToken tokenAtCursor = decompilerPanel.getTokenAtCursor();
|
||||
|
@ -57,6 +56,20 @@ public class FindReferencesToDataTypeAction extends AbstractFindReferencesDataTy
|
|||
return tokenAtCursor.getText();
|
||||
}
|
||||
|
||||
if (dataType instanceof Enum) {
|
||||
|
||||
// check for enum field
|
||||
ClangVariableToken vt = (ClangVariableToken) tokenAtCursor;
|
||||
String text = vt.getText();
|
||||
Enum e = (Enum) dataType;
|
||||
String[] names = e.getNames();
|
||||
for (String name : names) {
|
||||
if (name.equals(text)) {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -93,8 +106,7 @@ public class FindReferencesToDataTypeAction extends AbstractFindReferencesDataTy
|
|||
|
||||
String typeName = type.getName();
|
||||
String menuName = "Find Uses of " + typeName;
|
||||
|
||||
String fieldName = getDataTypeField();
|
||||
String fieldName = getDataTypeField(type);
|
||||
if (fieldName != null) {
|
||||
menuName += '.' + fieldName;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,6 @@ import ghidra.app.plugin.core.navigation.locationreferences.LocationReferencesPr
|
|||
import ghidra.app.plugin.core.navigation.locationreferences.LocationReferencesService;
|
||||
import ghidra.app.services.DataTypeReference;
|
||||
import ghidra.app.services.DataTypeReferenceFinder;
|
||||
import ghidra.program.model.data.Composite;
|
||||
import ghidra.program.model.data.DataType;
|
||||
import ghidra.program.model.listing.Program;
|
||||
import ghidra.program.util.ProgramLocation;
|
||||
|
@ -167,7 +166,7 @@ public abstract class AbstractDecompilerFindReferencesActionTest extends Abstrac
|
|||
}
|
||||
|
||||
@Mock
|
||||
public void findReferences(Program p, Composite composite, String fieldName,
|
||||
public void findReferences(Program p, DataType dt, String fieldName,
|
||||
Consumer<DataTypeReference> callback, TaskMonitor monitor) {
|
||||
|
||||
compositeFieldReferencesCallCount.incrementAndGet();
|
||||
|
|
|
@ -19,7 +19,6 @@ import java.util.function.Consumer;
|
|||
|
||||
import ghidra.app.services.DataTypeReference;
|
||||
import ghidra.app.services.DataTypeReferenceFinder;
|
||||
import ghidra.program.model.data.Composite;
|
||||
import ghidra.program.model.data.DataType;
|
||||
import ghidra.program.model.listing.Program;
|
||||
import ghidra.util.exception.CancelledException;
|
||||
|
@ -37,7 +36,7 @@ public class StubDataTypeReferenceFinder implements DataTypeReferenceFinder {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void findReferences(Program program, Composite composite, String fieldName,
|
||||
public void findReferences(Program program, DataType dataType, String fieldName,
|
||||
Consumer<DataTypeReference> callback, TaskMonitor monitor) throws CancelledException {
|
||||
// stub
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue