Merge remote-tracking branch 'origin/patch' into

GP-0-dragonmacher-patch-merge
This commit is contained in:
dragonmacher 2025-08-28 09:18:38 -04:00
commit 0ad5aa6710
2 changed files with 24 additions and 25 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 int middleMouseHighlightButton;
private Color middleMouseHighlightColor;
@ -264,11 +265,10 @@ public class DecompilerPanel extends JPanel implements FieldMouseListener, Field
}
// exclude tokens that users do not want to highlight
if (token instanceof ClangOpToken) {
if (shouldIgnoreOpToken(token)) {
return;
}
if (token instanceof ClangSyntaxToken syntaxToken && !isNamespace(syntaxToken)) {
if (shouldIgnoreSyntaxTokenHighlight(token)) {
return;
}
@ -277,28 +277,26 @@ public class DecompilerPanel extends JPanel implements FieldMouseListener, Field
activeMiddleMouse = newMiddleMouse;
}
private boolean isNamespace(ClangSyntaxToken token) {
String text = token.getText();
if (text.length() <= 1) {
private boolean shouldIgnoreOpToken(ClangToken token) {
if (!(token instanceof ClangOpToken)) {
return false;
}
// see if we have a '::' token trailing this token
ClangLine line = token.getLineParent();
int index = line.indexOfToken(token);
for (int i = index + 1; i < line.getNumTokens(); i++) {
ClangToken nextToken = line.getToken(i);
String nextText = nextToken.getText();
if (nextText.isBlank()) {
continue;
// users would like to be able to highlight return statements
String text = token.toString();
return !text.equals("return");
}
return nextText.equals("::");
}
private boolean shouldIgnoreSyntaxTokenHighlight(ClangToken token) {
if (!(token instanceof ClangSyntaxToken syntaxToken)) {
return false;
}
String string = syntaxToken.toString();
return ignoredMiddleMouseTokens.contains(string);
}
void addHighlighterHighlights(ClangDecompilerHighlighter highlighter,
Supplier<? extends Collection<ClangToken>> tokens, ColorProvider colorProvider) {
highlightController.addHighlighterHighlights(highlighter, tokens, colorProvider);
@ -771,7 +769,6 @@ public class DecompilerPanel extends JPanel implements FieldMouseListener, Field
int clickCount = ev.getClickCount();
int buttonState = ev.getButton();
if (buttonState == MouseEvent.BUTTON1) {
if (DockingUtils.isControlModifier(ev) && clickCount == 2) {
tryToGoto(location, field, ev, true);

View file

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