fix: don't apply node positions and prevent eager loading for custom decompile modes (#2116)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user