fix(gui): workaround to force class decompilation in loading task (#2400)

This commit is contained in:
Skylot
2025-01-25 20:38:56 +00:00
parent 306547d499
commit 54fbbd9524
2 changed files with 10 additions and 7 deletions
@@ -122,8 +122,6 @@ public final class JavaClass implements JavaNode {
if (listsLoaded) {
return null;
}
listsLoaded = true;
ICodeInfo code;
if (cls.getState().isProcessComplete()) {
// already decompiled -> class internals loaded
@@ -131,7 +129,12 @@ public final class JavaClass implements JavaNode {
} else {
code = cls.decompile();
}
loadLists();
return code;
}
private void loadLists() {
listsLoaded = true;
JadxDecompiler rootDecompiler = getRootDecompiler();
int inClsCount = cls.getInnerClasses().size();
if (inClsCount != 0) {
@@ -139,7 +142,7 @@ public final class JavaClass implements JavaNode {
for (ClassNode inner : cls.getInnerClasses()) {
if (!inner.contains(AFlag.DONT_GENERATE)) {
JavaClass javaClass = rootDecompiler.convertClassNode(inner);
javaClass.load();
javaClass.loadLists();
list.add(javaClass);
}
}
@@ -150,7 +153,7 @@ public final class JavaClass implements JavaNode {
List<JavaClass> list = new ArrayList<>(inlinedClsCount);
for (ClassNode inner : cls.getInlinedClasses()) {
JavaClass javaClass = rootDecompiler.convertClassNode(inner);
javaClass.load();
javaClass.loadLists();
list.add(javaClass);
}
this.inlinedClasses = Collections.unmodifiableList(list);
@@ -178,7 +181,6 @@ public final class JavaClass implements JavaNode {
mths.sort(Comparator.comparing(JavaMethod::getName));
this.methods = Collections.unmodifiableList(mths);
}
return code;
}
JadxDecompiler getRootDecompiler() {
@@ -72,8 +72,9 @@ public class JClass extends JLoadableNode implements JRenameNode {
public SimpleTask getLoadTask() {
JClass rootClass = getRootClass();
return new SimpleTask(NLS.str("progress.decompile"),
() -> rootClass.getCls().decompile(),
rootClass::load);
() -> rootClass.getCls().getClassNode().decompile(), // run decompilation in background
rootClass::load // load class internals and update UI
);
}
private synchronized void load() {