GP-5951 - Decompiler - Changed recent middle-mouse highlight update to restore highlighting of if/else keywords.

This commit is contained in:
dragonmacher 2025-08-27 18:06:39 -04:00
parent 0b61b34bb9
commit 0f89e04e70
2 changed files with 33 additions and 8 deletions

View file

@ -90,6 +90,7 @@ public class DecompilerPanel extends JPanel implements FieldMouseListener, Field
} }
}); });
private Set<String> ignoredMiddleMouseTokens = Set.of("{", "}", ";");
private ActiveMiddleMouse activeMiddleMouse; private ActiveMiddleMouse activeMiddleMouse;
private int middleMouseHighlightButton; private int middleMouseHighlightButton;
private Color middleMouseHighlightColor; private Color middleMouseHighlightColor;
@ -264,7 +265,10 @@ public class DecompilerPanel extends JPanel implements FieldMouseListener, Field
} }
// exclude tokens that users do not want to highlight // exclude tokens that users do not want to highlight
if (token instanceof ClangSyntaxToken || token instanceof ClangOpToken) { if (shouldIgnoreOpToken(token)) {
return;
}
if (shouldIgnoreSyntaxTokenHighlight(token)) {
return; return;
} }
@ -273,6 +277,26 @@ public class DecompilerPanel extends JPanel implements FieldMouseListener, Field
activeMiddleMouse = newMiddleMouse; activeMiddleMouse = newMiddleMouse;
} }
private boolean shouldIgnoreOpToken(ClangToken token) {
if (!(token instanceof ClangOpToken)) {
return false;
}
// users would like to be able to highlight return statements
String text = token.toString();
return !text.equals("return");
}
private boolean shouldIgnoreSyntaxTokenHighlight(ClangToken token) {
if (!(token instanceof ClangSyntaxToken syntaxToken)) {
return false;
}
String string = syntaxToken.toString();
return ignoredMiddleMouseTokens.contains(string);
}
void addHighlighterHighlights(ClangDecompilerHighlighter highlighter, void addHighlighterHighlights(ClangDecompilerHighlighter highlighter,
Supplier<? extends Collection<ClangToken>> tokens, ColorProvider colorProvider) { Supplier<? extends Collection<ClangToken>> tokens, ColorProvider colorProvider) {
highlightController.addHighlighterHighlights(highlighter, tokens, colorProvider); highlightController.addHighlighterHighlights(highlighter, tokens, colorProvider);
@ -745,7 +769,6 @@ public class DecompilerPanel extends JPanel implements FieldMouseListener, Field
int clickCount = ev.getClickCount(); int clickCount = ev.getClickCount();
int buttonState = ev.getButton(); int buttonState = ev.getButton();
if (buttonState == MouseEvent.BUTTON1) { if (buttonState == MouseEvent.BUTTON1) {
if (DockingUtils.isControlModifier(ev) && clickCount == 2) { if (DockingUtils.isControlModifier(ev) && clickCount == 2) {
tryToGoto(location, field, ev, true); tryToGoto(location, field, ev, true);

View file

@ -140,7 +140,7 @@ public class ToolUtils {
File[] toolFiles = USER_TOOLS_DIR.listFiles(filter); File[] toolFiles = USER_TOOLS_DIR.listFiles(filter);
if (toolFiles != null) { if (toolFiles != null) {
for (File toolFile : toolFiles) { for (File toolFile : toolFiles) {
ToolTemplate template = ToolUtils.readToolTemplate(toolFile); ToolTemplate template = readToolTemplate(toolFile);
if (template != null) { if (template != null) {
map.put(template.getName(), template); map.put(template.getName(), template);
} }
@ -202,9 +202,9 @@ public class ToolUtils {
} }
public static void renameToolTemplate(ToolTemplate toolTemplate, String newName) { public static void renameToolTemplate(ToolTemplate toolTemplate, String newName) {
ToolUtils.deleteTool(toolTemplate); deleteTool(toolTemplate);
toolTemplate.setName(newName); toolTemplate.setName(newName);
ToolUtils.writeToolTemplate(toolTemplate); writeToolTemplate(toolTemplate);
} }
public static boolean writeToolTemplate(ToolTemplate template) { public static boolean writeToolTemplate(ToolTemplate template) {
@ -232,6 +232,8 @@ public class ToolUtils {
} }
public static ToolTemplate readToolTemplate(File toolFile) { public static ToolTemplate readToolTemplate(File toolFile) {
LOGGER.trace("Loading tool file {}", toolFile);
GhidraToolTemplate toolTemplate = null; GhidraToolTemplate toolTemplate = null;
try (FileInputStream is = new FileInputStream(toolFile)) { try (FileInputStream is = new FileInputStream(toolFile)) {
@ -331,7 +333,7 @@ public class ToolUtils {
public static String getUniqueToolName(ToolTemplate template) { public static String getUniqueToolName(ToolTemplate template) {
String name = template.getName(); String name = template.getName();
int n = 1; int n = 1;
while (ToolUtils.getToolFile(name).exists()) { while (getToolFile(name).exists()) {
name = name + "_" + n++; name = name + "_" + n++;
} }
return name; return name;