fix: don't apply node positions and prevent eager loading for custom decompile modes (#2116)

This commit is contained in:
Skylot
2024-03-19 20:22:28 +00:00
parent bff00d101f
commit 463d2b90fa
4 changed files with 75 additions and 45 deletions
@@ -134,10 +134,22 @@ public class CodePanel extends JPanel {
codeScrollPane.setLineNumbersEnabled(true);
}
private static final LineNumberFormatter SIMPLE_LINE_FORMATTER = new LineNumberFormatter() {
@Override
public String format(int lineNumber) {
return Integer.toString(lineNumber);
}
@Override
public int getMaxLength(int maxLineNumber) {
return SourceLineFormatter.getNumberLength(maxLineNumber);
}
};
private synchronized void applyLineFormatter() {
LineNumberFormatter linesFormatter = useSourceLines
? new SourceLineFormatter(codeArea.getCodeInfo())
: LineNumberList.DEFAULT_LINE_NUMBER_FORMATTER;
: SIMPLE_LINE_FORMATTER;
codeScrollPane.getGutter().setLineNumberFormatter(linesFormatter);
}
@@ -170,15 +182,13 @@ public class CodePanel extends JPanel {
}
private void initLinesModeSwitch() {
if (canShowDebugLines()) {
MousePressedHandler lineModeSwitch = new MousePressedHandler(ev -> {
useSourceLines = !useSourceLines;
applyLineFormatter();
});
for (Component gutterComp : codeScrollPane.getGutter().getComponents()) {
if (gutterComp instanceof LineNumberList) {
gutterComp.addMouseListener(lineModeSwitch);
}
MousePressedHandler lineModeSwitch = new MousePressedHandler(ev -> {
useSourceLines = !useSourceLines;
applyLineFormatter();
});
for (Component gutterComp : codeScrollPane.getGutter().getComponents()) {
if (gutterComp instanceof LineNumberList) {
gutterComp.addMouseListener(lineModeSwitch);
}
}
}
@@ -32,8 +32,10 @@ public class SourceLineFormatter implements LineNumberFormatter {
.values().stream()
.mapToInt(Integer::intValue)
.max().orElse(1);
// maxLine can be anything including zero and negative numbers,
// so use safe 'stringify' method instead faster 'Math.log10'
return Integer.toString(maxLine).length();
return getNumberLength(maxLine);
}
public static int getNumberLength(int num) {
return num < 10 ? 1 : 1 + (int) Math.log10(num);
}
}