From 49fa3209895f3fe71d175a9113e99db349d23fd8 Mon Sep 17 00:00:00 2001 From: Skylot Date: Thu, 29 Sep 2022 20:28:01 +0100 Subject: [PATCH] fix: handle possible concurrent exception in method codegen (#1685) --- .../main/java/jadx/core/codegen/ClassGen.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java index 4dd72086..d5de2750 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java @@ -322,19 +322,25 @@ public class ClassGen { if (inlineAttr == null || inlineAttr.notNeeded()) { return false; } - if (mth.getUseIn().isEmpty()) { - mth.add(AFlag.DONT_GENERATE); - return true; - } - List useInCompleted = mth.getUseIn().stream() - .filter(m -> m.getTopParentClass().getState().isProcessComplete()) - .collect(Collectors.toList()); - if (useInCompleted.isEmpty()) { - mth.add(AFlag.DONT_GENERATE); - return true; + try { + if (mth.getUseIn().isEmpty()) { + mth.add(AFlag.DONT_GENERATE); + return true; + } + List useInCompleted = mth.getUseIn().stream() + .filter(m -> m.getTopParentClass().getState().isProcessComplete()) + .collect(Collectors.toList()); + if (useInCompleted.isEmpty()) { + mth.add(AFlag.DONT_GENERATE); + return true; + } + mth.addDebugComment("Method not inlined, still used in: " + useInCompleted); + return false; + } catch (Exception e) { + // check failed => keep method + mth.addWarnComment("Failed to check method usage", e); + return false; } - mth.addDebugComment("Method not inlined, still used in: " + useInCompleted); - return false; } private boolean isMethodsPresents() { -- GitLab