fix(gui): improve code area performance and line numbers repaint (#1167)
This commit is contained in:
@@ -66,11 +66,6 @@ public final class JavaClass implements JavaNode {
|
||||
return cls.getSmali();
|
||||
}
|
||||
|
||||
public synchronized void unload() {
|
||||
cls.unload();
|
||||
listsLoaded = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal API. Not Stable!
|
||||
*/
|
||||
|
||||
@@ -68,8 +68,6 @@ public class JadxWrapper {
|
||||
decompiler.getArgs().setRootDir(dir);
|
||||
decompiler.save(500, (done, total) -> progressMonitor.setProgress((int) (done * 100.0 / total)));
|
||||
progressMonitor.close();
|
||||
LOG.info("decompilation complete, freeing memory ...");
|
||||
decompiler.getClasses().forEach(JavaClass::unload);
|
||||
LOG.info("done");
|
||||
};
|
||||
new Thread(save).start();
|
||||
|
||||
@@ -57,11 +57,11 @@ public class JClass extends JLoadableNode {
|
||||
}
|
||||
|
||||
public synchronized void load() {
|
||||
if (!loaded) {
|
||||
cls.decompile();
|
||||
cls.unload();
|
||||
loaded = true;
|
||||
if (loaded) {
|
||||
return;
|
||||
}
|
||||
cls.decompile();
|
||||
loaded = true;
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -69,7 +69,6 @@ public class JClass extends JLoadableNode {
|
||||
cls.reload();
|
||||
loaded = true;
|
||||
update();
|
||||
cls.unload();
|
||||
}
|
||||
|
||||
public synchronized void update() {
|
||||
@@ -93,8 +92,7 @@ public class JClass extends JLoadableNode {
|
||||
|
||||
@Override
|
||||
public @Nullable ICodeInfo getCodeInfo() {
|
||||
load();
|
||||
return cls.getClassNode().getCode();
|
||||
return cls.getCodeInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -120,9 +120,6 @@ public class CodePanel extends JPanel {
|
||||
if (codeArea instanceof SmaliArea) {
|
||||
return;
|
||||
}
|
||||
LineNumbers numbers = new LineNumbers(codeArea);
|
||||
numbers.setUseSourceLines(isUseSourceLines());
|
||||
codeScrollPane.setRowHeaderView(numbers);
|
||||
initLineNumbers(isUseSourceLines());
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,8 @@ public class LineNumbers extends JPanel implements CaretListener {
|
||||
private static final int NUM_HEIGHT = Integer.MAX_VALUE - 1000000;
|
||||
private static final Map<?, ?> DESKTOP_HINTS = (Map<?, ?>) Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
|
||||
|
||||
private final AbstractCodeArea codeArea;
|
||||
private final transient AbstractCodeArea codeArea;
|
||||
private final transient ICodeInfo codeInfo;
|
||||
private boolean useSourceLines = true;
|
||||
|
||||
private transient int lastDigits;
|
||||
@@ -55,10 +56,11 @@ public class LineNumbers extends JPanel implements CaretListener {
|
||||
|
||||
private transient Insets textAreaInsets;
|
||||
private transient Rectangle visibleRect = new Rectangle();
|
||||
private transient ICodeInfo codeInfo;
|
||||
|
||||
public LineNumbers(AbstractCodeArea codeArea) {
|
||||
this.codeArea = codeArea;
|
||||
this.codeInfo = codeArea.getNode().getCodeInfo();
|
||||
|
||||
setFont(codeArea.getFont());
|
||||
SyntaxScheme syntaxScheme = codeArea.getSyntaxScheme();
|
||||
numberColor = syntaxScheme.getStyle(Token.LITERAL_NUMBER_DECIMAL_INT).foreground;
|
||||
@@ -110,8 +112,6 @@ public class LineNumbers extends JPanel implements CaretListener {
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void paintComponent(Graphics g) {
|
||||
codeInfo = codeArea.getNode().getCodeInfo();
|
||||
|
||||
visibleRect = g.getClipBounds(visibleRect);
|
||||
if (visibleRect == null) {
|
||||
visibleRect = getVisibleRect();
|
||||
@@ -127,7 +127,7 @@ public class LineNumbers extends JPanel implements CaretListener {
|
||||
|
||||
Dimension size = getSize();
|
||||
g.setColor(codeArea.getBackground());
|
||||
g.fillRect(0, 0, size.width, size.height);
|
||||
g.fillRect(0, visibleRect.y, size.width, visibleRect.height);
|
||||
|
||||
FontMetrics fontMetrics = codeArea.getFontMetrics(font);
|
||||
Insets insets = getInsets();
|
||||
|
||||
Reference in New Issue
Block a user