From 5d60f2cdf275c389066811d3c69858e9e9abc4cc Mon Sep 17 00:00:00 2001 From: Sergey Toshin Date: Sun, 14 Jan 2018 21:04:28 +0300 Subject: [PATCH] PR for issue #191 --- jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java | 9 +++++++++ jadx-core/src/main/java/jadx/api/IJadxArgs.java | 2 ++ jadx-core/src/main/java/jadx/api/JadxArgs.java | 11 +++++++++++ .../src/main/java/jadx/core/codegen/ClassGen.java | 10 ++++++---- .../src/main/java/jadx/core/codegen/MethodGen.java | 2 +- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java b/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java index 488def2fb..b52b3fafb 100644 --- a/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java +++ b/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java @@ -47,6 +47,10 @@ public class JadxCLIArgs implements IJadxArgs { @Parameter(names = {"--show-bad-code"}, description = "show inconsistent code (incorrectly decompiled)") protected boolean showInconsistentCode = false; + @Parameter(names = {"--no-imports"}, converter = InvertedBooleanConverter.class, + description = "disables use of imports, always writes entire package name") + protected boolean useImports = true; + @Parameter(names = "--no-replace-consts", converter = InvertedBooleanConverter.class, description = "don't replace constant value with matching constant field") protected boolean replaceConsts = true; @@ -246,6 +250,11 @@ public class JadxCLIArgs implements IJadxArgs { return showInconsistentCode; } + @Override + public boolean isUsingImports() { + return useImports; + } + @Override public boolean isVerbose() { return verbose; diff --git a/jadx-core/src/main/java/jadx/api/IJadxArgs.java b/jadx-core/src/main/java/jadx/api/IJadxArgs.java index 7b7111f56..ea8dbfcb0 100644 --- a/jadx-core/src/main/java/jadx/api/IJadxArgs.java +++ b/jadx-core/src/main/java/jadx/api/IJadxArgs.java @@ -14,6 +14,8 @@ public interface IJadxArgs { boolean isFallbackMode(); boolean isShowInconsistentCode(); + + boolean isUsingImports(); boolean isVerbose(); diff --git a/jadx-core/src/main/java/jadx/api/JadxArgs.java b/jadx-core/src/main/java/jadx/api/JadxArgs.java index 804b3bf49..80b853858 100644 --- a/jadx-core/src/main/java/jadx/api/JadxArgs.java +++ b/jadx-core/src/main/java/jadx/api/JadxArgs.java @@ -13,6 +13,8 @@ public class JadxArgs implements IJadxArgs { private boolean isVerbose = false; private boolean fallbackMode = false; private boolean showInconsistentCode = false; + + private boolean useImports = false; private boolean isSkipResources = false; private boolean isSkipSources = false; @@ -82,6 +84,15 @@ public class JadxArgs implements IJadxArgs { this.showInconsistentCode = showInconsistentCode; } + @Override + public boolean isUsingImports() { + return useImports; + } + + public void setUseImports(boolean useImports) { + this.useImports = useImports; + } + @Override public boolean isVerbose() { return isVerbose; 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 0216d24cd..f0c4983c3 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java @@ -52,23 +52,25 @@ public class ClassGen { private final ClassGen parentGen; private final AnnotationGen annotationGen; private final boolean fallback; + private final boolean useImports; private final boolean showInconsistentCode; private final Set imports = new HashSet<>(); private int clsDeclLine; public ClassGen(ClassNode cls, IJadxArgs jadxArgs) { - this(cls, null, jadxArgs.isFallbackMode(), jadxArgs.isShowInconsistentCode()); + this(cls, null, jadxArgs.isUsingImports(), jadxArgs.isFallbackMode(), jadxArgs.isShowInconsistentCode()); } public ClassGen(ClassNode cls, ClassGen parentClsGen) { - this(cls, parentClsGen, parentClsGen.fallback, parentClsGen.showInconsistentCode); + this(cls, parentClsGen, parentClsGen.useImports, parentClsGen.fallback, parentClsGen.showInconsistentCode); } - public ClassGen(ClassNode cls, ClassGen parentClsGen, boolean fallback, boolean showBadCode) { + public ClassGen(ClassNode cls, ClassGen parentClsGen, boolean useImports, boolean fallback, boolean showBadCode) { this.cls = cls; this.parentGen = parentClsGen; this.fallback = fallback; + this.useImports = useImports; this.showInconsistentCode = showBadCode; this.annotationGen = new AnnotationGen(cls, this); @@ -480,7 +482,7 @@ public class ClassGen { private String useClassInternal(ClassInfo useCls, ClassInfo extClsInfo) { String fullName = extClsInfo.getFullName(); - if (fallback) { + if (fallback || !useImports) { return fullName; } String shortName = extClsInfo.getShortName(); diff --git a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java index 0d6dad9d2..9083a668e 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java @@ -245,7 +245,7 @@ public class MethodGen { * Return fallback variant of method codegen */ public static MethodGen getFallbackMethodGen(MethodNode mth) { - ClassGen clsGen = new ClassGen(mth.getParentClass(), null, true, true); + ClassGen clsGen = new ClassGen(mth.getParentClass(), null, true, true, true); return new MethodGen(clsGen, mth); }