From 54fbbd9524bd1994b84c4798b17abcb0ec27075f Mon Sep 17 00:00:00 2001 From: Skylot <118523+skylot@users.noreply.github.com> Date: Sat, 25 Jan 2025 20:38:56 +0000 Subject: [PATCH] fix(gui): workaround to force class decompilation in loading task (#2400) --- jadx-core/src/main/java/jadx/api/JavaClass.java | 12 +++++++----- .../src/main/java/jadx/gui/treemodel/JClass.java | 5 +++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/jadx-core/src/main/java/jadx/api/JavaClass.java b/jadx-core/src/main/java/jadx/api/JavaClass.java index c1978e42266..d64de1e5bce 100644 --- a/jadx-core/src/main/java/jadx/api/JavaClass.java +++ b/jadx-core/src/main/java/jadx/api/JavaClass.java @@ -122,8 +122,6 @@ public ClassNode getClassNode() { if (listsLoaded) { return null; } - listsLoaded = true; - ICodeInfo code; if (cls.getState().isProcessComplete()) { // already decompiled -> class internals loaded @@ -131,7 +129,12 @@ public ClassNode getClassNode() { } 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 ClassNode getClassNode() { 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 ClassNode getClassNode() { List 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 ClassNode getClassNode() { mths.sort(Comparator.comparing(JavaMethod::getName)); this.methods = Collections.unmodifiableList(mths); } - return code; } JadxDecompiler getRootDecompiler() { diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java index 5e1fb2642e6..497e4169850 100644 --- a/jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java +++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java @@ -72,8 +72,9 @@ public void loadNode() { 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() {