From 85ab095630fcfb30f0b767a81e15c6583963f7ee Mon Sep 17 00:00:00 2001 From: Skylot Date: Wed, 26 Feb 2014 23:01:00 +0400 Subject: [PATCH] core: fix class imports --- .../main/java/jadx/core/codegen/ClassGen.java | 9 +++++-- .../main/java/jadx/samples/TestImports.java | 25 +++++++++++++++++++ .../main/java/jadx/samples/otherpkg/A.java | 7 ++++++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 jadx-samples/src/main/java/jadx/samples/TestImports.java create mode 100644 jadx-samples/src/main/java/jadx/samples/otherpkg/A.java 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 34bd289da..220d582be 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java @@ -379,12 +379,17 @@ public class ClassGen { if (classInfo.getPackage().equals(useCls.getPackage()) && !classInfo.isInner()) { return shortName; } - if (classInfo.getPackage().equals(useCls.getPackage())) { - fullName = classInfo.getNameWithoutPackage(); + // don't add import if class not public (must be accessed using inheritance) + ClassNode classNode = cls.dex().resolveClass(classInfo); + if (classNode != null && !classNode.getAccessFlags().isPublic()) { + return shortName; } if (searchCollision(cls.dex(), useCls, shortName)) { return fullName; } + if (classInfo.getPackage().equals(useCls.getPackage())) { + fullName = classInfo.getNameWithoutPackage(); + } for (ClassInfo importCls : imports) { if (!importCls.equals(classInfo) && importCls.getShortName().equals(shortName)) { diff --git a/jadx-samples/src/main/java/jadx/samples/TestImports.java b/jadx-samples/src/main/java/jadx/samples/TestImports.java new file mode 100644 index 000000000..0e4b933e5 --- /dev/null +++ b/jadx-samples/src/main/java/jadx/samples/TestImports.java @@ -0,0 +1,25 @@ +package jadx.samples; + +import jadx.samples.otherpkg.A; + +/** + * Tests: + * - class B not imported + */ +public class TestImports extends AbstractTest { + + public class C extends A { + public B getB() { + return null; + } + } + + @Override + public boolean testRun() { + return true; + } + + public static void main(String[] args) { + new TestImports().testRun(); + } +} diff --git a/jadx-samples/src/main/java/jadx/samples/otherpkg/A.java b/jadx-samples/src/main/java/jadx/samples/otherpkg/A.java new file mode 100644 index 000000000..129f80c37 --- /dev/null +++ b/jadx-samples/src/main/java/jadx/samples/otherpkg/A.java @@ -0,0 +1,7 @@ +package jadx.samples.otherpkg; + +public class A { + protected class B { + + } +}