From d069928613ee38c64adc4f6984a54962e1b95c9e Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 2 Mar 2019 19:09:31 +0300 Subject: [PATCH] fix: check if synthetic class not yet processed but must be removed (#450) --- .../java/jadx/core/dex/visitors/ClassModifier.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java index a686839c3..b0d77f587 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java @@ -47,10 +47,7 @@ public class ClassModifier extends AbstractVisitor { for (ClassNode inner : cls.getInnerClasses()) { visit(inner); } - if (cls.getAccessFlags().isSynthetic() - && cls.getFields().isEmpty() - && cls.getMethods().isEmpty() - && cls.getInnerClasses().isEmpty()) { + if (isEmptySyntheticClass(cls)) { cls.add(AFlag.DONT_GENERATE); return false; } @@ -62,6 +59,13 @@ public class ClassModifier extends AbstractVisitor { return false; } + private static boolean isEmptySyntheticClass(ClassNode cls) { + return cls.getAccessFlags().isSynthetic() + && cls.getFields().isEmpty() + && cls.getMethods().isEmpty() + && cls.getInnerClasses().isEmpty(); + } + private void markAnonymousClass(ClassNode cls) { if (cls.isAnonymous()) { cls.add(AFlag.ANONYMOUS_CLASS); @@ -173,7 +177,7 @@ public class ClassModifier extends AbstractVisitor { return true; } } else { - if (argCls.contains(AFlag.DONT_GENERATE)) { + if (argCls.contains(AFlag.DONT_GENERATE) || isEmptySyntheticClass(argCls)) { return true; } }