From 7bb5c0a8593cda0e8c7a5d29df1d42d55bdbdd45 Mon Sep 17 00:00:00 2001 From: Skylot <118523+skylot@users.noreply.github.com> Date: Fri, 13 Sep 2024 21:25:11 +0100 Subject: [PATCH] fix: protect class deps from loading in different decompilation mode --- jadx-core/src/main/java/jadx/core/ProcessClass.java | 11 +++++++++++ .../src/main/java/jadx/core/dex/nodes/ClassNode.java | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/jadx-core/src/main/java/jadx/core/ProcessClass.java b/jadx-core/src/main/java/jadx/core/ProcessClass.java index 4b3965b03..702db2e0d 100644 --- a/jadx-core/src/main/java/jadx/core/ProcessClass.java +++ b/jadx-core/src/main/java/jadx/core/ProcessClass.java @@ -140,6 +140,17 @@ public class ProcessClass { } } + /** + * Generate code for class without processing its deps + */ + public @Nullable ICodeInfo forceGenerateCode(ClassNode cls) { + try { + return process(cls, true); + } catch (Throwable e) { + throw new JadxRuntimeException("Failed to generate code for class: " + cls.getFullName(), e); + } + } + public void initPasses(RootNode root) { for (IDexTreeVisitor pass : passes) { try { diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java index 07dbdaa74..fa97363ba 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java @@ -327,7 +327,8 @@ public class ClassNode extends NotificationAttrNode args.setDecompilationMode(mode); ProcessClass process = new ProcessClass(Jadx.getPassesList(args)); process.initPasses(root); - return process.generateCode(this); + ICodeInfo code = process.forceGenerateCode(this); + return Utils.getOrElse(code, ICodeInfo.EMPTY); } finally { args.setDecompilationMode(baseMode); unload();