diff --git a/.editorconfig b/.editorconfig index 9993b0b94..c773dd22b 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,14 +7,10 @@ insert_final_newline = true indent_style = tab tab_width = 4 -continuation_indent_size = 8 #IntelliJ Idea specific workaround +continuation_indent_size = 8 #IntelliJ Idea specific workaround charset = utf-8 trim_trailing_whitespace = true -max_line_length = 120 - -[*.xml] -indent_size = 1 [*.yml] indent_style = space diff --git a/.gitignore b/.gitignore index 71fea2b0e..eb707b1f3 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ out/ *.ipr *.iws .attach_pid* +*.hprof **/.DS_Store diff --git a/build.gradle b/build.gradle index 9025cdbe4..98703cbdf 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,9 @@ +import com.diffplug.spotless.LineEnding + plugins { id 'org.sonarqube' version '2.7' id 'com.github.ben-manes.versions' version '0.21.0' - id 'org.ec4j.editorconfig' version '0.0.3' + id "com.diffplug.gradle.spotless" version "3.21.1" } ext.jadxVersion = System.getenv('JADX_VERSION') ?: "dev" @@ -11,6 +13,7 @@ println("jadx version: ${jadxVersion}") allprojects { apply plugin: 'java' apply plugin: 'jacoco' + apply plugin: 'checkstyle' version = jadxVersion @@ -67,6 +70,11 @@ allprojects { html.enabled = true } } + + checkstyleMain { + // exclude all sources in samples module + exclude '**/samples/**' + } } sonarqube { @@ -76,14 +84,32 @@ sonarqube { } } -editorconfig { - excludes = ['gradle/' - , 'jadx-test-app/test-app' // ignore issues in submodule - , '**/out/' // IntelliJ Idea build dirs - , '**/certificate-test/' // binary test files (.RSA) - , '**/*.svg' - , '**/*.arsc' - ] +spotless { + java { + target fileTree(rootDir).matching { + include 'jadx-cli/src/**/java/**/*.java' + include 'jadx-core/src/**/java/**/*.java' + include 'jadx-gui/src/**/java/**/*.java' + } + + importOrderFile 'config/code-formatter/eclipse.importorder' + eclipse().configFile 'config/code-formatter/eclipse.xml' + removeUnusedImports() + + lineEndings(LineEnding.UNIX) + encoding("UTF-8") + trimTrailingWhitespace() + endWithNewline() + } + format 'misc', { + target '**/*.gradle', '**/*.md', '**/*.xml', '**/.gitignore', '**/.properties' + targetExclude "jadx-test-app/test-app/**", ".gradle/**", ".idea/**" + + lineEndings(LineEnding.UNIX) + encoding("UTF-8") + trimTrailingWhitespace() + endWithNewline() + } } dependencyUpdates.resolutionStrategy = { @@ -138,9 +164,6 @@ task cleanBuildDir(type: Delete) { delete buildDir } -check.dependsOn editorconfigCheck - test.dependsOn(samples) clean.dependsOn(cleanBuildDir) - diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml new file mode 100644 index 000000000..f8e1e97f5 --- /dev/null +++ b/config/checkstyle/checkstyle.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/code-formatter/eclipse.importorder b/config/code-formatter/eclipse.importorder new file mode 100644 index 000000000..85596140d --- /dev/null +++ b/config/code-formatter/eclipse.importorder @@ -0,0 +1,8 @@ +#Import Order +0=java +1=javax +2=org +3=com +4= +5=jadx +6=\# diff --git a/config/code-formatter/eclipse.xml b/config/code-formatter/eclipse.xml new file mode 100644 index 000000000..2ffee50a0 --- /dev/null +++ b/config/code-formatter/eclipse.xml @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java b/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java index 1131c5910..7113557b6 100644 --- a/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java +++ b/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java @@ -16,45 +16,46 @@ import com.beust.jcommander.Parameter; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.Appender; + import jadx.api.JadxArgs; -import jadx.api.JadxArgs.RENAME; +import jadx.api.JadxArgs.RenameEnum; import jadx.api.JadxDecompiler; import jadx.core.utils.exceptions.JadxException; import jadx.core.utils.files.FileUtils; public class JadxCLIArgs { - @Parameter(description = " (.apk, .dex, .jar or .class)") + @Parameter(description = " (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc)") protected List files = new ArrayList<>(1); - @Parameter(names = {"-d", "--output-dir"}, description = "output directory") + @Parameter(names = { "-d", "--output-dir" }, description = "output directory") protected String outDir; - @Parameter(names = {"-ds", "--output-dir-src"}, description = "output directory for sources") + @Parameter(names = { "-ds", "--output-dir-src" }, description = "output directory for sources") protected String outDirSrc; - @Parameter(names = {"-dr", "--output-dir-res"}, description = "output directory for resources") + @Parameter(names = { "-dr", "--output-dir-res" }, description = "output directory for resources") protected String outDirRes; - @Parameter(names = {"-r", "--no-res"}, description = "do not decode resources") + @Parameter(names = { "-r", "--no-res" }, description = "do not decode resources") protected boolean skipResources = false; - @Parameter(names = {"-s", "--no-src"}, description = "do not decompile source code") + @Parameter(names = { "-s", "--no-src" }, description = "do not decompile source code") protected boolean skipSources = false; - @Parameter(names = {"-e", "--export-gradle"}, description = "save as android gradle project") + @Parameter(names = { "-e", "--export-gradle" }, description = "save as android gradle project") protected boolean exportAsGradleProject = false; - @Parameter(names = {"-j", "--threads-count"}, description = "processing threads count") + @Parameter(names = { "-j", "--threads-count" }, description = "processing threads count") protected int threadsCount = JadxArgs.DEFAULT_THREADS_COUNT; - @Parameter(names = {"--show-bad-code"}, description = "show inconsistent code (incorrectly decompiled)") + @Parameter(names = { "--show-bad-code" }, description = "show inconsistent code (incorrectly decompiled)") protected boolean showInconsistentCode = false; - @Parameter(names = {"--no-imports"}, description = "disable use of imports, always write entire package name") + @Parameter(names = { "--no-imports" }, description = "disable use of imports, always write entire package name") protected boolean useImports = true; - @Parameter(names = {"--no-debug-info"}, description = "disable debug info") + @Parameter(names = { "--no-debug-info" }, description = "disable debug info") protected boolean debugInfo = true; @Parameter(names = { "--no-inline-anonymous" }, description = "disable anonymous classes inline") @@ -63,47 +64,54 @@ public class JadxCLIArgs { @Parameter(names = "--no-replace-consts", description = "don't replace constant value with matching constant field") protected boolean replaceConsts = true; - @Parameter(names = {"--escape-unicode"}, description = "escape non latin characters in strings (with \\u)") + @Parameter(names = { "--escape-unicode" }, description = "escape non latin characters in strings (with \\u)") protected boolean escapeUnicode = false; - @Parameter(names = {"--respect-bytecode-access-modifiers"}, description = "don't change original access modifiers") + @Parameter(names = { "--respect-bytecode-access-modifiers" }, description = "don't change original access modifiers") protected boolean respectBytecodeAccessModifiers = false; - @Parameter(names = {"--deobf"}, description = "activate deobfuscation") + @Parameter(names = { "--deobf" }, description = "activate deobfuscation") protected boolean deobfuscationOn = false; - @Parameter(names = {"--deobf-min"}, description = "min length of name, renamed if shorter") + @Parameter(names = { "--deobf-min" }, description = "min length of name, renamed if shorter") protected int deobfuscationMinLength = 3; - @Parameter(names = {"--deobf-max"}, description = "max length of name, renamed if longer") + @Parameter(names = { "--deobf-max" }, description = "max length of name, renamed if longer") protected int deobfuscationMaxLength = 64; - @Parameter(names = {"--deobf-rewrite-cfg"}, description = "force to save deobfuscation map") + @Parameter(names = { "--deobf-rewrite-cfg" }, description = "force to save deobfuscation map") protected boolean deobfuscationForceSave = false; - @Parameter(names = {"--deobf-use-sourcename"}, description = "use source file name as class name alias") + @Parameter(names = { "--deobf-use-sourcename" }, description = "use source file name as class name alias") protected boolean deobfuscationUseSourceNameAsAlias = true; - @Parameter(names = {"--cfg"}, description = "save methods control flow graph to dot file") + @Parameter(names = { "--cfg" }, description = "save methods control flow graph to dot file") protected boolean cfgOutput = false; - @Parameter(names = {"--raw-cfg"}, description = "save methods control flow graph (use raw instructions)") + @Parameter(names = { "--raw-cfg" }, description = "save methods control flow graph (use raw instructions)") protected boolean rawCfgOutput = false; - @Parameter(names = {"-f", "--fallback"}, description = "make simple dump (using goto instead of 'if', 'for', etc)") + @Parameter(names = { "-f", "--fallback" }, description = "make simple dump (using goto instead of 'if', 'for', etc)") protected boolean fallbackMode = false; - @Parameter(names = {"--rename-flags"}, description = "what to rename, comma-separated, 'case' for system case sensitivity, 'valid' for java identifiers, 'printable' characters, 'none' or 'all'", - converter = RenameConverter.class) - protected Set renameFlags = EnumSet.allOf(RENAME.class); + @Parameter( + names = { "--rename-flags" }, + description = "what to rename, comma-separated," + + " 'case' for system case sensitivity," + + " 'valid' for java identifiers," + + " 'printable' characters," + + " 'none' or 'all'", + converter = RenameConverter.class + ) + protected Set renameFlags = EnumSet.allOf(RenameEnum.class); - @Parameter(names = {"-v", "--verbose"}, description = "verbose output") + @Parameter(names = { "-v", "--verbose" }, description = "verbose output") protected boolean verbose = false; - @Parameter(names = {"--version"}, description = "print jadx version") + @Parameter(names = { "--version" }, description = "print jadx version") protected boolean printVersion = false; - @Parameter(names = {"-h", "--help"}, description = "print this help", help = true) + @Parameter(names = { "-h", "--help" }, description = "print this help", help = true) protected boolean printHelp = false; public boolean processArgs(String[] args) { @@ -139,7 +147,7 @@ public class JadxCLIArgs { } if (verbose) { ch.qos.logback.classic.Logger rootLogger = - (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); // remove INFO ThresholdFilter Appender appender = rootLogger.getAppender("STDOUT"); if (appender != null) { @@ -278,42 +286,42 @@ public class JadxCLIArgs { } public boolean isRenameCaseSensitive() { - return renameFlags.contains(RENAME.CASE); + return renameFlags.contains(RenameEnum.CASE); } public void setRenameCaseSensitive(boolean renameCase) { if (renameCase && !isRenameCaseSensitive()) { - renameFlags.add(RENAME.CASE); + renameFlags.add(RenameEnum.CASE); } else if (!renameCase && isRenameCaseSensitive()) { - renameFlags.remove(RENAME.CASE); + renameFlags.remove(RenameEnum.CASE); } } public boolean isRenameValid() { - return renameFlags.contains(RENAME.VALID); + return renameFlags.contains(RenameEnum.VALID); } public void setRenameValid(boolean renameValid) { if (renameValid && !isRenameValid()) { - renameFlags.add(RENAME.VALID); + renameFlags.add(RenameEnum.VALID); } else if (!renameValid && isRenameValid()) { - renameFlags.remove(RENAME.VALID); + renameFlags.remove(RenameEnum.VALID); } } public boolean isRenamePrintable() { - return renameFlags.contains(RENAME.PRINTABLE); + return renameFlags.contains(RenameEnum.PRINTABLE); } public void setRenamePrintable(boolean renamePrintable) { if (renamePrintable && !isRenamePrintable()) { - renameFlags.add(RENAME.PRINTABLE); + renameFlags.add(RenameEnum.PRINTABLE); } else if (!renamePrintable && isRenamePrintable()) { - renameFlags.remove(RENAME.PRINTABLE); + renameFlags.remove(RenameEnum.PRINTABLE); } } - static class RenameConverter implements IStringConverter> { + static class RenameConverter implements IStringConverter> { private final String paramName; @@ -322,23 +330,23 @@ public class JadxCLIArgs { } @Override - public Set convert(String value) { - Set set = new HashSet<>(); + public Set convert(String value) { + Set set = new HashSet<>(); if (value.equalsIgnoreCase("ALL")) { - set.add(RENAME.CASE); - set.add(RENAME.VALID); - set.add(RENAME.PRINTABLE); + set.add(RenameEnum.CASE); + set.add(RenameEnum.VALID); + set.add(RenameEnum.PRINTABLE); } else if (!value.equalsIgnoreCase("NONE")) { for (String s : value.split(",")) { try { - set.add(RENAME.valueOf(s.toUpperCase(Locale.ROOT))); + set.add(RenameEnum.valueOf(s.toUpperCase(Locale.ROOT))); } catch (IllegalArgumentException e) { - String values = "'" + RENAME.CASE - + "', '" + RENAME.VALID - + "' and '" + RENAME.PRINTABLE + '\''; + String values = "'" + RenameEnum.CASE + + "', '" + RenameEnum.VALID + + "' and '" + RenameEnum.PRINTABLE + '\''; throw new IllegalArgumentException( s + " is unknown for parameter " + paramName - + ", possible values are " + values.toLowerCase(Locale.ROOT)); + + ", possible values are " + values.toLowerCase(Locale.ROOT)); } } } diff --git a/jadx-cli/src/test/java/jadx/cli/JadxCLIArgsTest.java b/jadx-cli/src/test/java/jadx/cli/JadxCLIArgsTest.java index 4bd28622b..dded75155 100644 --- a/jadx-cli/src/test/java/jadx/cli/JadxCLIArgsTest.java +++ b/jadx-cli/src/test/java/jadx/cli/JadxCLIArgsTest.java @@ -4,8 +4,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static org.hamcrest.Matchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; public class JadxCLIArgsTest { diff --git a/jadx-cli/src/test/java/jadx/cli/RenameConverterTest.java b/jadx-cli/src/test/java/jadx/cli/RenameConverterTest.java index 961a49eac..e8c1784e0 100644 --- a/jadx-cli/src/test/java/jadx/cli/RenameConverterTest.java +++ b/jadx-cli/src/test/java/jadx/cli/RenameConverterTest.java @@ -1,17 +1,17 @@ package jadx.cli; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; - import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import jadx.api.JadxArgs.RENAME; +import jadx.api.JadxArgs.RenameEnum; import jadx.cli.JadxCLIArgs.RenameConverter; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + public class RenameConverterTest { private RenameConverter converter; @@ -23,16 +23,16 @@ public class RenameConverterTest { @Test public void all() { - Set set = converter.convert("all"); + Set set = converter.convert("all"); assertEquals(3, set.size()); - assertTrue(set.contains(RENAME.CASE)); - assertTrue(set.contains(RENAME.VALID)); - assertTrue(set.contains(RENAME.PRINTABLE)); + assertTrue(set.contains(RenameEnum.CASE)); + assertTrue(set.contains(RenameEnum.VALID)); + assertTrue(set.contains(RenameEnum.PRINTABLE)); } @Test public void none() { - Set set = converter.convert("none"); + Set set = converter.convert("none"); assertTrue(set.isEmpty()); } diff --git a/jadx-core/build.gradle b/jadx-core/build.gradle index 1100ca9f5..1f9b0ebb9 100644 --- a/jadx-core/build.gradle +++ b/jadx-core/build.gradle @@ -21,4 +21,3 @@ dependencies { testCompile 'com.google.guava:guava:27.1-jre' testCompile 'com.beust:jcommander:1.74' } - diff --git a/jadx-core/src/main/java/jadx/api/JadxArgs.java b/jadx-core/src/main/java/jadx/api/JadxArgs.java index 8a832c8cb..8610e3c0f 100644 --- a/jadx-core/src/main/java/jadx/api/JadxArgs.java +++ b/jadx-core/src/main/java/jadx/api/JadxArgs.java @@ -50,9 +50,11 @@ public class JadxArgs { private boolean fsCaseSensitive; - public enum RENAME {CASE, VALID, PRINTABLE} + public enum RenameEnum { + CASE, VALID, PRINTABLE + } - private Set renameFlags = EnumSet.allOf(RENAME.class); + private Set renameFlags = EnumSet.allOf(RenameEnum.class); public JadxArgs() { // use default options @@ -261,66 +263,62 @@ public class JadxArgs { } public boolean isRenameCaseSensitive() { - return renameFlags.contains(RENAME.CASE); + return renameFlags.contains(RenameEnum.CASE); } public void setRenameCaseSensitive(boolean renameCaseSensitive) { - if (renameCaseSensitive && !isRenameCaseSensitive()) { - renameFlags.add(RENAME.CASE); - } else if (!renameCaseSensitive && isRenameCaseSensitive()) { - renameFlags.remove(RENAME.CASE); - } + updateRenameFlag(renameCaseSensitive, RenameEnum.CASE); } public boolean isRenameValid() { - return renameFlags.contains(RENAME.VALID); + return renameFlags.contains(RenameEnum.VALID); } public void setRenameValid(boolean renameValid) { - if (renameValid && !isRenameValid()) { - renameFlags.add(RENAME.VALID); - } else if (!renameValid && isRenameValid()) { - renameFlags.remove(RENAME.VALID); - } + updateRenameFlag(renameValid, RenameEnum.VALID); } public boolean isRenamePrintable() { - return renameFlags.contains(RENAME.PRINTABLE); + return renameFlags.contains(RenameEnum.PRINTABLE); } public void setRenamePrintable(boolean renamePrintable) { - if (renamePrintable && !isRenamePrintable()) { - renameFlags.add(RENAME.PRINTABLE); - } else if (!renamePrintable && isRenamePrintable()) { - renameFlags.remove(RENAME.PRINTABLE); + updateRenameFlag(renamePrintable, RenameEnum.PRINTABLE); + } + + private void updateRenameFlag(boolean enabled, RenameEnum flag) { + if (enabled) { + renameFlags.add(flag); + } else { + renameFlags.remove(flag); } } @Override public String toString() { - return "JadxArgs{" + "inputFiles=" + inputFiles + - ", outDir=" + outDir + - ", outDirSrc=" + outDirSrc + - ", outDirRes=" + outDirRes + - ", threadsCount=" + threadsCount + - ", cfgOutput=" + cfgOutput + - ", rawCFGOutput=" + rawCFGOutput + - ", fallbackMode=" + fallbackMode + - ", showInconsistentCode=" + showInconsistentCode + - ", useImports=" + useImports + - ", skipResources=" + skipResources + - ", skipSources=" + skipSources + - ", deobfuscationOn=" + deobfuscationOn + - ", deobfuscationForceSave=" + deobfuscationForceSave + - ", useSourceNameAsClassAlias=" + useSourceNameAsClassAlias + - ", deobfuscationMinLength=" + deobfuscationMinLength + - ", deobfuscationMaxLength=" + deobfuscationMaxLength + - ", escapeUnicode=" + escapeUnicode + - ", replaceConsts=" + replaceConsts + - ", respectBytecodeAccModifiers=" + respectBytecodeAccModifiers + - ", exportAsGradleProject=" + exportAsGradleProject + - ", fsCaseSensitive=" + fsCaseSensitive + - ", renameFlags=" + renameFlags + - '}'; + return "JadxArgs{" + "inputFiles=" + inputFiles + + ", outDir=" + outDir + + ", outDirSrc=" + outDirSrc + + ", outDirRes=" + outDirRes + + ", threadsCount=" + threadsCount + + ", cfgOutput=" + cfgOutput + + ", rawCFGOutput=" + rawCFGOutput + + ", fallbackMode=" + fallbackMode + + ", showInconsistentCode=" + showInconsistentCode + + ", useImports=" + useImports + + ", skipResources=" + skipResources + + ", skipSources=" + skipSources + + ", deobfuscationOn=" + deobfuscationOn + + ", deobfuscationForceSave=" + deobfuscationForceSave + + ", useSourceNameAsClassAlias=" + useSourceNameAsClassAlias + + ", deobfuscationMinLength=" + deobfuscationMinLength + + ", deobfuscationMaxLength=" + deobfuscationMaxLength + + ", escapeUnicode=" + escapeUnicode + + ", replaceConsts=" + replaceConsts + + ", respectBytecodeAccModifiers=" + respectBytecodeAccModifiers + + ", exportAsGradleProject=" + exportAsGradleProject + + ", fsCaseSensitive=" + fsCaseSensitive + + ", renameFlags=" + renameFlags + + '}'; } } diff --git a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java index 08a41bdd4..9234e9fe1 100644 --- a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java +++ b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java @@ -1,11 +1,8 @@ package jadx.api; -import java.io.BufferedWriter; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStreamWriter; import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Path; @@ -15,20 +12,17 @@ import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import org.jf.baksmali.Adaptors.ClassDefinition; -import org.jf.baksmali.Baksmali; import org.jf.baksmali.BaksmaliOptions; import org.jf.dexlib2.DexFileFactory; import org.jf.dexlib2.Opcodes; import org.jf.dexlib2.dexbacked.DexBackedClassDef; import org.jf.dexlib2.dexbacked.DexBackedDexFile; -import org.jf.dexlib2.iface.ClassDef; import org.jf.util.IndentingWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,15 +38,15 @@ import jadx.core.dex.visitors.IDexTreeVisitor; import jadx.core.dex.visitors.SaveCode; import jadx.core.export.ExportGradleProject; import jadx.core.utils.exceptions.JadxRuntimeException; -import jadx.core.utils.files.DexFile; -import jadx.core.utils.files.FileUtils; import jadx.core.utils.files.InputFile; import jadx.core.xmlgen.BinaryXMLParser; import jadx.core.xmlgen.ResourcesSaver; /** * Jadx API usage example: - *

+ *
+ * 
+ * 
  * JadxArgs args = new JadxArgs();
  * args.getInputFiles().add(new File("test.apk"));
  * args.setOutDir(new File("jadx-test-output"));
@@ -60,14 +54,18 @@ import jadx.core.xmlgen.ResourcesSaver;
  * JadxDecompiler jadx = new JadxDecompiler(args);
  * jadx.load();
  * jadx.save();
- * 
+ *
+ *
*

* Instead of 'save()' you can iterate over decompiled classes: - *


+ *
+ * 
+ * 
  *  for(JavaClass cls : jadx.getClasses()) {
  *      System.out.println(cls.getCode());
  *  }
- * 
+ *
+ *
*/ public final class JadxDecompiler { private static final Logger LOG = LoggerFactory.getLogger(JadxDecompiler.class); diff --git a/jadx-core/src/main/java/jadx/api/ResourcesLoader.java b/jadx-core/src/main/java/jadx/api/ResourcesLoader.java index d93fe5413..4c280119c 100644 --- a/jadx-core/src/main/java/jadx/api/ResourcesLoader.java +++ b/jadx-core/src/main/java/jadx/api/ResourcesLoader.java @@ -90,7 +90,7 @@ public final class ResourcesLoader { } private static ResContainer loadContent(JadxDecompiler jadxRef, ResourceFile rf, - InputStream inputStream) throws IOException { + InputStream inputStream) throws IOException { switch (rf.getType()) { case MANIFEST: case XML: diff --git a/jadx-core/src/main/java/jadx/core/clsp/ClsSet.java b/jadx-core/src/main/java/jadx/core/clsp/ClsSet.java index 3b772a6a9..230822fe0 100644 --- a/jadx-core/src/main/java/jadx/core/clsp/ClsSet.java +++ b/jadx-core/src/main/java/jadx/core/clsp/ClsSet.java @@ -49,7 +49,9 @@ public class ClsSet { private static final NClass[] EMPTY_NCLASS_ARRAY = new NClass[0]; - private enum ARG_TYPE {WILDCARD, GENERIC, GENERIC_TYPE, OBJECT, ARRAY, PRIMITIVE} + private enum TypeEnum { + WILDCARD, GENERIC, GENERIC_TYPE, OBJECT, ARRAY, PRIMITIVE + } private NClass[] classes; @@ -97,12 +99,9 @@ public class ClsSet { List args = new ArrayList<>(); boolean genericArg = false; - for (RegisterArg r: m.getArguments(false)) { + for (RegisterArg r : m.getArguments(false)) { ArgType argType = r.getType(); - if (argType.isGeneric()) { - args.add(argType); - genericArg = true; - } else if (argType.isGenericType()) { + if (argType.isGeneric() || argType.isGenericType()) { args.add(argType); genericArg = true; } else { @@ -121,8 +120,8 @@ public class ClsSet { methods.add(new NMethod( m.getMethodInfo().getShortId(), args.isEmpty() - ? new ArgType[0] - : args.toArray(new ArgType[args.size()]), + ? new ArgType[0] + : args.toArray(new ArgType[args.size()]), retType, varArgs)); } @@ -229,7 +228,7 @@ public class ClsSet { out.writeByte(argCount); // last argument first - for (int i = argTypes.length - 1; i >=0 ; i--) { + for (int i = argTypes.length - 1; i >= 0; i--) { ArgType argType = argTypes[i]; if (argType != null) { out.writeByte(i); @@ -249,14 +248,14 @@ public class ClsSet { private static void writeArgType(DataOutputStream out, ArgType argType, Map names) throws IOException { if (argType.getWildcardType() != null) { - out.writeByte(ARG_TYPE.WILDCARD.ordinal()); + out.writeByte(TypeEnum.WILDCARD.ordinal()); int bounds = argType.getWildcardBounds(); out.writeByte(bounds); if (bounds != 0) { writeArgType(out, argType.getWildcardType(), names); } } else if (argType.isGeneric()) { - out.writeByte(ARG_TYPE.GENERIC.ordinal()); + out.writeByte(TypeEnum.GENERIC.ordinal()); out.writeInt(names.get(argType.getObject()).getId()); ArgType[] types = argType.getGenericTypes(); if (types == null) { @@ -268,16 +267,16 @@ public class ClsSet { } } } else if (argType.isGenericType()) { - out.writeByte(ARG_TYPE.GENERIC_TYPE.ordinal()); + out.writeByte(TypeEnum.GENERIC_TYPE.ordinal()); writeString(out, argType.getObject()); } else if (argType.isObject()) { - out.writeByte(ARG_TYPE.OBJECT.ordinal()); + out.writeByte(TypeEnum.OBJECT.ordinal()); out.writeInt(names.get(argType.getObject()).getId()); } else if (argType.isArray()) { - out.writeByte(ARG_TYPE.ARRAY.ordinal()); + out.writeByte(TypeEnum.ARRAY.ordinal()); writeArgType(out, argType.getArrayElement(), names); } else if (argType.isPrimitive()) { - out.writeByte(ARG_TYPE.PRIMITIVE.ordinal()); + out.writeByte(TypeEnum.PRIMITIVE.ordinal()); out.writeByte(argType.getPrimitiveType().getShortName().charAt(0)); } else { throw new JadxRuntimeException("Cannot save type: " + argType); @@ -367,7 +366,7 @@ public class ClsSet { private ArgType readArgType(DataInputStream in) throws IOException { int ordinal = in.readByte(); - switch(ARG_TYPE.values()[ordinal]) { + switch (TypeEnum.values()[ordinal]) { case WILDCARD: int bounds = in.readByte(); return bounds == 0 @@ -394,25 +393,25 @@ public class ClsSet { return ArgType.array(readArgType(in)); case PRIMITIVE: int shortName = in.readByte(); - switch(shortName) { - case 'Z': - return ArgType.BOOLEAN; - case 'C': - return ArgType.CHAR; - case 'B': - return ArgType.BYTE; - case 'S': - return ArgType.SHORT; - case 'I': - return ArgType.INT; - case 'F': - return ArgType.FLOAT; - case 'J': - return ArgType.LONG; - case 'D': - return ArgType.DOUBLE; - default: - return ArgType.VOID; + switch (shortName) { + case 'Z': + return ArgType.BOOLEAN; + case 'C': + return ArgType.CHAR; + case 'B': + return ArgType.BYTE; + case 'S': + return ArgType.SHORT; + case 'I': + return ArgType.INT; + case 'F': + return ArgType.FLOAT; + case 'J': + return ArgType.LONG; + case 'D': + return ArgType.DOUBLE; + default: + return ArgType.VOID; } default: throw new JadxRuntimeException("Unsupported Arg Type: " + ordinal); diff --git a/jadx-core/src/main/java/jadx/core/codegen/AnnotationGen.java b/jadx-core/src/main/java/jadx/core/codegen/AnnotationGen.java index e7bb32d33..9a582f6eb 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/AnnotationGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/AnnotationGen.java @@ -84,7 +84,7 @@ public class AnnotationGen { Map vl = a.getValues(); if (!vl.isEmpty()) { code.add('('); - for (Iterator> it = vl.entrySet().iterator(); it.hasNext(); ) { + for (Iterator> it = vl.entrySet().iterator(); it.hasNext();) { Entry e = it.next(); String paramName = getParamName(annCls, e.getKey()); if (paramName.equals("value") && vl.size() == 1) { @@ -119,7 +119,7 @@ public class AnnotationGen { if (an != null) { Object exs = an.getDefaultValue(); code.add(" throws "); - for (Iterator it = ((List) exs).iterator(); it.hasNext(); ) { + for (Iterator it = ((List) exs).iterator(); it.hasNext();) { ArgType ex = it.next(); classGen.useType(code, ex); if (it.hasNext()) { 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 46043879d..e380fe2a2 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java @@ -162,7 +162,7 @@ public class ClassGen { } else { clsCode.add("implements "); } - for (Iterator it = cls.getInterfaces().iterator(); it.hasNext(); ) { + for (Iterator it = cls.getInterfaces().iterator(); it.hasNext();) { ArgType interf = it.next(); useClass(clsCode, interf); if (it.hasNext()) { @@ -194,7 +194,7 @@ public class ClassGen { } if (list != null && !list.isEmpty()) { code.add(" extends "); - for (Iterator it = list.iterator(); it.hasNext(); ) { + for (Iterator it = list.iterator(); it.hasNext();) { ArgType g = it.next(); if (g.isGenericType()) { code.add(g.getObject()); @@ -345,7 +345,7 @@ public class ClassGen { List warns = node.getAll(AType.JADX_WARN); if (!warns.isEmpty()) { warns.stream().distinct().sorted() - .forEach(warn -> code.startLine("/* JADX WARNING: ").addMultiLine(warn).add(" */")); + .forEach(warn -> code.startLine("/* JADX WARNING: ").addMultiLine(warn).add(" */")); } } @@ -399,7 +399,7 @@ public class ClassGen { return; } InsnGen igen = null; - for (Iterator it = enumFields.getFields().iterator(); it.hasNext(); ) { + for (Iterator it = enumFields.getFields().iterator(); it.hasNext();) { EnumField f = it.next(); code.startLine(f.getField().getAlias()); ConstructorInsn constrInsn = f.getConstrInsn(); diff --git a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java index 28ef6503c..9311c911c 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java @@ -1,7 +1,5 @@ package jadx.core.codegen; -import static jadx.core.utils.android.AndroidResourcesUtils.handleAppResField; - import java.util.ArrayList; import java.util.EnumSet; import java.util.Iterator; @@ -56,6 +54,8 @@ import jadx.core.utils.RegionUtils; import jadx.core.utils.exceptions.CodegenException; import jadx.core.utils.exceptions.JadxRuntimeException; +import static jadx.core.utils.android.AndroidResourcesUtils.handleAppResField; + public class InsnGen { private static final Logger LOG = LoggerFactory.getLogger(InsnGen.class); @@ -234,8 +234,8 @@ public class InsnGen { code.add(';'); } } - } catch (Exception th) { - throw new CodegenException(mth, "Error generate insn: " + insn, th); + } catch (Exception e) { + throw new CodegenException(mth, "Error generate insn: " + insn, e); } } @@ -416,7 +416,7 @@ public class InsnGen { if (wrap) { code.add('('); } - for (Iterator it = insn.getArguments().iterator(); it.hasNext(); ) { + for (Iterator it = insn.getArguments().iterator(); it.hasNext();) { addArg(code, it.next()); if (it.hasNext()) { code.add(" + "); @@ -701,7 +701,7 @@ public class InsnGen { } void generateMethodArguments(CodeWriter code, InsnNode insn, int startArgNum, - @Nullable MethodNode callMth) throws CodegenException { + @Nullable MethodNode callMth) throws CodegenException { int k = startArgNum; if (callMth != null && callMth.contains(AFlag.SKIP_FIRST_ARG)) { k++; 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 2625591be..f9a14c5b8 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java @@ -3,10 +3,11 @@ package jadx.core.codegen; import java.util.Iterator; import java.util.List; -import com.android.dx.rop.code.AccessFlags; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.android.dx.rop.code.AccessFlags; + import jadx.core.Consts; import jadx.core.dex.attributes.AFlag; import jadx.core.dex.attributes.AType; diff --git a/jadx-core/src/main/java/jadx/core/codegen/NameGen.java b/jadx-core/src/main/java/jadx/core/codegen/NameGen.java index 80574edce..a2da72f7b 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/NameGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/NameGen.java @@ -50,8 +50,7 @@ public class NameGen { "java.lang.Long", "l", "java.lang.Double", "d", "java.lang.StringBuilder", "sb", - "java.lang.Exception", "exc" - ); + "java.lang.Exception", "exc"); } public NameGen(MethodNode mth, boolean fallback) { diff --git a/jadx-core/src/main/java/jadx/core/deobf/DeobfPresets.java b/jadx-core/src/main/java/jadx/core/deobf/DeobfPresets.java index 13fccdbb7..8bcc3251b 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/DeobfPresets.java +++ b/jadx-core/src/main/java/jadx/core/deobf/DeobfPresets.java @@ -1,7 +1,5 @@ package jadx.core.deobf; -import static java.nio.charset.StandardCharsets.UTF_8; - import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; @@ -19,6 +17,8 @@ import jadx.core.dex.info.ClassInfo; import jadx.core.dex.info.FieldInfo; import jadx.core.dex.info.MethodInfo; +import static java.nio.charset.StandardCharsets.UTF_8; + class DeobfPresets { private static final Logger LOG = LoggerFactory.getLogger(DeobfPresets.class); diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index b01bae568..210f0b40d 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -287,7 +287,8 @@ public class Deobfuscator { * * @param fullPkgName full package name * @param create if {@code true} then will create all absent objects - * @return package node object or {@code null} if no package found and create set to {@code false} + * @return package node object or {@code null} if no package found and create set to + * {@code false} */ private PackageNode getPackageNode(String fullPkgName, boolean create) { if (fullPkgName.isEmpty() || fullPkgName.equals(CLASS_NAME_SEPARATOR)) { diff --git a/jadx-core/src/main/java/jadx/core/deobf/NameMapper.java b/jadx-core/src/main/java/jadx/core/deobf/NameMapper.java index 021ca9655..20cf57389 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/NameMapper.java +++ b/jadx-core/src/main/java/jadx/core/deobf/NameMapper.java @@ -69,9 +69,7 @@ public class NameMapper { "try", "void", "volatile", - "while" - ) - ); + "while")); public static boolean isReserved(String str) { return RESERVED_NAMES.contains(str); @@ -113,15 +111,19 @@ public class NameMapper { /** * Return modified string with removed: - *

    - *
  • not printable chars (including unicode) - *
  • chars not valid for java identifier part - *

+ *

+ *

    + *
  • not printable chars (including unicode) + *
  • chars not valid for java identifier part + *
+ *

* Note: this 'middle' method must be used with prefixed string: - *

    - *
  • can leave invalid chars for java identifier start (i.e numbers) - *
  • result not checked for reserved words - *

+ *

+ *

    + *
  • can leave invalid chars for java identifier start (i.e numbers) + *
  • result not checked for reserved words + *
+ *

*/ public static String removeInvalidCharsMiddle(String name) { if (isValidIdentifier(name)) { diff --git a/jadx-core/src/main/java/jadx/core/dex/info/ClassInfo.java b/jadx-core/src/main/java/jadx/core/dex/info/ClassInfo.java index 9d1b8cffa..3c8f4cb86 100644 --- a/jadx-core/src/main/java/jadx/core/dex/info/ClassInfo.java +++ b/jadx-core/src/main/java/jadx/core/dex/info/ClassInfo.java @@ -106,6 +106,7 @@ public final class ClassInfo implements Comparable { this.alias = newAlias; } } + public boolean isRenamed() { return alias != this; } diff --git a/jadx-core/src/main/java/jadx/core/dex/instructions/InsnDecoder.java b/jadx-core/src/main/java/jadx/core/dex/instructions/InsnDecoder.java index 476ed9a1d..eb5e49f2c 100644 --- a/jadx-core/src/main/java/jadx/core/dex/instructions/InsnDecoder.java +++ b/jadx-core/src/main/java/jadx/core/dex/instructions/InsnDecoder.java @@ -120,14 +120,13 @@ public class InsnDecoder { constStrInsn.setResult(InsnArg.reg(insn, 0, ArgType.STRING)); return constStrInsn; - case Opcodes.CONST_CLASS: - { + case Opcodes.CONST_CLASS: { ArgType clsType = dex.getType(insn.getIndex()); InsnNode constClsInsn = new ConstClassNode(clsType); constClsInsn.setResult( InsnArg.reg(insn, 0, ArgType.generic(Consts.CLASS_CLASS, clsType))); return constClsInsn; - } + } case Opcodes.MOVE: case Opcodes.MOVE_16: diff --git a/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java b/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java index dc11143d9..228a7532e 100644 --- a/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java +++ b/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java @@ -233,9 +233,9 @@ public abstract class ArgType { /** * Return wildcard bounds: *

    - *
  • 1 for upper bound (? extends A)
  • - *
  • 0 no bounds (?)
  • - *
  • -1 for lower bound (? super A)
  • + *
  • 1 for upper bound (? extends A)
  • + *
  • 0 no bounds (?)
  • + *
  • -1 for lower bound (? super A)
  • *
*/ @Override @@ -306,7 +306,7 @@ public abstract class ArgType { } private static final class ArrayArg extends KnownType { - private static final PrimitiveType[] ARRAY_POSSIBLES = new PrimitiveType[]{PrimitiveType.ARRAY}; + private static final PrimitiveType[] ARRAY_POSSIBLES = new PrimitiveType[] { PrimitiveType.ARRAY }; private final ArgType arrayElement; public ArrayArg(ArgType arrayElement) { diff --git a/jadx-core/src/main/java/jadx/core/dex/instructions/args/InsnArg.java b/jadx-core/src/main/java/jadx/core/dex/instructions/args/InsnArg.java index 7daa6926e..3e578d530 100644 --- a/jadx-core/src/main/java/jadx/core/dex/instructions/args/InsnArg.java +++ b/jadx-core/src/main/java/jadx/core/dex/instructions/args/InsnArg.java @@ -3,11 +3,12 @@ package jadx.core.dex.instructions.args; import java.util.ArrayList; import java.util.List; -import com.android.dx.io.instructions.DecodedInstruction; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.android.dx.io.instructions.DecodedInstruction; + import jadx.core.dex.attributes.AFlag; import jadx.core.dex.nodes.InsnNode; import jadx.core.utils.InsnUtils; 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 3ea936271..bc54922d5 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 @@ -1,7 +1,5 @@ package jadx.core.dex.nodes; -import static jadx.core.dex.nodes.ProcessState.UNLOADED; - import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -38,6 +36,8 @@ import jadx.core.dex.nodes.parser.StaticValuesParser; import jadx.core.utils.exceptions.DecodeException; import jadx.core.utils.exceptions.JadxRuntimeException; +import static jadx.core.dex.nodes.ProcessState.UNLOADED; + public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode { private static final Logger LOG = LoggerFactory.getLogger(ClassNode.class); @@ -355,7 +355,8 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode { /** * Return first method by original short name - * Note: methods are not unique by name (class can have several methods with same name but different signature) + * Note: methods are not unique by name (class can have several methods with same name but different + * signature) */ @Nullable public MethodNode searchMethodByShortName(String name) { diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java index cb64ad581..3113570b1 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java @@ -7,6 +7,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import com.android.dex.ClassData; import com.android.dex.ClassData.Method; import com.android.dex.ClassDef; @@ -17,8 +20,6 @@ import com.android.dex.FieldId; import com.android.dex.MethodId; import com.android.dex.ProtoId; import com.android.dex.TypeList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import jadx.core.dex.info.ClassInfo; import jadx.core.dex.info.FieldInfo; diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/IDexNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/IDexNode.java index 762525db0..7e7dee5a5 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/IDexNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/IDexNode.java @@ -8,4 +8,3 @@ public interface IDexNode { RootNode root(); } - diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java index dcfb1a759..e774c17cc 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java @@ -7,15 +7,16 @@ import java.util.List; import java.util.Map; import java.util.Set; -import com.android.dex.ClassData.Method; -import com.android.dex.Code; -import com.android.dex.Code.CatchHandler; -import com.android.dex.Code.Try; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.android.dex.ClassData.Method; +import com.android.dex.Code; +import com.android.dex.Code.CatchHandler; +import com.android.dex.Code.Try; + import jadx.core.dex.attributes.AFlag; import jadx.core.dex.attributes.AType; import jadx.core.dex.attributes.nodes.JumpInfo; @@ -154,7 +155,7 @@ public class MethodNode extends LineAttrNode implements ILoadable, ICodeNode { for (RegisterArg arg : list) { if (arg.getRegNum() >= regsCount) { throw new JadxRuntimeException("Incorrect register number in instruction: " + insnNode - + ", expected to be less than " + regsCount); + + ", expected to be less than " + regsCount); } } } diff --git a/jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfCondition.java b/jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfCondition.java index ff859114e..0293a4a21 100644 --- a/jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfCondition.java +++ b/jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfCondition.java @@ -234,26 +234,25 @@ public final class IfCondition { if (arithOp == ArithOp.OR || arithOp == ArithOp.AND) { IfOp ifOp = c.getInsn().getOp(); boolean isTrue = ifOp == IfOp.NE && lit == 0 - || ifOp == IfOp.EQ && lit == 1; + || ifOp == IfOp.EQ && lit == 1; IfOp op = isTrue ? IfOp.NE : IfOp.EQ; - Mode mode = isTrue && arithOp == ArithOp.OR || - !isTrue && arithOp == ArithOp.AND ? Mode.OR : Mode.AND; + Mode mode = isTrue && arithOp == ArithOp.OR + || !isTrue && arithOp == ArithOp.AND ? Mode.OR : Mode.AND; IfNode if1 = new IfNode(op, -1, wrapInsn.getArg(0), LiteralArg.FALSE); IfNode if2 = new IfNode(op, -1, wrapInsn.getArg(1), LiteralArg.FALSE); return new IfCondition(mode, - Arrays.asList(new IfCondition(new Compare(if1)), - new IfCondition(new Compare(if2)))); + Arrays.asList(new IfCondition(new Compare(if1)), + new IfCondition(new Compare(if2)))); } } - break; + break; - default: - break; + default: + break; } - return null; } @@ -300,7 +299,7 @@ public final class IfCondition { String op = mode == Mode.OR ? " || " : " && "; StringBuilder sb = new StringBuilder(); sb.append('('); - for (Iterator it = args.iterator(); it.hasNext(); ) { + for (Iterator it = args.iterator(); it.hasNext();) { IfCondition arg = it.next(); sb.append(arg); if (it.hasNext()) { @@ -326,7 +325,7 @@ public final class IfCondition { return false; } return Objects.equals(args, other.args) - && Objects.equals(compare, other.compare); + && Objects.equals(compare, other.compare); } @Override diff --git a/jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfInfo.java b/jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfInfo.java index aef5c7a5c..b7df8e494 100644 --- a/jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfInfo.java +++ b/jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfInfo.java @@ -24,7 +24,7 @@ public final class IfInfo { } private IfInfo(IfCondition condition, BlockNode thenBlock, BlockNode elseBlock, - Set mergedBlocks, Set skipBlocks) { + Set mergedBlocks, Set skipBlocks) { this.condition = condition; this.thenBlock = thenBlock; this.elseBlock = elseBlock; diff --git a/jadx-core/src/main/java/jadx/core/dex/trycatch/ExceptionHandler.java b/jadx-core/src/main/java/jadx/core/dex/trycatch/ExceptionHandler.java index aa8106a5e..4da8cc396 100644 --- a/jadx-core/src/main/java/jadx/core/dex/trycatch/ExceptionHandler.java +++ b/jadx-core/src/main/java/jadx/core/dex/trycatch/ExceptionHandler.java @@ -147,14 +147,14 @@ public class ExceptionHandler { return false; } ExceptionHandler that = (ExceptionHandler) o; - return handleOffset == that.handleOffset && - catchTypes.equals(that.catchTypes) && - Objects.equals(tryBlock, that.tryBlock); + return handleOffset == that.handleOffset + && catchTypes.equals(that.catchTypes) + && Objects.equals(tryBlock, that.tryBlock); } @Override public int hashCode() { - return Objects.hash(catchTypes, handleOffset /*, tryBlock*/); + return Objects.hash(catchTypes, handleOffset /* , tryBlock */); } public String catchTypeStr() { diff --git a/jadx-core/src/main/java/jadx/core/dex/trycatch/TryCatchBlock.java b/jadx-core/src/main/java/jadx/core/dex/trycatch/TryCatchBlock.java index 82405e7cc..65ed41b3b 100644 --- a/jadx-core/src/main/java/jadx/core/dex/trycatch/TryCatchBlock.java +++ b/jadx-core/src/main/java/jadx/core/dex/trycatch/TryCatchBlock.java @@ -53,7 +53,7 @@ public class TryCatchBlock { } public void removeHandler(MethodNode mth, ExceptionHandler handler) { - for (Iterator it = handlers.iterator(); it.hasNext(); ) { + for (Iterator it = handlers.iterator(); it.hasNext();) { ExceptionHandler h = it.next(); if (h == handler) { unbindHandler(h); @@ -85,7 +85,7 @@ public class TryCatchBlock { private void removeWholeBlock(MethodNode mth) { // self destruction - for (Iterator it = handlers.iterator(); it.hasNext(); ) { + for (Iterator it = handlers.iterator(); it.hasNext();) { ExceptionHandler h = it.next(); unbindHandler(h); it.remove(); diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/AbstractVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/AbstractVisitor.java index 821668b9f..1b935600c 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/AbstractVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/AbstractVisitor.java @@ -5,7 +5,7 @@ import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.nodes.RootNode; import jadx.core.utils.exceptions.JadxException; -public class AbstractVisitor implements IDexTreeVisitor { +public abstract class AbstractVisitor implements IDexTreeVisitor { @Override public void init(RootNode root) throws JadxException { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java index b7a553560..d1f9b521b 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java @@ -34,7 +34,7 @@ import jadx.core.utils.exceptions.JadxException; @JadxVisitor( name = "EnumVisitor", desc = "Restore enum classes", - runAfter = {CodeShrinkVisitor.class, ModVisitor.class} + runAfter = { CodeShrinkVisitor.class, ModVisitor.class } ) public class EnumVisitor extends AbstractVisitor { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/MarkFinallyVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/MarkFinallyVisitor.java index 87742c789..9675736b9 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/MarkFinallyVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/MarkFinallyVisitor.java @@ -59,8 +59,8 @@ public class MarkFinallyVisitor extends AbstractVisitor { visitor.init(mth.root()); DepthTraversal.visit(visitor, mth); } - } catch (Exception ee) { - LOG.error("Undo finally extract failed, mth: {}", mth, e); + } catch (Exception excInner) { + LOG.error("Undo finally extract failed, mth: {}", mth, excInner); } } } @@ -343,7 +343,7 @@ public class MarkFinallyVisitor extends AbstractVisitor { return null; } // TODO: add additional slices checks - // and try to extract common part if found difference + // and try to extract common part if found difference } else { for (InsnNode finallyInsn : finallyInsns) { finallySlice.addInsn(finallyInsn, finallyBlock); @@ -369,7 +369,7 @@ public class MarkFinallyVisitor extends AbstractVisitor { } private static boolean checkBlocksTree(BlockNode dupBlock, BlockNode finallyBlock, - InsnsSlice dupSlice, FinallyExtractInfo extractInfo) { + InsnsSlice dupSlice, FinallyExtractInfo extractInfo) { InsnsSlice finallySlice = extractInfo.getFinallyInsnsSlice(); List finallyCS = finallyBlock.getCleanSuccessors(); diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java index ba1cfbd15..7ced9677f 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java @@ -1,7 +1,5 @@ package jadx.core.dex.visitors; -import static jadx.core.utils.BlockUtils.replaceInsn; - import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -48,6 +46,8 @@ import jadx.core.utils.InsnRemover; import jadx.core.utils.InsnUtils; import jadx.core.utils.exceptions.JadxRuntimeException; +import static jadx.core.utils.BlockUtils.replaceInsn; + /** * Visitor for modify method instructions * (remove, replace, process exception handlers) @@ -168,8 +168,9 @@ public class ModVisitor extends AbstractVisitor { IfCondition condition = IfCondition.fromIfNode(ifNode); InsnArg zero = new LiteralArg(0, type); InsnArg one = new LiteralArg( - type == ArgType.DOUBLE ? Double.doubleToLongBits(1) : - type == ArgType.FLOAT ? Float.floatToIntBits(1) : 1, type); + type == ArgType.DOUBLE ? Double.doubleToLongBits(1) + : type == ArgType.FLOAT ? Float.floatToIntBits(1) : 1, + type); TernaryInsn ternary = new TernaryInsn(condition, insn.getResult(), one, zero); replaceInsn(block, i, ternary); } @@ -325,8 +326,7 @@ public class ModVisitor extends AbstractVisitor { if (!elType.equals(insnElementType) && !insnArrayType.equals(ArgType.OBJECT)) { ErrorsCounter.methodWarn(mth, "Incorrect type for fill-array insn " + InsnUtils.formatOffset(insn.getOffset()) - + ", element type: " + elType + ", insn element type: " + insnElementType - ); + + ", element type: " + elType + ", insn element type: " + insnElementType); } if (!elType.isTypeKnown()) { LOG.warn("Unknown array element type: {} in mth: {}", elType, mth); diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/PrepareForCodeGen.java b/jadx-core/src/main/java/jadx/core/dex/visitors/PrepareForCodeGen.java index bf8e2ce9a..c1e9dd698 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/PrepareForCodeGen.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/PrepareForCodeGen.java @@ -29,7 +29,7 @@ import jadx.core.utils.exceptions.JadxException; @JadxVisitor( name = "PrepareForCodeGen", desc = "Prepare instructions for code generation pass", - runAfter = {CodeShrinkVisitor.class, ClassModifier.class, ProcessVariables.class} + runAfter = { CodeShrinkVisitor.class, ClassModifier.class, ProcessVariables.class } ) public class PrepareForCodeGen extends AbstractVisitor { @@ -70,8 +70,7 @@ public class PrepareForCodeGen extends AbstractVisitor { break; case MOVE: - // remove redundant moves: - // unused result and same args names (a = a;) + // remove redundant moves: unused result and same args names (a = a;) RegisterArg result = insn.getResult(); if (result.getSVar().getUseCount() == 0 && result.isNameEquals(insn.getArg(0))) { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ReSugarCode.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ReSugarCode.java index e080556d9..9161fd082 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ReSugarCode.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ReSugarCode.java @@ -32,8 +32,8 @@ import jadx.core.dex.nodes.InsnNode; import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.visitors.shrink.CodeShrinkVisitor; import jadx.core.utils.InsnList; -import jadx.core.utils.InsnUtils; import jadx.core.utils.InsnRemover; +import jadx.core.utils.InsnUtils; import jadx.core.utils.Utils; import jadx.core.utils.exceptions.JadxException; @@ -92,7 +92,7 @@ public class ReSugarCode extends AbstractVisitor { * Replace new array and sequence of array-put to new filled-array instruction. */ private static void processNewArray(MethodNode mth, NewArrayNode newArrayInsn, - List instructions, InsnRemover remover) { + List instructions, InsnRemover remover) { InsnArg arrLenArg = newArrayInsn.getArg(0); if (!arrLenArg.isLiteral()) { return; diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java b/jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java index 7b04b87ae..001e6e755 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java @@ -10,7 +10,8 @@ import jadx.core.utils.exceptions.JadxRuntimeException; public class SaveCode { - private SaveCode() {} + private SaveCode() { + } public static void save(File dir, JadxArgs args, ClassNode cls) { if (cls.contains(AFlag.DONT_GENERATE)) { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/SimplifyVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/SimplifyVisitor.java index e6c7550b8..2eae2f5bf 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/SimplifyVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/SimplifyVisitor.java @@ -231,11 +231,8 @@ public class SimplifyVisitor extends AbstractVisitor { * Simplify chains of calls to StringBuilder#append() plus constructor of StringBuilder. * Those chains are usually automatically generated by the Java compiler when you create String * concatenations like "text " + 1 + " text". - * - * @param mth - * @param insn - * @return */ + @SuppressWarnings("InnerAssignment") // TODO private static InsnNode convertInvoke(MethodNode mth, InvokeNode insn) { MethodInfo callMth = insn.getCallMth(); @@ -246,42 +243,42 @@ public class SimplifyVisitor extends AbstractVisitor { && insn.getArg(0).isInsnWrap()) { try { List chain = flattenInsnChain(insn); - int constrIndex = -1; //RAF + int constrIndex = -1; // RAF // Case where new StringBuilder() is called with NO args (the entire // string is created using .append() calls: if (chain.size() > 1 && chain.get(0).getType() == InsnType.CONSTRUCTOR) { constrIndex = 0; } else if (chain.size() > 2 && chain.get(1).getType() == InsnType.CONSTRUCTOR) { - //RAF Case where the first string element is String arg to the + // RAF Case where the first string element is String arg to the // new StringBuilder("xxx") constructor constrIndex = 1; } else if (chain.size() > 3 && chain.get(2).getType() == InsnType.CONSTRUCTOR) { - //RAF Case where the first string element is String.valueOf() arg + // RAF Case where the first string element is String.valueOf() arg // to the new StringBuilder(String.valueOf(zzz)) constructor constrIndex = 2; } - if (constrIndex != -1) { // If we found a CONSTRUCTOR, is it a StringBuilder? + if (constrIndex != -1) { // If we found a CONSTRUCTOR, is it a StringBuilder? ConstructorInsn constr = (ConstructorInsn) chain.get(constrIndex); if (constr.getClassType().getFullName().equals(Consts.CLASS_STRING_BUILDER)) { int len = chain.size(); int argInd = 1; InsnNode concatInsn = new InsnNode(InsnType.STR_CONCAT, len - 1); InsnNode argInsn; - if (constrIndex > 0) { // There was an arg to the StringBuilder constr + if (constrIndex > 0) { // There was an arg to the StringBuilder constr InsnWrapArg iwa; if (constrIndex == 2 && (argInsn = chain.get(1)).getType() == InsnType.INVOKE && ((InvokeNode) argInsn).getCallMth().getName().compareTo("valueOf") == 0) { // The argument of new StringBuilder() is a String.valueOf(chainElement0) iwa = (InsnWrapArg) argInsn.getArg(0); - argInd = 3; // Cause for loop below to skip to after the constructor + argInd = 3; // Cause for loop below to skip to after the constructor } else { InsnNode firstNode = chain.get(0); if (firstNode instanceof ConstStringNode) { ConstStringNode csn = (ConstStringNode) firstNode; iwa = new InsnWrapArg(csn); - argInd = 2; // Cause for loop below to skip to after the constructor + argInd = 2; // Cause for loop below to skip to after the constructor } else { return null; } @@ -289,7 +286,7 @@ public class SimplifyVisitor extends AbstractVisitor { concatInsn.addArg(iwa); } - for (; argInd < len; argInd++) { // Add the .append(xxx) arg string to concat + for (; argInd < len; argInd++) { // Add the .append(xxx) arg string to concat InsnNode node = chain.get(argInd); MethodInfo method = ((CallMthInterface) node).getCallMth(); if (!(node.getArgsCount() < 2 && method.isConstructor() || method.getName().equals("append"))) { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java index 0fd3e7d81..810becf46 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java @@ -30,13 +30,12 @@ public class BlockSplitter extends AbstractVisitor { // leave these instructions alone in block node private static final Set SEPARATE_INSNS = EnumSet.of( - InsnType.RETURN, - InsnType.IF, - InsnType.SWITCH, - InsnType.MONITOR_ENTER, - InsnType.MONITOR_EXIT, - InsnType.THROW - ); + InsnType.RETURN, + InsnType.IF, + InsnType.SWITCH, + InsnType.MONITOR_ENTER, + InsnType.MONITOR_EXIT, + InsnType.THROW); public static boolean makeSeparate(InsnType insnType) { return SEPARATE_INSNS.contains(insnType); @@ -88,8 +87,8 @@ public class BlockSplitter extends AbstractVisitor { if (prevInsn != null) { InsnType type = prevInsn.getType(); if (type == InsnType.GOTO - || type == InsnType.THROW - || makeSeparate(type)) { + || type == InsnType.THROW + || makeSeparate(type)) { if (type == InsnType.RETURN || type == InsnType.THROW) { mth.addExitBlock(curBlock); @@ -102,11 +101,11 @@ public class BlockSplitter extends AbstractVisitor { startNew = true; } else { startNew = isSplitByJump(prevInsn, insn) - || makeSeparate(insn.getType()) - || isDoWhile(blocksMap, curBlock, insn) - || insn.contains(AType.EXC_HANDLER) - || prevInsn.contains(AFlag.TRY_LEAVE) - || prevInsn.getType() == InsnType.MOVE_EXCEPTION; + || makeSeparate(insn.getType()) + || isDoWhile(blocksMap, curBlock, insn) + || insn.contains(AType.EXC_HANDLER) + || prevInsn.contains(AFlag.TRY_LEAVE) + || prevInsn.getType() == InsnType.MOVE_EXCEPTION; if (startNew) { curBlock = connectNewBlock(mth, curBlock, insn.getOffset()); } @@ -154,7 +153,7 @@ public class BlockSplitter extends AbstractVisitor { * For try/catch make empty (splitter) block for connect handlers */ private static BlockNode insertSplitterBlock(MethodNode mth, Map blocksMap, - BlockNode curBlock, InsnNode insn, boolean startNew) { + BlockNode curBlock, InsnNode insn, boolean startNew) { BlockNode splitterBlock; if (insn.getOffset() == 0 || startNew) { splitterBlock = curBlock; @@ -241,7 +240,7 @@ public class BlockSplitter extends AbstractVisitor { } private static void connectExceptionHandlers(BlockNode block, InsnNode insn, - Map blocksMap) { + Map blocksMap) { CatchAttr catches = insn.get(AType.CATCH_BLOCK); SplitterBlockAttr spl = block.get(AType.SPLITTER_BLOCK); if (catches == null || spl == null) { @@ -329,11 +328,9 @@ public class BlockSplitter extends AbstractVisitor { } static boolean removeEmptyDetachedBlocks(MethodNode mth) { - return mth.getBasicBlocks().removeIf(block -> - block.getInstructions().isEmpty() - && block.getPredecessors().isEmpty() - && block.getSuccessors().isEmpty() - ); + return mth.getBasicBlocks().removeIf(block -> block.getInstructions().isEmpty() + && block.getPredecessors().isEmpty() + && block.getSuccessors().isEmpty()); } private void removeJumpAttributes(InsnNode[] insnArr) { @@ -357,7 +354,7 @@ public class BlockSplitter extends AbstractVisitor { int insnsCount = toRemove.stream().mapToInt(block -> block.getInstructions().size()).sum(); mth.addAttr(AType.COMMENTS, "JADX INFO: unreachable blocks removed: " + toRemove.size() - + ", instructions: " + insnsCount); + + ", instructions: " + insnsCount); } } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoParser.java b/jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoParser.java index f2989bfc7..9e8776e7e 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoParser.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoParser.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.android.dex.Dex.Section; + import jadx.core.dex.attributes.nodes.SourceFileAttr; import jadx.core.dex.instructions.args.RegisterArg; import jadx.core.dex.nodes.DexNode; diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/IfRegionVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/IfRegionVisitor.java index 34cc99d5b..8f8967e61 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/IfRegionVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/IfRegionVisitor.java @@ -105,7 +105,7 @@ public class IfRegionVisitor extends AbstractVisitor { private static void moveReturnToThenBlock(MethodNode mth, IfRegion ifRegion) { if (!mth.getReturnType().equals(ArgType.VOID) && hasSimpleReturnBlock(ifRegion.getElseRegion()) - /*&& insnsCount(ifRegion.getThenRegion()) < 2*/) { + /* && insnsCount(ifRegion.getThenRegion()) < 2 */) { invertIfRegion(ifRegion); } } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java index c40b38fcc..7cfae5114 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java @@ -43,7 +43,7 @@ import jadx.core.utils.exceptions.JadxOverflowException; @JadxVisitor( name = "LoopRegionVisitor", desc = "Convert 'while' loops to 'for' loops (indexed or for-each)", - runBefore = {ProcessVariables.class} + runBefore = ProcessVariables.class ) public class LoopRegionVisitor extends AbstractVisitor implements IRegionVisitor { private static final Logger LOG = LoggerFactory.getLogger(LoopRegionVisitor.class); @@ -136,7 +136,7 @@ public class LoopRegionVisitor extends AbstractVisitor implements IRegionVisitor } private static LoopType checkArrayForEach(MethodNode mth, LoopRegion loopRegion, InsnNode initInsn, InsnNode incrInsn, - IfCondition condition) { + IfCondition condition) { if (!(incrInsn instanceof ArithNode)) { return null; } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java index 03bebcd2b..08765a5ab 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java @@ -512,7 +512,7 @@ public class RegionMaker { } private static boolean canInsertContinue(BlockNode pred, List predecessors, BlockNode loopEnd, - Set loopExitNodes) { + Set loopExitNodes) { if (!pred.contains(AFlag.SYNTHETIC) || BlockUtils.checkLastInsnType(pred, InsnType.CONTINUE)) { return false; @@ -604,7 +604,7 @@ public class RegionMaker { * Traverse from monitor-enter thru successors and collect blocks contains monitor-exit */ private static void traverseMonitorExits(SynchronizedRegion region, InsnArg arg, BlockNode block, Set exits, - Set visited) { + Set visited) { visited.add(block); for (InsnNode insn : block.getInstructions()) { if (insn.getType() == InsnType.MONITOR_EXIT @@ -881,7 +881,7 @@ public class RegionMaker { } private boolean isBadCasesOrder(Map> blocksMap, - Map fallThroughCases) { + Map fallThroughCases) { BlockNode nextCaseBlock = null; for (BlockNode caseBlock : blocksMap.keySet()) { if (nextCaseBlock != null && !caseBlock.equals(nextCaseBlock)) { @@ -893,7 +893,7 @@ public class RegionMaker { } private Map> reOrderSwitchCases(Map> blocksMap, - Map fallThroughCases) { + Map fallThroughCases) { List list = new ArrayList<>(blocksMap.size()); list.addAll(blocksMap.keySet()); list.sort((a, b) -> { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/variables/ProcessVariables.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/variables/ProcessVariables.java index ccf45bee2..b6b5834bb 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/variables/ProcessVariables.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/variables/ProcessVariables.java @@ -44,7 +44,7 @@ public class ProcessVariables extends AbstractVisitor { return; } checkCodeVars(mth, codeVars); - // TODO: reduce code vars by name if debug info applied. Need checks for variable scopes before reduce + // TODO: reduce code vars by name if debug info applied (need checks for variable scopes) // collect all variables usage CollectUsageRegionVisitor usageCollector = new CollectUsageRegionVisitor(); diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/variables/UsePlace.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/variables/UsePlace.java index d76daf960..6c84a8fef 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/variables/UsePlace.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/variables/UsePlace.java @@ -42,9 +42,6 @@ public class UsePlace { @Override public String toString() { - return "UsePlace{" + - "region=" + region + - ", block=" + block + - '}'; + return "UsePlace{region=" + region + ", block=" + block + '}'; } } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/shrink/CodeShrinkVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/shrink/CodeShrinkVisitor.java index 2c80b1b9c..b5d7618a5 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/shrink/CodeShrinkVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/shrink/CodeShrinkVisitor.java @@ -25,7 +25,7 @@ import jadx.core.utils.exceptions.JadxRuntimeException; @JadxVisitor( name = "CodeShrinkVisitor", desc = "Inline variables for make code smaller", - runAfter = {ModVisitor.class} + runAfter = { ModVisitor.class } ) public class CodeShrinkVisitor extends AbstractVisitor { @@ -63,9 +63,9 @@ public class CodeShrinkVisitor extends AbstractVisitor { ListIterator it = args.listIterator(args.size()); while (it.hasPrevious()) { RegisterArg arg = it.previous(); -// if (arg.getName() != null) { -// continue; -// } + // if (arg.getName() != null) { + // continue; + // } SSAVar sVar = arg.getSVar(); // allow inline only one use arg if (sVar == null @@ -122,7 +122,7 @@ public class CodeShrinkVisitor extends AbstractVisitor { } private static boolean canMoveBetweenBlocks(InsnNode assignInsn, BlockNode assignBlock, - BlockNode useBlock, InsnNode useInsn) { + BlockNode useBlock, InsnNode useInsn) { if (!BlockUtils.isPathExists(assignBlock, useBlock)) { return false; } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/RenameState.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/RenameState.java index 3dce9569a..0d084bd87 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/RenameState.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/RenameState.java @@ -20,8 +20,7 @@ final class RenameState { mth, mth.getEnterBlock(), new SSAVar[regsCount], - new int[regsCount] - ); + new int[regsCount]); for (RegisterArg arg : mth.getArguments(true)) { SSAVar ssaVar = state.startVar(arg); ssaVar.add(AFlag.METHOD_ARGUMENT); @@ -34,8 +33,7 @@ final class RenameState { state.mth, block, Arrays.copyOf(state.vars, state.vars.length), - state.versions - ); + state.versions); } private RenameState(MethodNode mth, BlockNode block, SSAVar[] vars, int[] versions) { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/SSATransform.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/SSATransform.java index 2657f7fab..b4ce39fd3 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/SSATransform.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/SSATransform.java @@ -213,7 +213,7 @@ public class SSATransform extends AbstractVisitor { if (parentInsn != null && parentInsn.getResult() != null && parentInsn.contains(AFlag.TRY_LEAVE) - && phi.removeArg(arg) /* TODO: fix registers removing*/) { + && phi.removeArg(arg) /* TODO: fix registers removing */) { argsCount--; continue; } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeBoundConst.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeBoundConst.java index ba21455a4..a3fd21209 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeBoundConst.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeBoundConst.java @@ -10,7 +10,6 @@ public final class TypeBoundConst implements ITypeBound { private final ArgType type; private final RegisterArg arg; - public TypeBoundConst(BoundEnum bound, ArgType type) { this(bound, type, null); } @@ -45,8 +44,7 @@ public final class TypeBoundConst implements ITypeBound { return false; } TypeBoundConst that = (TypeBoundConst) o; - return bound == that.bound && - Objects.equals(type, that.type); + return bound == that.bound && Objects.equals(type, that.type); } @Override diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeCompare.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeCompare.java index 228ef2d2a..79e2445db 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeCompare.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeCompare.java @@ -59,7 +59,7 @@ public class TypeCompare { // both arrays return compareTypes(first.getArrayElement(), second.getArrayElement()); } - if (!firstKnown /*&& !secondKnown*/) { + if (!firstKnown /* && !secondKnown */) { int variantLen = Integer.compare(first.getPossibleTypes().length, second.getPossibleTypes().length); return variantLen > 0 ? WIDER : NARROW; } @@ -188,7 +188,7 @@ public class TypeCompare { return NARROW_BY_GENERIC; } // TODO: fill extendTypes -// return CONFLICT; + // return CONFLICT; return NARROW_BY_GENERIC; } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInferenceVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInferenceVisitor.java index 077ec1435..3e8bbb6e9 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInferenceVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInferenceVisitor.java @@ -42,12 +42,12 @@ import jadx.core.utils.BlockUtils; import jadx.core.utils.Utils; @JadxVisitor( - name = "Type Inference", - desc = "Calculate best types for SSA variables", - runAfter = { - SSATransform.class, - ConstInlineVisitor.class - } + name = "Type Inference", + desc = "Calculate best types for SSA variables", + runAfter = { + SSATransform.class, + ConstInlineVisitor.class + } ) public final class TypeInferenceVisitor extends AbstractVisitor { private static final Logger LOG = LoggerFactory.getLogger(TypeInferenceVisitor.class); @@ -77,8 +77,8 @@ public final class TypeInferenceVisitor extends AbstractVisitor { for (SSAVar var : mth.getSVars()) { ArgType type = var.getTypeInfo().getType(); if (!type.isTypeKnown() - && !var.getAssign().isTypeImmutable() - && !tryDeduceType(mth, var, type)) { + && !var.getAssign().isTypeImmutable() + && !tryDeduceType(mth, var, type)) { resolved = false; } } @@ -180,9 +180,9 @@ public final class TypeInferenceVisitor extends AbstractVisitor { private Optional selectBestTypeFromBounds(Set bounds) { return bounds.stream() - .map(ITypeBound::getType) - .filter(Objects::nonNull) - .max(typeUpdate.getArgTypeComparator()); + .map(ITypeBound::getType) + .filter(Objects::nonNull) + .max(typeUpdate.getArgTypeComparator()); } private void attachBounds(SSAVar var) { @@ -383,36 +383,36 @@ public final class TypeInferenceVisitor extends AbstractVisitor { private void processIncompatiblePrimitives(MethodNode mth, SSAVar var) { if (var.getAssign().getType() == ArgType.BOOLEAN) { - for (ITypeBound bound : var.getTypeInfo().getBounds()) { - if (bound.getBound() == BoundEnum.USE - && bound.getType().isPrimitive() && bound.getType() != ArgType.BOOLEAN) { - InsnNode insn = bound.getArg().getParentInsn(); - if (insn.getType() == InsnType.CAST) { - continue; - }; + for (ITypeBound bound : var.getTypeInfo().getBounds()) { + if (bound.getBound() == BoundEnum.USE + && bound.getType().isPrimitive() && bound.getType() != ArgType.BOOLEAN) { + InsnNode insn = bound.getArg().getParentInsn(); + if (insn.getType() == InsnType.CAST) { + continue; + } - IndexInsnNode castNode = new IndexInsnNode(InsnType.CAST, bound.getType(), 1); - castNode.addArg(bound.getArg()); - castNode.setResult(InsnArg.reg(bound.getArg().getRegNum(), bound.getType())); + IndexInsnNode castNode = new IndexInsnNode(InsnType.CAST, bound.getType(), 1); + castNode.addArg(bound.getArg()); + castNode.setResult(InsnArg.reg(bound.getArg().getRegNum(), bound.getType())); - SSAVar newVar = mth.makeNewSVar(castNode.getResult().getRegNum(), castNode.getResult()); - CodeVar codeVar = new CodeVar(); - codeVar.setType(bound.getType()); - newVar.setCodeVar(codeVar); - newVar.getTypeInfo().setType(bound.getType()); + SSAVar newVar = mth.makeNewSVar(castNode.getResult().getRegNum(), castNode.getResult()); + CodeVar codeVar = new CodeVar(); + codeVar.setType(bound.getType()); + newVar.setCodeVar(codeVar); + newVar.getTypeInfo().setType(bound.getType()); - for (int i = insn.getArgsCount() - 1; i >= 0; i--) { - if (insn.getArg(i) == bound.getArg()) { - insn.setArg(i, castNode.getResult().duplicate()); - break; - } - } + for (int i = insn.getArgsCount() - 1; i >= 0; i--) { + if (insn.getArg(i) == bound.getArg()) { + insn.setArg(i, castNode.getResult().duplicate()); + break; + } + } - BlockNode blockNode = BlockUtils.getBlockByInsn(mth, insn); - List insnList = blockNode.getInstructions(); - insnList.add(insnList.indexOf(insn), castNode); - } - } + BlockNode blockNode = BlockUtils.getBlockByInsn(mth, insn); + List insnList = blockNode.getInstructions(); + insnList.add(insnList.indexOf(insn), castNode); + } + } } } } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInfo.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInfo.java index ec108c91a..09b94f2e9 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInfo.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInfo.java @@ -27,9 +27,6 @@ public class TypeInfo { @Override public String toString() { - return "TypeInfo{" + - "type=" + type + - ", bounds=" + bounds + - '}'; + return "TypeInfo{type=" + type + ", bounds=" + bounds + '}'; } } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdate.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdate.java index f9738b40f..4d336d4c4 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdate.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdate.java @@ -48,7 +48,7 @@ public final class TypeUpdate { if (candidateType == null) { return REJECT; } - if (!candidateType.isTypeKnown()/* && ssaVar.getTypeInfo().getType().isTypeKnown()*/) { + if (!candidateType.isTypeKnown()/* && ssaVar.getTypeInfo().getType().isTypeKnown() */) { return REJECT; } diff --git a/jadx-core/src/main/java/jadx/core/export/ExportGradleProject.java b/jadx-core/src/main/java/jadx/core/export/ExportGradleProject.java index 522ecbc6b..8b5d4e0a6 100644 --- a/jadx-core/src/main/java/jadx/core/export/ExportGradleProject.java +++ b/jadx-core/src/main/java/jadx/core/export/ExportGradleProject.java @@ -23,8 +23,7 @@ public class ExportGradleProject { private static final Set IGNORE_CLS_NAMES = new HashSet<>(Arrays.asList( "R", - "BuildConfig" - )); + "BuildConfig")); private final RootNode root; private final File outDir; diff --git a/jadx-core/src/main/java/jadx/core/utils/ImmutableList.java b/jadx-core/src/main/java/jadx/core/utils/ImmutableList.java index 92b9f4f3f..fe4146a73 100644 --- a/jadx-core/src/main/java/jadx/core/utils/ImmutableList.java +++ b/jadx-core/src/main/java/jadx/core/utils/ImmutableList.java @@ -22,7 +22,7 @@ import org.jetbrains.annotations.NotNull; public final class ImmutableList implements List, RandomAccess { private final E[] arr; - @SuppressWarnings({"unchecked", "SuspiciousArrayCast"}) + @SuppressWarnings({ "unchecked", "SuspiciousArrayCast" }) public ImmutableList(Collection col) { this((E[]) Objects.requireNonNull(col).toArray()); } diff --git a/jadx-core/src/main/java/jadx/core/utils/InsnList.java b/jadx-core/src/main/java/jadx/core/utils/InsnList.java index 584d8d7e4..39c37abe1 100644 --- a/jadx-core/src/main/java/jadx/core/utils/InsnList.java +++ b/jadx-core/src/main/java/jadx/core/utils/InsnList.java @@ -15,7 +15,7 @@ public final class InsnList implements Iterable { } public static void remove(List list, InsnNode insn) { - for (Iterator iterator = list.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = list.iterator(); iterator.hasNext();) { InsnNode next = iterator.next(); if (next == insn) { iterator.remove(); diff --git a/jadx-core/src/main/java/jadx/core/utils/InsnUtils.java b/jadx-core/src/main/java/jadx/core/utils/InsnUtils.java index d8aa1e842..bc0fc646f 100644 --- a/jadx-core/src/main/java/jadx/core/utils/InsnUtils.java +++ b/jadx-core/src/main/java/jadx/core/utils/InsnUtils.java @@ -1,10 +1,11 @@ package jadx.core.utils; -import com.android.dx.io.instructions.DecodedInstruction; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.android.dx.io.instructions.DecodedInstruction; + import jadx.core.dex.attributes.AType; import jadx.core.dex.info.FieldInfo; import jadx.core.dex.instructions.ConstClassNode; diff --git a/jadx-core/src/main/java/jadx/core/utils/android/AndroidResourcesUtils.java b/jadx-core/src/main/java/jadx/core/utils/android/AndroidResourcesUtils.java index cbc66ec3c..b94f880bc 100644 --- a/jadx-core/src/main/java/jadx/core/utils/android/AndroidResourcesUtils.java +++ b/jadx-core/src/main/java/jadx/core/utils/android/AndroidResourcesUtils.java @@ -5,12 +5,13 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; -import com.android.dx.rop.code.AccessFlags; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.android.dx.rop.code.AccessFlags; + import jadx.core.codegen.ClassGen; import jadx.core.codegen.CodeWriter; import jadx.core.deobf.NameMapper; @@ -103,8 +104,7 @@ public class AndroidResourcesUtils { final String resTypeName = resource.getTypeName(); ClassNode typeCls = innerClsMap.computeIfAbsent( resTypeName, - name -> addClassForResType(resCls, rClsExists, name) - ); + name -> addClassForResType(resCls, rClsExists, name)); final String resName; if ("style".equals(resTypeName)) { resName = resource.getKeyName().replace('.', '_'); diff --git a/jadx-core/src/main/java/jadx/core/utils/android/ExtDataInput.java b/jadx-core/src/main/java/jadx/core/utils/android/ExtDataInput.java index 9c7682827..83fd14aae 100644 --- a/jadx-core/src/main/java/jadx/core/utils/android/ExtDataInput.java +++ b/jadx-core/src/main/java/jadx/core/utils/android/ExtDataInput.java @@ -81,6 +81,7 @@ public class ExtDataInput extends DataInputDelegate { * requested (this is similar to DataInputStream's wrapper). */ @Override + @SuppressWarnings("InnerAssignment") public final int skipBytes(int n) throws IOException { int total = 0; int cur = 0; diff --git a/jadx-core/src/main/java/jadx/core/utils/android/Res9patchStreamDecoder.java b/jadx-core/src/main/java/jadx/core/utils/android/Res9patchStreamDecoder.java index c57410eef..7d4bb22ef 100644 --- a/jadx-core/src/main/java/jadx/core/utils/android/Res9patchStreamDecoder.java +++ b/jadx-core/src/main/java/jadx/core/utils/android/Res9patchStreamDecoder.java @@ -16,7 +16,6 @@ package jadx.core.utils.android; -import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.DataInput; @@ -24,6 +23,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import javax.imageio.ImageIO; + import org.apache.commons.io.IOUtils; import jadx.core.utils.exceptions.JadxException; @@ -110,7 +111,7 @@ public class Res9patchStreamDecoder { public final int[] yDivs; public NinePatch(int padLeft, int padRight, int padTop, int padBottom, - int[] xDivs, int[] yDivs) { + int[] xDivs, int[] yDivs) { this.padLeft = padLeft; this.padRight = padRight; this.padTop = padTop; diff --git a/jadx-core/src/main/java/jadx/core/utils/files/InputFile.java b/jadx-core/src/main/java/jadx/core/utils/files/InputFile.java index 0bc310a2d..89f60e83f 100644 --- a/jadx-core/src/main/java/jadx/core/utils/files/InputFile.java +++ b/jadx-core/src/main/java/jadx/core/utils/files/InputFile.java @@ -1,8 +1,5 @@ package jadx.core.utils.files; -import static jadx.core.utils.files.FileUtils.isApkFile; -import static jadx.core.utils.files.FileUtils.isZipDexFile; - import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -31,6 +28,9 @@ import jadx.core.utils.exceptions.DecodeException; import jadx.core.utils.exceptions.JadxException; import jadx.core.utils.exceptions.JadxRuntimeException; +import static jadx.core.utils.files.FileUtils.isApkFile; +import static jadx.core.utils.files.FileUtils.isZipDexFile; + public class InputFile { private static final Logger LOG = LoggerFactory.getLogger(InputFile.class); @@ -117,7 +117,7 @@ public class InputFile { // we should consider the input file could contain only one single dex, multi-dex, // or instantRun support dex for Android .apk files String instantRunDexSuffix = "classes" + ext; - for (Enumeration e = zf.entries(); e.hasMoreElements(); ) { + for (Enumeration e = zf.entries(); e.hasMoreElements();) { ZipEntry entry = e.nextElement(); if (!ZipSecurity.isValidZipEntry(entry)) { continue; diff --git a/jadx-core/src/main/java/jadx/core/utils/files/JavaToDex.java b/jadx-core/src/main/java/jadx/core/utils/files/JavaToDex.java index 83c75691d..4f59c4983 100644 --- a/jadx-core/src/main/java/jadx/core/utils/files/JavaToDex.java +++ b/jadx-core/src/main/java/jadx/core/utils/files/JavaToDex.java @@ -39,27 +39,27 @@ public class JavaToDex { public List convert(Path jar) throws JadxException { try (ByteArrayOutputStream out = new ByteArrayOutputStream(); - ByteArrayOutputStream errOut = new ByteArrayOutputStream()) { + ByteArrayOutputStream errOut = new ByteArrayOutputStream()) { DxContext context = new DxContext(out, errOut); Path dir = Files.createTempDirectory("jadx"); DxArgs args = new DxArgs( context, dir.toAbsolutePath().toString(), - new String[]{jar.toAbsolutePath().toString()}); + new String[] { jar.toAbsolutePath().toString() }); int result = new Main(context).runDx(args); dxErrors = errOut.toString(CHARSET_NAME); if (result != 0) { throw new JadxException("Java to dex conversion error, code: " + result); } List list = new ArrayList<>(); - try (DirectoryStream ds = Files.newDirectoryStream(dir)) { - for (Path child : ds) { - list.add(child); - child.toFile().deleteOnExit(); - } - } - dir.toFile().deleteOnExit(); - return list; + try (DirectoryStream ds = Files.newDirectoryStream(dir)) { + for (Path child : ds) { + list.add(child); + child.toFile().deleteOnExit(); + } + } + dir.toFile().deleteOnExit(); + return list; } catch (Exception e) { throw new JadxException("dx exception: " + e.getMessage(), e); } diff --git a/jadx-core/src/main/java/jadx/core/utils/files/ZipSecurity.java b/jadx-core/src/main/java/jadx/core/utils/files/ZipSecurity.java index 38a2d2c5f..39bf20a57 100644 --- a/jadx-core/src/main/java/jadx/core/utils/files/ZipSecurity.java +++ b/jadx-core/src/main/java/jadx/core/utils/files/ZipSecurity.java @@ -13,7 +13,8 @@ public class ZipSecurity { // size of uncompressed zip entry shouldn't be bigger of compressed in MAX_SIZE_DIFF times private static final int MAX_SIZE_DIFF = 100; - private ZipSecurity() {} + private ZipSecurity() { + } private static boolean isInSubDirectoryInternal(File baseDir, File canonFile) { if (canonFile == null) { diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java index 3a5259f51..c33269f65 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java @@ -20,16 +20,17 @@ import jadx.core.utils.StringUtils; import jadx.core.utils.exceptions.JadxRuntimeException; import jadx.core.xmlgen.entry.ValuesParser; -/* TODO: - Don't die when error occurs - Check error cases, maybe checked const values are not always the same - Better error messages - What to do, when Binary XML Manifest is > size(int)? - Check for missing chunk size types - Implement missing data types - Use line numbers to recreate EXACT AndroidManifest - Check Element chunk size -*/ +/* + * TODO: + * Don't die when error occurs + * Check error cases, maybe checked const values are not always the same + * Better error messages + * What to do, when Binary XML Manifest is > size(int)? + * Check for missing chunk size types + * Implement missing data types + * Use line numbers to recreate EXACT AndroidManifest + * Check Element chunk size + */ @SuppressWarnings("unused") public class BinaryXMLParser extends CommonBinaryParser { @@ -74,8 +75,8 @@ public class BinaryXMLParser extends CommonBinaryParser { for (Field f : rStyleCls.getFields()) { styleMap.put(f.getInt(f.getType()), f.getName()); } - } catch (Exception th) { - LOG.error("Android R class loading failed", th); + } catch (Exception e) { + LOG.error("Android R class loading failed", e); } } @@ -330,7 +331,7 @@ public class BinaryXMLParser extends CommonBinaryParser { } private String generateNameForNS(String attrUrl) { - for (int i = 1; ; i++) { + for (int i = 1;; i++) { String attrName = "ns" + i; if (!nsMap.containsValue(attrName) && !nsMapGenerated.contains(attrName)) { nsMapGenerated.add(attrName); @@ -369,7 +370,7 @@ public class BinaryXMLParser extends CommonBinaryParser { } private void decodeAttribute(int attributeNS, int attrValDataType, int attrValData, - String shortNsName, String attrName) { + String shortNsName, String attrName) { if (attrValDataType == TYPE_REFERENCE) { // reference custom processing String name = styleMap.get(attrValData); @@ -422,9 +423,9 @@ public class BinaryXMLParser extends CommonBinaryParser { } else { writer.startLine("'); } isLastEnd = true; @@ -443,8 +444,7 @@ public class BinaryXMLParser extends CommonBinaryParser { String generated; do { generated = generateTagAttrName(); - } - while (tagAttrDeobfNames.containsValue(generated)); + } while (tagAttrDeobfNames.containsValue(generated)); tagAttrDeobfNames.put(originalName, generated); return generated; } diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ManifestAttributes.java b/jadx-core/src/main/java/jadx/core/xmlgen/ManifestAttributes.java index 34ab9750e..7280f820b 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ManifestAttributes.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ManifestAttributes.java @@ -1,11 +1,12 @@ package jadx.core.xmlgen; -import javax.xml.parsers.DocumentBuilder; import java.io.InputStream; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; +import javax.xml.parsers.DocumentBuilder; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ParserConstants.java b/jadx-core/src/main/java/jadx/core/xmlgen/ParserConstants.java index 6f60fb7bb..f1d6f8264 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ParserConstants.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ParserConstants.java @@ -71,7 +71,7 @@ public class ParserConstants { // ...end of integer flavors. protected static final int TYPE_LAST_INT = 0x1f; - // Where the unit type information is. This gives us 16 possible + // Where the unit type information is. This gives us 16 possible // types, as defined below. protected static final int COMPLEX_UNIT_SHIFT = 0; protected static final int COMPLEX_UNIT_MASK = 0xf; @@ -95,7 +95,7 @@ public class ParserConstants { protected static final int COMPLEX_UNIT_FRACTION_PARENT = 1; // Where the radix information is, telling where the decimal place - // appears in the mantissa. This give us 4 possible fixed point + // appears in the mantissa. This give us 4 possible fixed point // representations as defined below. protected static final int COMPLEX_RADIX_SHIFT = 4; protected static final int COMPLEX_RADIX_MASK = 0x3; @@ -109,13 +109,13 @@ public class ParserConstants { // The mantissa magnitude is 0 bits -- i.e, 0x0.nnnnnn protected static final int COMPLEX_RADIX_0P23 = 3; - // Where the actual value is. This gives us 23 bits of - // precision. The top bit is the sign. + // Where the actual value is. This gives us 23 bits of + // precision. The top bit is the sign. protected static final int COMPLEX_MANTISSA_SHIFT = 8; protected static final int COMPLEX_MANTISSA_MASK = 0xffffff; protected static final double MANTISSA_MULT = 1.0f / (1 << COMPLEX_MANTISSA_SHIFT); - protected static final double[] RADIX_MULTS = new double[]{ + protected static final double[] RADIX_MULTS = new double[] { 1.0f * MANTISSA_MULT, 1.0f / (1 << 7) * MANTISSA_MULT, 1.0f / (1 << 15) * MANTISSA_MULT, @@ -187,7 +187,7 @@ public class ParserConstants { protected static final int ATTR_TYPE_REFERENCE = 1; // Attribute holds a generic string. protected static final int ATTR_TYPE_STRING = 1 << 1; - // Attribute holds an integer value. ATTR_MIN and ATTR_MIN can + // Attribute holds an integer value. ATTR_MIN and ATTR_MIN can // optionally specify a constrained range of possible integer values. protected static final int ATTR_TYPE_INTEGER = 1 << 2; // Attribute holds a boolean integer. @@ -200,10 +200,10 @@ public class ParserConstants { protected static final int ATTR_TYPE_DIMENSION = 1 << 6; // Attribute holds a fraction value, such as "20%". protected static final int ATTR_TYPE_FRACTION = 1 << 7; - // Attribute holds an enumeration. The enumeration values are + // Attribute holds an enumeration. The enumeration values are // supplied as additional entries in the map. protected static final int ATTR_TYPE_ENUM = 1 << 16; - // Attribute holds a bitmaks of flags. The flag bit values are + // Attribute holds a bitmaks of flags. The flag bit values are // supplied as additional entries in the map. protected static final int ATTR_TYPE_FLAGS = 1 << 17; diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResTableParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResTableParser.java index 22896bc85..df6080f6f 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResTableParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResTableParser.java @@ -80,7 +80,7 @@ public class ResTableParser extends CommonBinaryParser { for (ResourceEntry ri : resStorage.getResources()) { if (addedValues.add(ri.getTypeName() + '.' + ri.getKeyName())) { String format = String.format("", - ri.getTypeName(), ri.getKeyName(), ri.getId()); + ri.getTypeName(), ri.getKeyName(), ri.getId()); writer.startLine(format); } } @@ -101,7 +101,7 @@ public class ResTableParser extends CommonBinaryParser { void decodeTableChunk() throws IOException { is.checkInt16(RES_TABLE_TYPE, "Not a table chunk"); is.checkInt16(0x000c, "Unexpected table header size"); - /*int size = */ + /* int size = */ is.readInt32(); int pkgCount = is.readInt32(); @@ -167,7 +167,7 @@ public class ResTableParser extends CommonBinaryParser { @SuppressWarnings("unused") private void parseTypeSpecChunk() throws IOException { is.checkInt16(0x0010, "Unexpected type spec header size"); - /*int size = */ + /* int size = */ is.readInt32(); int id = is.readInt8(); @@ -179,9 +179,9 @@ public class ResTableParser extends CommonBinaryParser { } private void parseTypeChunk(long start, PackageChunk pkg) throws IOException { - /*int headerSize = */ + /* int headerSize = */ is.readInt16(); - /*int size = */ + /* int size = */ is.readInt32(); int id = is.readInt8(); @@ -221,7 +221,7 @@ public class ResTableParser extends CommonBinaryParser { int resRef = pkg.getId() << 24 | typeId << 16 | entryId; String typeName = pkg.getTypeStrings()[typeId - 1]; String keyName = pkg.getKeyStrings()[key]; - if(keyName.isEmpty()) { + if (keyName.isEmpty()) { keyName = "RES_" + resRef; // autogenerate key name } ResourceEntry ri = new ResourceEntry(resRef, pkg.getName(), typeName, keyName); @@ -317,11 +317,11 @@ public class ResTableParser extends CommonBinaryParser { is.skipToPos(start + size, "Config skip trailing bytes"); return new EntryConfig(mcc, mnc, language, country, - orientation, touchscreen, density, keyboard, navigation, - inputFlags, screenWidth, screenHeight, sdkVersion, - screenLayout, uiMode, smallestScreenWidthDp, screenWidthDp, - screenHeightDp, localeScript, localeVariant, screenLayout2, - colorMode, false, size); + orientation, touchscreen, density, keyboard, navigation, + inputFlags, screenWidth, screenHeight, sdkVersion, + screenLayout, uiMode, smallestScreenWidthDp, screenWidthDp, + screenHeightDp, localeScript, localeVariant, screenLayout2, + colorMode, false, size); } private char[] unpackLocaleOrRegion(byte in0, byte in1, char base) { @@ -333,9 +333,9 @@ public class ResTableParser extends CommonBinaryParser { // since this function handles languages & regions, we add the value(s) to the base char // which is usually 'a' or '0' depending on language or region. - return new char[]{(char) (first + base), (char) (second + base), (char) (third + base)}; + return new char[] { (char) (first + base), (char) (second + base), (char) (third + base) }; } - return new char[]{(char) in0, (char) in1}; + return new char[] { (char) in0, (char) in1 }; } private String readScriptOrVariantChar(int length) throws IOException { diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java index 58f721ceb..a9422d420 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java @@ -22,8 +22,7 @@ public class ResXmlGen { private static final Set SKIP_RES_TYPES = new HashSet<>(Arrays.asList( "layout", "mipmap", - "id" - )); + "id")); private final ResourceStorage resStorage; private final ValuesParser vp; diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/XMLChar.java b/jadx-core/src/main/java/jadx/core/xmlgen/XMLChar.java index 422bd2e12..730e63f56 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/XMLChar.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/XMLChar.java @@ -1,13 +1,11 @@ /* * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with + * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + * the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -37,7 +35,7 @@ import java.util.Arrays; * @author Glenn Marcy, IBM * @author Andy Clark, IBM * @author Eric Ye, IBM - * @author Arnaud Le Hors, IBM + * @author Arnaud Le Hors, IBM * @author Michael Glavassevich, IBM * @author Rahul Srivastava, Sun Microsystems Inc. * @version $Id: XMLChar.java 674378 2008-07-07 00:52:45Z mrglavas $ @@ -799,8 +797,8 @@ public class XMLChar { * @param c The character to check. */ public static boolean isValid(int c) { - return (c < 0x10000 && (CHARS[c] & MASK_VALID) != 0) || - (0x10000 <= c && c <= 0x10FFFF); + return (c < 0x10000 && (CHARS[c] & MASK_VALID) != 0) + || (0x10000 <= c && c <= 0x10FFFF); } // isValid(int):boolean /** @@ -818,8 +816,8 @@ public class XMLChar { * @param c The character to check. */ public static boolean isContent(int c) { - return (c < 0x10000 && (CHARS[c] & MASK_CONTENT) != 0) || - (0x10000 <= c && c <= 0x10FFFF); + return (c < 0x10000 && (CHARS[c] & MASK_CONTENT) != 0) + || (0x10000 <= c && c <= 0x10FFFF); } // isContent(int):boolean /** @@ -999,9 +997,9 @@ public class XMLChar { if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { for (int i = 1; i < length; i++) { c = ianaEncoding.charAt(i); - if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z') && - (c < '0' || c > '9') && c != '.' && c != '_' && - c != '-') { + if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z') + && (c < '0' || c > '9') && c != '.' && c != '_' + && c != '-') { return false; } } @@ -1026,9 +1024,9 @@ public class XMLChar { if (length > 0) { for (int i = 1; i < length; i++) { char c = javaEncoding.charAt(i); - if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z') && - (c < '0' || c > '9') && c != '.' && c != '_' && - c != '-') { + if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z') + && (c < '0' || c > '9') && c != '.' && c != '_' + && c != '-') { return false; } } @@ -1046,7 +1044,7 @@ public class XMLChar { * * @param value the string to be trimmed * @return the given string with the space characters trimmed - * from both ends + * from both ends */ public static String trim(String value) { int start; diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/XmlDeobf.java b/jadx-core/src/main/java/jadx/core/xmlgen/XmlDeobf.java index 141d1c7ab..a31092ae3 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/XmlDeobf.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/XmlDeobf.java @@ -11,12 +11,13 @@ import jadx.core.dex.nodes.RootNode; * but were changed during deobfuscation */ public class XmlDeobf { - private static final Map deobfMap = new HashMap<>(); + private static final Map DEOBF_MAP = new HashMap<>(); - private XmlDeobf() {} + private XmlDeobf() { + } public static String deobfClassName(RootNode rootNode, String potencialClassName, - String packageName) { + String packageName) { if (packageName != null && potencialClassName.startsWith(".")) { potencialClassName = packageName + potencialClassName; @@ -25,17 +26,17 @@ public class XmlDeobf { } private static String getNewClassName(RootNode rootNode, String old) { - if (deobfMap.isEmpty()) { + if (DEOBF_MAP.isEmpty()) { for (ClassNode classNode : rootNode.getClasses(true)) { if (classNode.getAlias() != null) { String oldName = classNode.getClassInfo().getFullName(); String newName = classNode.getAlias().getFullName(); if (!oldName.equals(newName)) { - deobfMap.put(oldName, newName); + DEOBF_MAP.put(oldName, newName); } } } } - return deobfMap.get(old); + return DEOBF_MAP.get(old); } } diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/XmlSecurity.java b/jadx-core/src/main/java/jadx/core/xmlgen/XmlSecurity.java index defa24867..c67167c69 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/XmlSecurity.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/XmlSecurity.java @@ -7,7 +7,8 @@ public class XmlSecurity { private static DocumentBuilderFactory secureDbf = null; - private XmlSecurity() {} + private XmlSecurity() { + } public static DocumentBuilderFactory getSecureDbf() throws ParserConfigurationException { synchronized (XmlSecurity.class) { diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/entry/EntryConfig.java b/jadx-core/src/main/java/jadx/core/xmlgen/entry/EntryConfig.java index 4211dba61..d5dcca8bd 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/entry/EntryConfig.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/entry/EntryConfig.java @@ -14,6 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package jadx.core.xmlgen.entry; import org.slf4j.Logger; @@ -21,7 +22,8 @@ import org.slf4j.LoggerFactory; /** * Original source code can be found - * here + * here */ public class EntryConfig { @@ -64,13 +66,13 @@ public class EntryConfig { private final int size; public EntryConfig(short mcc, short mnc, char[] language, - char[] region, byte orientation, - byte touchscreen, int density, byte keyboard, byte navigation, - byte inputFlags, short screenWidth, short screenHeight, - short sdkVersion, byte screenLayout, byte uiMode, - short smallestScreenWidthDp, short screenWidthDp, - short screenHeightDp, char[] localeScript, char[] localeVariant, - byte screenLayout2, byte colorMode, boolean isInvalid, int size) { + char[] region, byte orientation, + byte touchscreen, int density, byte keyboard, byte navigation, + byte inputFlags, short screenWidth, short screenHeight, + short sdkVersion, byte screenLayout, byte uiMode, + short smallestScreenWidthDp, short screenWidthDp, + short screenHeightDp, char[] localeScript, char[] localeVariant, + byte screenLayout2, byte colorMode, boolean isInvalid, int size) { if (orientation < 0 || orientation > 3) { LOG.warn("Invalid orientation value: {}", orientation); orientation = 0; @@ -394,7 +396,8 @@ public class EntryConfig { } private short getNaturalSdkVersionRequirement() { - if ((uiMode & MASK_UI_MODE_TYPE) == UI_MODE_TYPE_VR_HEADSET || (colorMode & COLOR_WIDE_MASK) != 0 || ((colorMode & COLOR_HDR_MASK) != 0)) { + if ((uiMode & MASK_UI_MODE_TYPE) == UI_MODE_TYPE_VR_HEADSET || (colorMode & COLOR_WIDE_MASK) != 0 + || ((colorMode & COLOR_HDR_MASK) != 0)) { return SDK_OREO; } if ((screenLayout2 & MASK_SCREENROUND) != 0) { @@ -421,8 +424,8 @@ public class EntryConfig { // check for old style non BCP47 tags // allows values-xx-rXX, values-xx, values-xxx-rXX // denies values-xxx, anything else - if (localeVariant == null && localeScript == null && (region[0] != '\00' || language[0] != '\00') && - region.length != 3) { + if (localeVariant == null && localeScript == null && (region[0] != '\00' || language[0] != '\00') + && region.length != 3) { sb.append('-').append(language); if (region[0] != '\00') { sb.append("-r").append(region); diff --git a/jadx-core/src/test/java/jadx/NotYetImplemented.java b/jadx-core/src/test/java/jadx/NotYetImplemented.java index de3f415d9..c20bf94da 100644 --- a/jadx-core/src/test/java/jadx/NotYetImplemented.java +++ b/jadx-core/src/test/java/jadx/NotYetImplemented.java @@ -8,10 +8,13 @@ import java.lang.annotation.Target; /** * Indicates a test which is known to fail. * - *

This would cause a failure to be considered as success and a success as failure, - * with the benefit of updating the related issue when it has been resolved even unintentionally.

+ *

+ * This would cause a failure to be considered as success and a success as failure, + * with the benefit of updating the related issue when it has been resolved even unintentionally. + *

* - *

To have an effect, the test class must be annotated with: + *

+ * To have an effect, the test class must be annotated with: * * * @ExtendWith(NotYetImplementedExtension.class) @@ -19,7 +22,7 @@ import java.lang.annotation.Target; *

*/ @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE, ElementType.METHOD}) +@Target({ ElementType.TYPE, ElementType.METHOD }) public @interface NotYetImplemented { String value() default ""; } diff --git a/jadx-core/src/test/java/jadx/core/dex/info/AccessInfoTest.java b/jadx-core/src/test/java/jadx/core/dex/info/AccessInfoTest.java index f0e984ecc..23587c044 100644 --- a/jadx-core/src/test/java/jadx/core/dex/info/AccessInfoTest.java +++ b/jadx-core/src/test/java/jadx/core/dex/info/AccessInfoTest.java @@ -1,8 +1,9 @@ package jadx.core.dex.info; -import com.android.dx.rop.code.AccessFlags; import org.junit.jupiter.api.Test; +import com.android.dx.rop.code.AccessFlags; + import jadx.core.dex.info.AccessInfo.AFType; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java b/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java index 18e2501ea..21e43b601 100644 --- a/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java +++ b/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java @@ -1,5 +1,25 @@ package jadx.tests.api; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.jar.JarOutputStream; + +import org.junit.jupiter.api.BeforeEach; + import jadx.api.JadxArgs; import jadx.api.JadxDecompiler; import jadx.api.JadxInternalAccess; @@ -19,25 +39,6 @@ import jadx.core.xmlgen.entry.ResourceEntry; import jadx.tests.api.compiler.DynamicCompiler; import jadx.tests.api.compiler.StaticCompiler; import jadx.tests.api.utils.TestUtils; -import org.junit.jupiter.api.BeforeEach; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.jar.JarOutputStream; import static jadx.core.utils.files.FileUtils.addFileToJar; import static org.hamcrest.MatcherAssert.assertThat; @@ -60,8 +61,10 @@ public abstract class IntegrationTest extends TestUtils { /** * Run auto check method if defined: + * *
-	 *     public void check() {}
+	 * public void check() {
+	 * }
 	 * 
*/ private static final String CHECK_METHOD_NAME = "check"; diff --git a/jadx-core/src/test/java/jadx/tests/api/compiler/CharSequenceJavaFileObject.java b/jadx-core/src/test/java/jadx/tests/api/compiler/CharSequenceJavaFileObject.java index d0ed32cd6..cf0ad80b8 100644 --- a/jadx-core/src/test/java/jadx/tests/api/compiler/CharSequenceJavaFileObject.java +++ b/jadx-core/src/test/java/jadx/tests/api/compiler/CharSequenceJavaFileObject.java @@ -1,8 +1,9 @@ package jadx.tests.api.compiler; -import javax.tools.SimpleJavaFileObject; import java.net.URI; +import javax.tools.SimpleJavaFileObject; + public class CharSequenceJavaFileObject extends SimpleJavaFileObject { private CharSequence content; diff --git a/jadx-core/src/test/java/jadx/tests/api/compiler/ClassFileManager.java b/jadx-core/src/test/java/jadx/tests/api/compiler/ClassFileManager.java index da3c61610..d3b7040cf 100644 --- a/jadx-core/src/test/java/jadx/tests/api/compiler/ClassFileManager.java +++ b/jadx-core/src/test/java/jadx/tests/api/compiler/ClassFileManager.java @@ -1,13 +1,13 @@ package jadx.tests.api.compiler; +import java.security.SecureClassLoader; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import javax.tools.FileObject; import javax.tools.ForwardingJavaFileManager; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; -import java.io.IOException; -import java.security.SecureClassLoader; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import static javax.tools.JavaFileObject.Kind; @@ -21,8 +21,7 @@ public class ClassFileManager extends ForwardingJavaFileManager COMMON_ARGS = Arrays.asList("-source 1.8 -target 1.8".split(" ")); - public static List compile(List files, File outDir, boolean includeDebugInfo, boolean useEclipseCompiler) throws IOException { + public static List compile(List files, File outDir, boolean includeDebugInfo, boolean useEclipseCompiler) + throws IOException { JavaCompiler compiler; if (useEclipseCompiler) { compiler = new EclipseCompiler(); diff --git a/jadx-core/src/test/java/jadx/tests/external/BaseExternalTest.java b/jadx-core/src/test/java/jadx/tests/external/BaseExternalTest.java index 267650871..15e892574 100644 --- a/jadx-core/src/test/java/jadx/tests/external/BaseExternalTest.java +++ b/jadx-core/src/test/java/jadx/tests/external/BaseExternalTest.java @@ -54,7 +54,7 @@ public abstract class BaseExternalTest extends IntegrationTest { if (clsPatternStr == null) { processAll(jadx); -// jadx.saveSources(); + // jadx.saveSources(); } else { processByPatterns(jadx, clsPatternStr, mthPatternStr); } @@ -161,8 +161,7 @@ public abstract class BaseExternalTest extends IntegrationTest { LOG.info("Print method: {}\n{}\n{}\n{}", mth.getMethodInfo().getShortId(), dashLine, mthCode, - dashLine - ); + dashLine); } } } diff --git a/jadx-core/src/test/java/jadx/tests/functional/SignatureParserTest.java b/jadx-core/src/test/java/jadx/tests/functional/SignatureParserTest.java index 3871741e0..149bf7dfa 100644 --- a/jadx-core/src/test/java/jadx/tests/functional/SignatureParserTest.java +++ b/jadx-core/src/test/java/jadx/tests/functional/SignatureParserTest.java @@ -48,7 +48,7 @@ class SignatureParserTest { checkType("La/b/C;>;", generic("La/b/C;", generic("Ld/E;", object("Lf/G;")))); checkType("La.c;", genericInner(generic("La;", genericType("D")), "c", null)); checkType("La.c/d;", genericInner(generic("La;", genericType("D")), "c.d", null)); - checkType("La.c;", genericInner(generic("La;", object("Lb;")), "c", new ArgType[]{genericType("V")})); + checkType("La.c;", genericInner(generic("La;", object("Lb;")), "c", new ArgType[] { genericType("V") })); } @Test diff --git a/jadx-core/src/test/java/jadx/tests/functional/StringUtilsTest.java b/jadx-core/src/test/java/jadx/tests/functional/StringUtilsTest.java index 34fef46a9..72405fb8d 100644 --- a/jadx-core/src/test/java/jadx/tests/functional/StringUtilsTest.java +++ b/jadx-core/src/test/java/jadx/tests/functional/StringUtilsTest.java @@ -13,6 +13,7 @@ class StringUtilsTest { private StringUtils stringUtils; @Test + @SuppressWarnings("AvoidEscapedUnicodeCharacters") public void testStringUnescape() { JadxArgs args = new JadxArgs(); args.setEscapeUnicode(true); diff --git a/jadx-core/src/test/java/jadx/tests/integration/TestClassGen.java b/jadx-core/src/test/java/jadx/tests/integration/TestClassGen.java index c3bc64664..9852a936d 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/TestClassGen.java +++ b/jadx-core/src/test/java/jadx/tests/integration/TestClassGen.java @@ -18,7 +18,7 @@ public class TestClassGen extends IntegrationTest { public int test3(); } - public static abstract class A { + public abstract static class A { public abstract int test2(); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/TestFloatValue.java b/jadx-core/src/test/java/jadx/tests/integration/TestFloatValue.java index 84c944a7f..f2e0350c8 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/TestFloatValue.java +++ b/jadx-core/src/test/java/jadx/tests/integration/TestFloatValue.java @@ -14,7 +14,7 @@ public class TestFloatValue extends IntegrationTest { public static class TestCls { public float[] method() { - float[] fa = {0.55f}; + float[] fa = { 0.55f }; fa[0] /= 2; return fa; } diff --git a/jadx-core/src/test/java/jadx/tests/integration/TestReturnWrapping.java b/jadx-core/src/test/java/jadx/tests/integration/TestReturnWrapping.java index c9e87efd5..a74aaaf52 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/TestReturnWrapping.java +++ b/jadx-core/src/test/java/jadx/tests/integration/TestReturnWrapping.java @@ -56,7 +56,8 @@ public class TestReturnWrapping extends IntegrationTest { assertThat(code, containsString("return arg0 + 1;")); // TODO: reduce code vars by name -// assertThat(code, containsString("return i > 128 ? arg0.toString() + ret.toString() : Integer.valueOf(i);")); + // assertThat(code, containsString("return i > 128 ? arg0.toString() + ret.toString() : + // Integer.valueOf(i);")); assertThat(code, containsString("return i2 > 128 ? arg0.toString() + ret.toString() : Integer.valueOf(i2);")); assertThat(code, containsString("return arg0 + 2;")); diff --git a/jadx-core/src/test/java/jadx/tests/integration/TestStaticFieldsInit.java b/jadx-core/src/test/java/jadx/tests/integration/TestStaticFieldsInit.java index 670b0a7ee..4a27a18ed 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/TestStaticFieldsInit.java +++ b/jadx-core/src/test/java/jadx/tests/integration/TestStaticFieldsInit.java @@ -12,18 +12,18 @@ import static org.hamcrest.MatcherAssert.assertThat; public class TestStaticFieldsInit extends IntegrationTest { public static class TestCls { - public static final String s1 = "1"; - public static final String s2 = "12".substring(1); - public static final String s3 = null; - public static final String s4; - public static final String s5 = "5"; + public static final String S1 = "1"; + public static final String S2 = "12".substring(1); + public static final String S3 = null; + public static final String S4; + public static final String S5 = "5"; public static String s6 = "6"; static { - if (s5.equals("?")) { - s4 = "?"; + if (S5.equals("?")) { + S4 = "?"; } else { - s4 = "4"; + S4 = "4"; } } } @@ -33,7 +33,7 @@ public class TestStaticFieldsInit extends IntegrationTest { ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); - assertThat(code, not(containsString("public static final String s2 = null;"))); - assertThat(code, containsString("public static final String s3 = null;")); + assertThat(code, not(containsString("public static final String S2 = null;"))); + assertThat(code, containsString("public static final String S3 = null;")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/TestStringBuilderElimination2.java b/jadx-core/src/test/java/jadx/tests/integration/TestStringBuilderElimination2.java index f3ce0d525..e0abace60 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/TestStringBuilderElimination2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/TestStringBuilderElimination2.java @@ -18,8 +18,8 @@ public class TestStringBuilderElimination2 extends IntegrationTest { public static class TestCls1 { public String test() { - return new StringBuilder("[init]").append("a1").append('c').append(2).append(0L).append(1.0f). - append(2.0d).append(true).toString(); + return new StringBuilder("[init]").append("a1").append('c').append(2).append(0L).append(1.0f).append(2.0d).append(true) + .toString(); } } @@ -41,8 +41,7 @@ public class TestStringBuilderElimination2 extends IntegrationTest { float f = 1.0f; double d = 2.0d; boolean b = true; - return new StringBuilder(sInit).append(s).append(c).append(i).append(l).append(f). - append(d).append(b).toString(); + return new StringBuilder(sInit).append(s).append(c).append(i).append(l).append(f).append(d).append(b).toString(); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/TestWrongCode.java b/jadx-core/src/test/java/jadx/tests/integration/TestWrongCode.java index b69cd068a..3d68dcc96 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/TestWrongCode.java +++ b/jadx-core/src/test/java/jadx/tests/integration/TestWrongCode.java @@ -39,8 +39,7 @@ public class TestWrongCode extends IntegrationTest { assertThat(code, containsLines(2, "if (a == 0) {", "}", - "return a;" - )); + "return a;")); } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotations2.java b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotations2.java index 0545ec193..823dfeeeb 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotations2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotations2.java @@ -17,7 +17,7 @@ public class TestAnnotations2 extends IntegrationTest { public static class TestCls { - @Target({ElementType.TYPE}) + @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface A { int i(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsMix.java b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsMix.java index e0a1d4b8f..57e411565 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsMix.java +++ b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsMix.java @@ -56,12 +56,14 @@ public class TestAnnotationsMix extends IntegrationTest { return Arrays.asList(a); } - @MyAnnotation(name = "b", + @MyAnnotation( + name = "b", num = 7, cls = Exception.class, - doubles = {0.0, 1.1}, + doubles = { 0.0, 1.1 }, value = 9.87f, - simple = @SimpleAnnotation(false)) + simple = @SimpleAnnotation(false) + ) public static Object test(String[] a) { return Arrays.asList(a); } diff --git a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsRename.java b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsRename.java index 88cd3fcf2..1308d09b8 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsRename.java +++ b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsRename.java @@ -20,7 +20,7 @@ public class TestAnnotationsRename extends IntegrationTest { public static class TestCls { - @Target({ElementType.METHOD}) + @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface A { int x(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsRenameDef.java b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsRenameDef.java index 5e87b50f8..d75ec013a 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsRenameDef.java +++ b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsRenameDef.java @@ -18,7 +18,7 @@ public class TestAnnotationsRenameDef extends IntegrationTest { public static class TestCls { - @Target({ElementType.METHOD}) + @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface A { int value(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestParamAnnotations.java b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestParamAnnotations.java index 9eac38b3d..c3802238c 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestParamAnnotations.java +++ b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestParamAnnotations.java @@ -17,7 +17,7 @@ public class TestParamAnnotations extends IntegrationTest { public static class TestCls { - @Target({ElementType.PARAMETER}) + @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public static @interface A { int i() default 7; diff --git a/jadx-core/src/test/java/jadx/tests/integration/arith/TestArith.java b/jadx-core/src/test/java/jadx/tests/integration/arith/TestArith.java index d5210fd8a..ccd2b2c48 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arith/TestArith.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arith/TestArith.java @@ -1,14 +1,14 @@ package jadx.tests.integration.arith; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.NotYetImplemented; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestArith extends IntegrationTest { public static class TestCls { @@ -25,7 +25,8 @@ public class TestArith extends IntegrationTest { return a; } - private static void use(int i) {} + private static void use(int i) { + } } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/arith/TestArith2.java b/jadx-core/src/test/java/jadx/tests/integration/arith/TestArith2.java index 5da553b3e..b96077b34 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arith/TestArith2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arith/TestArith2.java @@ -1,14 +1,14 @@ package jadx.tests.integration.arith; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.MatcherAssert.assertThat; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.MatcherAssert.assertThat; + public class TestArith2 extends IntegrationTest { public static class TestCls { diff --git a/jadx-core/src/test/java/jadx/tests/integration/arith/TestArithNot.java b/jadx-core/src/test/java/jadx/tests/integration/arith/TestArithNot.java index 9eedade4f..598a040dc 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arith/TestArithNot.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arith/TestArithNot.java @@ -10,6 +10,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.not; public class TestArithNot extends SmaliTest { + // @formatter:off /* Smali Code equivalent: public static class TestCls { @@ -22,6 +23,7 @@ public class TestArithNot extends SmaliTest { } } */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/arith/TestSpecialValues.java b/jadx-core/src/test/java/jadx/tests/integration/arith/TestSpecialValues.java index 504c2c32c..4e162a0ec 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arith/TestSpecialValues.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arith/TestSpecialValues.java @@ -49,11 +49,11 @@ public class TestSpecialValues extends IntegrationTest { ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); - assertThat(code, containsOne("Float.NaN, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY, " + - "Float.MIN_VALUE, Float.MAX_VALUE, Float.MIN_NORMAL")); + assertThat(code, containsOne( + "Float.NaN, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY, Float.MIN_VALUE, Float.MAX_VALUE, Float.MIN_NORMAL")); - assertThat(code, containsOne("Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, " + - "Double.MIN_VALUE, Double.MAX_VALUE, Double.MIN_NORMAL")); + assertThat(code, containsOne("Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, " + + "Double.MIN_VALUE, Double.MAX_VALUE, Double.MIN_NORMAL")); assertThat(code, containsOne("Short.MIN_VALUE, Short.MAX_VALUE")); assertThat(code, containsOne("Byte.MIN_VALUE, Byte.MAX_VALUE")); diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill.java index 9768a1afe..a7b46934c 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill.java @@ -13,7 +13,7 @@ public class TestArrayFill extends IntegrationTest { public static class TestCls { public String[] method() { - return new String[]{"1", "2", "3"}; + return new String[] { "1", "2", "3" }; } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill2.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill2.java index 1ef487398..896635a59 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill2.java @@ -14,7 +14,7 @@ public class TestArrayFill2 extends IntegrationTest { public static class TestCls { public int[] test(int a) { - return new int[]{1, a + 1, 2}; + return new int[] { 1, a + 1, 2 }; } } @@ -29,7 +29,7 @@ public class TestArrayFill2 extends IntegrationTest { public static class TestCls2 { public int[] test2(int a) { - return new int[]{1, a++, a * 2}; + return new int[] { 1, a++, a * 2 }; } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill3.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill3.java index c52afd3e8..e2b9791af 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill3.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFill3.java @@ -1,9 +1,10 @@ package jadx.tests.integration.arrays; +import org.junit.jupiter.api.Test; + import jadx.NotYetImplemented; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; -import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; @@ -13,7 +14,7 @@ public class TestArrayFill3 extends IntegrationTest { public static class TestCls { public byte[] test(int a) { - return new byte[]{0, 1, 2}; + return new byte[] { 0, 1, 2 }; } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFillConstReplace.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFillConstReplace.java index 960c30b38..cad78ca21 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFillConstReplace.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayFillConstReplace.java @@ -14,7 +14,7 @@ public class TestArrayFillConstReplace extends IntegrationTest { public static final int CONST_INT = 0xffff; public int[] test() { - return new int[]{127, 129, CONST_INT}; + return new int[] { 127, 129, CONST_INT }; } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInit.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInit.java index 5cd7c59a0..945fda785 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInit.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInit.java @@ -1,8 +1,9 @@ package jadx.tests.integration.arrays; +import org.junit.jupiter.api.Test; + import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; -import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; @@ -15,11 +16,11 @@ public class TestArrayInit extends IntegrationTest { @SuppressWarnings("unused") public void test() { - byte[] arr = new byte[]{10, 20, 30}; + byte[] arr = new byte[] { 10, 20, 30 }; } public void test2() { - bytes = new byte[]{10, 20, 30}; + bytes = new byte[] { 10, 20, 30 }; } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInitField.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInitField.java index 5f9726fce..e5ee0e96e 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInitField.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInitField.java @@ -1,8 +1,9 @@ package jadx.tests.integration.arrays; +import org.junit.jupiter.api.Test; + import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; -import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; @@ -11,8 +12,8 @@ public class TestArrayInitField extends IntegrationTest { public static class TestCls { - static byte[] a = new byte[]{10, 20, 30}; - byte[] b = new byte[]{40, 50, 60}; + static byte[] a = new byte[] { 10, 20, 30 }; + byte[] b = new byte[] { 40, 50, 60 }; } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays.java index 59adc5fa0..59292e1bc 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays.java @@ -12,7 +12,7 @@ public class TestArrays extends IntegrationTest { public static class TestCls { public int test1(int i) { - int[] a = new int[]{1, 2, 3, 5}; + int[] a = new int[] { 1, 2, 3, 5 }; return a[i]; } diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays2.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays2.java index d68e769eb..d92fa572d 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays2.java @@ -14,13 +14,13 @@ public class TestArrays2 extends IntegrationTest { private static Object test4(int type) { if (type == 1) { - return new int[]{1, 2}; + return new int[] { 1, 2 }; } else if (type == 2) { - return new float[]{1, 2}; + return new float[] { 1, 2 }; } else if (type == 3) { - return new short[]{1, 2}; + return new short[] { 1, 2 }; } else if (type == 4) { - return new byte[]{1, 2}; + return new byte[] { 1, 2 }; } else { return null; } diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays3.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays3.java index 28d10cd7a..5f7e7488f 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays3.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrays3.java @@ -14,11 +14,11 @@ public class TestArrays3 extends IntegrationTest { public static class TestCls { private Object test(byte[] bArr) { - return new Object[]{bArr}; + return new Object[] { bArr }; } public void check() { - byte[] inputArr = {1, 2}; + byte[] inputArr = { 1, 2 }; Object result = test(inputArr); assertThat(result, instanceOf(Object[].class)); assertThat(((Object[]) result)[0], is(inputArr)); diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestMultiDimArrayFill.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestMultiDimArrayFill.java index c4f9fcb21..e5ecc39bb 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestMultiDimArrayFill.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestMultiDimArrayFill.java @@ -14,19 +14,19 @@ public class TestMultiDimArrayFill extends IntegrationTest { public static Obj test(int a, int b) { return new Obj( - new int[][]{ - new int[]{1}, - new int[]{2}, - {3}, - new int[]{4, 5}, + new int[][] { + new int[] { 1 }, + new int[] { 2 }, + { 3 }, + new int[] { 4, 5 }, new int[0] }, - new int[]{a, a, a, a, b} - ); + new int[] { a, a, a, a, b }); } private static class Obj { - public Obj(int[][] ints, int[] ints2) {} + public Obj(int[][] ints, int[] ints2) { + } } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestRedundantType.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestRedundantType.java index 93ddc6a5f..87aef843a 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestRedundantType.java +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestRedundantType.java @@ -1,7 +1,5 @@ package jadx.tests.integration.arrays; -import static org.junit.jupiter.api.Assertions.assertEquals; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; @@ -9,13 +7,14 @@ import jadx.tests.api.IntegrationTest; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; public class TestRedundantType extends IntegrationTest { public static class TestCls { public byte[] method() { - return new byte[]{10, 11, 12}; + return new byte[] { 10, 11, 12 }; } } @@ -35,7 +34,7 @@ public class TestRedundantType extends IntegrationTest { arr[20] = 127; arr[30] = (byte) 128; arr[40] = (byte) 129; - return arr; + return arr; } } @@ -59,7 +58,7 @@ public class TestRedundantType extends IntegrationTest { arr[20] = 32767; arr[30] = (short) 32768; arr[40] = (short) 32769; - return arr; + return arr; } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToByte.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToByte.java index 952f9eb51..016e452b1 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToByte.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToByte.java @@ -1,25 +1,27 @@ package jadx.tests.integration.conditions; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestBooleanToByte extends SmaliTest { + // @formatter:off /** - private boolean showConsent; + private boolean showConsent; - public void write(byte b) { - } + public void write(byte b) { + } - public void writeToParcel(TestBooleanToByte testBooleanToByte) { - testBooleanToByte.write(this.showConsent ? (byte) 1 : 0); - } - */ + public void writeToParcel(TestBooleanToByte testBooleanToByte) { + testBooleanToByte.write(this.showConsent ? (byte) 1 : 0); + } + */ + // @formatter:on @Test public void test() { ClassNode cls = getClassNodeFromSmaliWithPath("conditions", "TestBooleanToByte"); diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToChar.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToChar.java index ed972dbbb..d9c03f28c 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToChar.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToChar.java @@ -1,25 +1,27 @@ package jadx.tests.integration.conditions; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestBooleanToChar extends SmaliTest { + // @formatter:off /** - private boolean showConsent; + private boolean showConsent; - public void write(char b) { - } + public void write(char b) { + } - public void writeToParcel(TestBooleanToChar testBooleanToChar) { - testBooleanToChar.write(this.showConsent ? (char) 1 : 0); - } + public void writeToParcel(TestBooleanToChar testBooleanToChar) { + testBooleanToChar.write(this.showConsent ? (char) 1 : 0); + } */ + // @formatter:on @Test public void test() { ClassNode cls = getClassNodeFromSmaliWithPath("conditions", "TestBooleanToChar"); diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToDouble.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToDouble.java index 93ea13556..33deaa9ce 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToDouble.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToDouble.java @@ -1,25 +1,27 @@ package jadx.tests.integration.conditions; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestBooleanToDouble extends SmaliTest { + // @formatter:off /** - private boolean showConsent; + private boolean showConsent; - public void write(double d) { - } + public void write(double d) { + } - public void writeToParcel(TestBooleanToDouble testBooleanToDouble) { - testBooleanToDouble.write(this.showConsent ? 1 : 0); - } - */ + public void writeToParcel(TestBooleanToDouble testBooleanToDouble) { + testBooleanToDouble.write(this.showConsent ? 1 : 0); + } + */ + // @formatter:on @Test public void test() { ClassNode cls = getClassNodeFromSmaliWithPath("conditions", "TestBooleanToDouble"); diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToFloat.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToFloat.java index 1ba74e92f..d53cc5ce0 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToFloat.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToFloat.java @@ -1,25 +1,27 @@ package jadx.tests.integration.conditions; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestBooleanToFloat extends SmaliTest { + // @formatter:off /** - private boolean showConsent; + private boolean showConsent; - public void write(float f) { - } + public void write(float f) { + } - public void writeToParcel(TestBooleanToFloat testBooleanToFloat) { - testBooleanToFloat.write(this.showConsent ? 1 : 0); - } - */ + public void writeToParcel(TestBooleanToFloat testBooleanToFloat) { + testBooleanToFloat.write(this.showConsent ? 1 : 0); + } + */ + // @formatter:on @Test public void test() { ClassNode cls = getClassNodeFromSmaliWithPath("conditions", "TestBooleanToFloat"); diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToInt.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToInt.java index af8424ff9..ee75fc9f4 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToInt.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToInt.java @@ -1,25 +1,27 @@ package jadx.tests.integration.conditions; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestBooleanToInt extends SmaliTest { + //@formatter:off /** - private boolean showConsent; + private boolean showConsent; - public void write(int b) { - } + public void write(int b) { + } - public void writeToParcel(TestBooleanToInt testBooleanToInt) { - testBooleanToInt.write(this.showConsent ? 1 : 0); - } - */ + public void writeToParcel(TestBooleanToInt testBooleanToInt) { + testBooleanToInt.write(this.showConsent ? 1 : 0); + } + */ + //@formatter:on @Test public void test() { ClassNode cls = getClassNodeFromSmaliWithPath("conditions", "TestBooleanToInt"); diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToLong.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToLong.java index 7e557c4bf..7df5b9994 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToLong.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToLong.java @@ -1,25 +1,27 @@ package jadx.tests.integration.conditions; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestBooleanToLong extends SmaliTest { + // @formatter:off /** - private boolean showConsent; + private boolean showConsent; - public void write(long j) { - } + public void write(long j) { + } - public void writeToParcel(TestBooleanToLong testBooleanToLong) { - testBooleanToLong.write(this.showConsent ? 1 : 0); - } - */ + public void writeToParcel(TestBooleanToLong testBooleanToLong) { + testBooleanToLong.write(this.showConsent ? 1 : 0); + } + */ + // @formatter:on @Test public void test() { ClassNode cls = getClassNodeFromSmaliWithPath("conditions", "TestBooleanToLong"); diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToShort.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToShort.java index 80a211727..e2fd2afff 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToShort.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestBooleanToShort.java @@ -1,25 +1,27 @@ package jadx.tests.integration.conditions; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestBooleanToShort extends SmaliTest { + // @formatter:off /** - private boolean showConsent; + private boolean showConsent; - public void write(short b) { - } + public void write(short b) { + } - public void writeToParcel(TestBooleanToShort testBooleanToShort) { - testBooleanToShort.write(this.showConsent ? (short) 1 : 0); - } - */ + public void writeToParcel(TestBooleanToShort testBooleanToShort) { + testBooleanToShort.write(this.showConsent ? (short) 1 : 0); + } + */ + // @formatter:on @Test public void test() { ClassNode cls = getClassNodeFromSmaliWithPath("conditions", "TestBooleanToShort"); diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestCast.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestCast.java index 44fc3aa78..af1a9ddfb 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestCast.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestCast.java @@ -1,13 +1,13 @@ package jadx.tests.integration.conditions; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestCast extends IntegrationTest { public static class TestCls { @@ -41,6 +41,7 @@ public class TestCast extends IntegrationTest { public void write(byte b) { } + public void write(short b) { } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestComplexIf.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestComplexIf.java index 9fc863ec3..170df93ab 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestComplexIf.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestComplexIf.java @@ -10,30 +10,32 @@ import static org.hamcrest.MatcherAssert.assertThat; public class TestComplexIf extends SmaliTest { -/* - public final class TestComplexIf { - private String a; - private int b; - private float c; + // @formatter:off + /* + public final class TestComplexIf { + private String a; + private int b; + private float c; - public final boolean test() { - if (this.a.equals("GT-P6200") || this.a.equals("GT-P6210") || ... ) { - return true; - } - if (this.a.equals("SM-T810") || this.a.equals("SM-T813") || ...) { - return false; - } - return this.c > 160.0f ? true : this.c <= 0.0f && ((this.b & 15) == 4 ? 1 : null) != null; - } - } - */ + public final boolean test() { + if (this.a.equals("GT-P6200") || this.a.equals("GT-P6210") || ... ) { + return true; + } + if (this.a.equals("SM-T810") || this.a.equals("SM-T813") || ...) { + return false; + } + return this.c > 160.0f ? true : this.c <= 0.0f && ((this.b & 15) == 4 ? 1 : null) != null; + } + } + */ + // @formatter:on @Test public void test() { ClassNode cls = getClassNodeFromSmaliWithPkg("conditions", "TestComplexIf"); String code = cls.getCode().toString(); - assertThat(code, containsOne("if (this.a.equals(\"GT-P6200\") || this.a.equals(\"GT-P6210\") || this.a.equals(\"A100\") " + - "|| this.a.equals(\"A101\") || this.a.equals(\"LIFETAB_S786X\") || this.a.equals(\"VS890 4G\")) {")); + assertThat(code, containsOne("if (this.a.equals(\"GT-P6200\") || this.a.equals(\"GT-P6210\") || this.a.equals(\"A100\") " + + "|| this.a.equals(\"A101\") || this.a.equals(\"LIFETAB_S786X\") || this.a.equals(\"VS890 4G\")) {")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestComplexIf2.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestComplexIf2.java index 8b0609c42..8cbde0e09 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestComplexIf2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestComplexIf2.java @@ -10,22 +10,24 @@ import static org.hamcrest.MatcherAssert.assertThat; public class TestComplexIf2 extends SmaliTest { -/* - public void test() { - if (this.isSaved) { - throw new RuntimeException("Error"); - } - if (LoaderUtils.isContextLoaderAvailable()) { - this.savedContextLoader = LoaderUtils.getContextClassLoader(); - ClassLoader loader = this; - if (this.project != null && "simple".equals(this.project)) { - loader = getClass().getClassLoader(); - } - LoaderUtils.setContextClassLoader(loader); - this.isSaved = true; - } - } -*/ + // @formatter:off + /* + public void test() { + if (this.isSaved) { + throw new RuntimeException("Error"); + } + if (LoaderUtils.isContextLoaderAvailable()) { + this.savedContextLoader = LoaderUtils.getContextClassLoader(); + ClassLoader loader = this; + if (this.project != null && "simple".equals(this.project)) { + loader = getClass().getClassLoader(); + } + LoaderUtils.setContextClassLoader(loader); + this.isSaved = true; + } + } + */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestConditions17.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestConditions17.java index beb9e30b3..21d93973a 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestConditions17.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestConditions17.java @@ -1,13 +1,13 @@ package jadx.tests.integration.conditions; -import static jadx.tests.api.utils.JadxMatchers.containsOne; -import static org.hamcrest.MatcherAssert.assertThat; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.hamcrest.MatcherAssert.assertThat; + public class TestConditions17 extends IntegrationTest { public static class TestCls { diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestSwitchTryBreak.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestSwitchTryBreak.java index 7da8b4912..43200f8ac 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestSwitchTryBreak.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestSwitchTryBreak.java @@ -10,7 +10,7 @@ public class TestSwitchTryBreak extends IntegrationTest { public static class TestCls { public void test(int x) { - switch(x) { + switch (x) { case 0: return; case 1: diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestSwitchTryBreak2.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestSwitchTryBreak2.java index 5c55396c4..d8c4c9ba8 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestSwitchTryBreak2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestSwitchTryBreak2.java @@ -10,7 +10,7 @@ public class TestSwitchTryBreak2 extends IntegrationTest { public static class TestCls { public void test(int x) { - switch(x) { + switch (x) { case 0: return; case 1: diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestTernary.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestTernary.java index 5a99c419f..c6c9c555f 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestTernary.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestTernary.java @@ -24,7 +24,8 @@ public class TestTernary extends IntegrationTest { return a > 0 ? a : (a + 2) * 3; } - private static void checkTrue(boolean v) {} + private static void checkTrue(boolean v) { + } } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestTernaryInIf2.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestTernaryInIf2.java index 42265f7c6..b60b0cba0 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestTernaryInIf2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestTernaryInIf2.java @@ -1,27 +1,27 @@ package jadx.tests.integration.conditions; -import static jadx.tests.api.utils.JadxMatchers.containsLines; -import static org.hamcrest.MatcherAssert.assertThat; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static jadx.tests.api.utils.JadxMatchers.containsLines; +import static org.hamcrest.MatcherAssert.assertThat; + public class TestTernaryInIf2 extends SmaliTest { public static class TestCls { - private String a; - private String b; + private String a; + private String b; - public boolean equals(TestCls other) { - if (this.a == null ? other.a == null : this.a.equals(other.a)) { - if (this.b == null ? other.b == null : this.b.equals(other.b)) { - return true; - } - } - return false; - } + public boolean equals(TestCls other) { + if (this.a == null ? other.a == null : this.a.equals(other.a)) { + if (this.b == null ? other.b == null : this.b.equals(other.b)) { + return true; + } + } + return false; + } } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestXor.java b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestXor.java index b49253635..7375a6a40 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/conditions/TestXor.java +++ b/jadx-core/src/test/java/jadx/tests/integration/conditions/TestXor.java @@ -1,13 +1,13 @@ package jadx.tests.integration.conditions; -import static jadx.tests.api.utils.JadxMatchers.containsOne; -import static org.hamcrest.MatcherAssert.assertThat; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.hamcrest.MatcherAssert.assertThat; + public class TestXor extends SmaliTest { public static class TestCls { @@ -35,6 +35,7 @@ public class TestXor extends SmaliTest { @Test public void smali() { + // @formatter:off /* public boolean test1() { return test() ^ true; @@ -48,6 +49,8 @@ public class TestXor extends SmaliTest { return true; } */ + // @formatter:on + ClassNode cls = getClassNodeFromSmaliWithPath("conditions", "TestXor"); String code = cls.getCode().toString(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/debuginfo/TestVariablesNames.java b/jadx-core/src/test/java/jadx/tests/integration/debuginfo/TestVariablesNames.java index 356c80a66..92994adad 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/debuginfo/TestVariablesNames.java +++ b/jadx-core/src/test/java/jadx/tests/integration/debuginfo/TestVariablesNames.java @@ -9,29 +9,31 @@ import static jadx.tests.api.utils.JadxMatchers.containsOne; import static org.hamcrest.MatcherAssert.assertThat; public class TestVariablesNames extends SmaliTest { -/* - public static class TestCls { + // @formatter:off + /* + public static class TestCls { - public void test(String s, int k) { - f1(s); - int i = k + 3; - String s2 = "i" + i; - f2(i, s2); - double d = i * 5; - String s3 = "d" + d; - f3(d, s3); - } + public void test(String s, int k) { + f1(s); + int i = k + 3; + String s2 = "i" + i; + f2(i, s2); + double d = i * 5; + String s3 = "d" + d; + f3(d, s3); + } - private void f1(String s) { - } + private void f1(String s) { + } - private void f2(int i, String i2) { - } + private void f2(int i, String i2) { + } - private void f3(double d, String d2) { + private void f3(double d, String d2) { + } } - } -*/ + */ + // @formatter:on /** * Parameter register reused in variables assign with different types and names diff --git a/jadx-core/src/test/java/jadx/tests/integration/deobf/TestMthRename.java b/jadx-core/src/test/java/jadx/tests/integration/deobf/TestMthRename.java index 44147cf5a..55c84a034 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/deobf/TestMthRename.java +++ b/jadx-core/src/test/java/jadx/tests/integration/deobf/TestMthRename.java @@ -13,7 +13,7 @@ public class TestMthRename extends IntegrationTest { public static class TestCls { - public static abstract class TestAbstractCls { + public abstract static class TestAbstractCls { public abstract void a(); } diff --git a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums.java b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums.java index 54accdbe2..1f64482bb 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums.java +++ b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums.java @@ -15,6 +15,7 @@ public class TestEnums extends IntegrationTest { public enum EmptyEnum { } + @SuppressWarnings("NoWhitespaceBefore") public enum EmptyEnum2 { ; diff --git a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums2.java b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums2.java index 2aafe0245..0cb362bf5 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums2.java @@ -47,7 +47,6 @@ public class TestEnums2 extends IntegrationTest { indent(1) + "};", "", indent(1) + "public abstract int apply(int i, int i2);", - "}" - )); + "}")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums3.java b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums3.java index 5967abe12..50810c759 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums3.java +++ b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums3.java @@ -42,8 +42,8 @@ public class TestEnums3 extends IntegrationTest { String code = cls.getCode().toString(); assertThat(code, containsOne("ONE(1)")); -// assertThat(code, containsOne("THREE(three)")); -// assertThat(code, containsOne("assertTrue(Numbers.ONE.getNum() == 1);")); + // assertThat(code, containsOne("THREE(three)")); + // assertThat(code, containsOne("assertTrue(Numbers.ONE.getNum() == 1);")); assertThat(code, containsOne("private Numbers(int n) {")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums4.java b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums4.java index 1f8ac85fc..8318c05aa 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums4.java +++ b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnums4.java @@ -34,7 +34,7 @@ public class TestEnums4 extends IntegrationTest { } public void check() { - assertThat(ResType.CODE.getExts(), is(new String[]{".dex", ".class"})); + assertThat(ResType.CODE.getExts(), is(new String[] { ".dex", ".class" })); } } @@ -45,6 +45,6 @@ public class TestEnums4 extends IntegrationTest { assertThat(code, containsOne("CODE(\".dex\", \".class\"),")); assertThat(code, containsOne("ResType(String... extensions) {")); -// assertThat(code, not(containsString("private ResType"))); + // assertThat(code, not(containsString("private ResType"))); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnumsInterface.java b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnumsInterface.java index 35e78e72c..9ead73094 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnumsInterface.java +++ b/jadx-core/src/test/java/jadx/tests/integration/enums/TestEnumsInterface.java @@ -47,7 +47,6 @@ public class TestEnumsInterface extends IntegrationTest { indent(3) + "return x - y;", indent(2) + '}', indent(1) + '}', - "}" - )); + "}")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/generics/MissingGenericsTypesTest.java b/jadx-core/src/test/java/jadx/tests/integration/generics/MissingGenericsTypesTest.java index c1521da29..8e4215e3f 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/generics/MissingGenericsTypesTest.java +++ b/jadx-core/src/test/java/jadx/tests/integration/generics/MissingGenericsTypesTest.java @@ -10,7 +10,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; public class MissingGenericsTypesTest extends SmaliTest { - + // @formatter:off /* private int x; @@ -22,6 +22,7 @@ public class MissingGenericsTypesTest extends SmaliTest { } } */ + // @formatter:on @Test @NotYetImplemented diff --git a/jadx-core/src/test/java/jadx/tests/integration/generics/TestGenerics7.java b/jadx-core/src/test/java/jadx/tests/integration/generics/TestGenerics7.java index 38d72baa1..b1691e173 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/generics/TestGenerics7.java +++ b/jadx-core/src/test/java/jadx/tests/integration/generics/TestGenerics7.java @@ -1,13 +1,13 @@ package jadx.tests.integration.generics; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestGenerics7 extends IntegrationTest { public static class TestCls { @@ -17,11 +17,11 @@ public class TestGenerics7 extends IntegrationTest { } public T declare(Class cls) { - return null; - } + return null; + } public void declare(Object cls) { - } + } } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/generics/TestImportGenericMap.java b/jadx-core/src/test/java/jadx/tests/integration/generics/TestImportGenericMap.java index f80208be2..5f0cc280b 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/generics/TestImportGenericMap.java +++ b/jadx-core/src/test/java/jadx/tests/integration/generics/TestImportGenericMap.java @@ -32,8 +32,8 @@ public class TestImportGenericMap extends IntegrationTest { String code = cls.getCode().toString(); assertThat(code, containsString( - "import " + SuperClass.ToImport.class.getName().replace("$ToImport", ".ToImport") + ';')); + "import " + SuperClass.ToImport.class.getName().replace("$ToImport", ".ToImport") + ';')); assertThat(code, not(containsString( - "import " + SuperClass.NotToImport.class.getName().replace("NotToImport", ".NotToImport") + ';'))); + "import " + SuperClass.NotToImport.class.getName().replace("NotToImport", ".NotToImport") + ';'))); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline2.java b/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline2.java index d1ab9c2db..e6c4adffb 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline2.java @@ -12,7 +12,7 @@ public class TestInline2 extends IntegrationTest { public static class TestCls { public int test() throws InterruptedException { - int[] a = new int[]{1, 2, 4, 6, 8}; + int[] a = new int[] { 1, 2, 4, 6, 8 }; int b = 0; for (int i = 0; i < a.length; i += 2) { b += a[i]; diff --git a/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline7.java b/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline7.java index 7f1b1a4d8..9a6258c80 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline7.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline7.java @@ -12,19 +12,21 @@ import static org.hamcrest.MatcherAssert.assertThat; public class TestInline7 extends SmaliTest { -/* - public void onViewCreated(View view, @Nullable Bundle bundle) { - super.onViewCreated(view, bundle); - view.findViewById(R.id.done_button_early_release_failure).setOnClickListener(new SafeClickListener(this)); - Bundle arguments = getArguments(); - if (arguments != null) { - ((TextView) view.findViewById(R.id.summary_content_early_release_failure)).setText( - getString(R.string.withdraw_id_capture_failure_content, - new Object[]{arguments.getString("withdrawAmount"), arguments.getString ("withdrawHoldTime")}) - ); - } - } -*/ + // @formatter:off + /* + public void onViewCreated(View view, @Nullable Bundle bundle) { + super.onViewCreated(view, bundle); + view.findViewById(R.id.done_button_early_release_failure).setOnClickListener(new SafeClickListener(this)); + Bundle arguments = getArguments(); + if (arguments != null) { + ((TextView) view.findViewById(R.id.summary_content_early_release_failure)).setText( + getString(R.string.withdraw_id_capture_failure_content, + new Object[]{arguments.getString("withdrawAmount"), arguments.getString ("withdrawHoldTime")}) + ); + } + } + */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/inline/TestIssue86.java b/jadx-core/src/test/java/jadx/tests/integration/inline/TestIssue86.java index 2b8587f22..47c38b392 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inline/TestIssue86.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inline/TestIssue86.java @@ -30,7 +30,7 @@ public class TestIssue86 extends IntegrationTest { System.out.println(response); if (response != null && (response.startsWith(SERVER_ERR) - || response.startsWith(NOT_FOUND))) { + || response.startsWith(NOT_FOUND))) { return reportList; } JSONObject jsonObj = new JSONObject(response); diff --git a/jadx-core/src/test/java/jadx/tests/integration/inline/TestSyntheticInline.java b/jadx-core/src/test/java/jadx/tests/integration/inline/TestSyntheticInline.java index 3299cf9d2..140e78a4f 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inline/TestSyntheticInline.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inline/TestSyntheticInline.java @@ -43,8 +43,8 @@ public class TestSyntheticInline extends IntegrationTest { assertThat(code, not(containsString("x0"))); assertThat(code, containsString("f = v;")); -// assertThat(code, containsString("return f;")); -// assertThat(code, containsString("return func();")); + // assertThat(code, containsString("return f;")); + // assertThat(code, containsString("return func();")); // Temporary solution assertThat(code, containsString("return TestSyntheticInline$TestCls.this.f;")); assertThat(code, containsString("return TestSyntheticInline$TestCls.this.func();")); diff --git a/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass14.java b/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass14.java index 0b998531a..ad2e4df72 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass14.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass14.java @@ -10,42 +10,35 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; public class TestAnonymousClass14 extends SmaliTest { - + // @formatter:off /* public class OuterCls implements Runnable { - class AnonymousClass1 { - AnonymousClass1(Runnable runnable) { - } - - public void someMethod() { - } - } class TestCls { private TestCls() { - ArrayList arrayList = new ArrayList(); - } - - synthetic TestCls(OuterCls outerCls, AnonymousClass1 anonymousClass1) { - this(); + new ArrayList(); } } public void makeAnonymousCls() { - AnonymousClass1 anonymousClass1 = new AnonymousClass1(this); + use(new Thread(this) { + public void someMethod() { + } + }); } public void makeTestCls() { - TestCls testCls = new TestCls(this, null); + new TestCls(); } public void run() { } - public void use(AnonymousClass1 anonymousClass1) { + public void use(Thread thread) { } } */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass16.java b/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass16.java index 6fd81a1fd..e380fed25 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass16.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass16.java @@ -25,7 +25,6 @@ public class TestAnonymousClass16 extends IntegrationTest { } } - @Test @NotYetImplemented public void test() { @@ -33,4 +32,3 @@ public class TestAnonymousClass16 extends IntegrationTest { getClassNode(TestCls.class); } } - diff --git a/jadx-core/src/test/java/jadx/tests/integration/inner/TestInnerClassFakeSyntheticConstructor.java b/jadx-core/src/test/java/jadx/tests/integration/inner/TestInnerClassFakeSyntheticConstructor.java index 040c66cb6..f4634caf3 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inner/TestInnerClassFakeSyntheticConstructor.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inner/TestInnerClassFakeSyntheticConstructor.java @@ -10,18 +10,22 @@ import static org.hamcrest.MatcherAssert.assertThat; public class TestInnerClassFakeSyntheticConstructor extends SmaliTest { -// public class TestCls { -// public /* synthetic */ TestCls(String a) { -// this(a, true); -// } -// -// public TestCls(String a, boolean b) { -// } -// -// public static TestCls build(String str) { -// return new TestCls(str); -// } -// } + // @formatter:off + /* + public class TestCls { + public synthetic TestCls(String a) { + this(a, true); + } + + public TestCls(String a, boolean b) { + } + + public static TestCls build(String str) { + return new TestCls(str); + } + } + */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/inner/TestInnerClassSyntheticRename.java b/jadx-core/src/test/java/jadx/tests/integration/inner/TestInnerClassSyntheticRename.java index 345bc2df8..888a14784 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inner/TestInnerClassSyntheticRename.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inner/TestInnerClassSyntheticRename.java @@ -14,19 +14,22 @@ import static org.hamcrest.Matchers.not; * Issue: https://github.com/skylot/jadx/issues/336 */ public class TestInnerClassSyntheticRename extends SmaliTest { + // @formatter:off + /* + private class MyAsync extends AsyncTask> { + @Override + protected List doInBackground(Uri... uris) { + Log.i("MyAsync", "doInBackground"); + return null; + } -// private class MyAsync extends AsyncTask> { -// @Override -// protected List doInBackground(Uri... uris) { -// Log.i("MyAsync", "doInBackground"); -// return null; -// } -// -// @Override -// protected void onPostExecute(List uris) { -// Log.i("MyAsync", "onPostExecute"); -// } -// } + @Override + protected void onPostExecute(List uris) { + Log.i("MyAsync", "onPostExecute"); + } + } + */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/inner/TestRFieldAccess.java b/jadx-core/src/test/java/jadx/tests/integration/inner/TestRFieldAccess.java index 2283faf4d..7f01c2965 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inner/TestRFieldAccess.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inner/TestRFieldAccess.java @@ -8,17 +8,18 @@ import jadx.tests.api.IntegrationTest; import static jadx.tests.api.utils.JadxMatchers.countString; import static org.hamcrest.MatcherAssert.assertThat; +@SuppressWarnings("TypeName") public class TestRFieldAccess extends IntegrationTest { public static class R { public static final class id { - public static final int Button01 = 2131230730; + public static final int BUTTON_01 = 2131230730; } } public static class TestR { public int test() { - return R.id.Button01; + return R.id.BUTTON_01; } } @@ -26,6 +27,6 @@ public class TestRFieldAccess extends IntegrationTest { public void test() { ClassNode cls = getClassNode(TestRFieldAccess.class); String code = cls.getCode().toString(); - assertThat(code, countString(2, "return R.id.Button01;")); + assertThat(code, countString(2, "return R.id.BUTTON_01;")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/inner/TestSyntheticMthRename.java b/jadx-core/src/test/java/jadx/tests/integration/inner/TestSyntheticMthRename.java index 33033b0d7..99e36fb4e 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inner/TestSyntheticMthRename.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inner/TestSyntheticMthRename.java @@ -15,21 +15,25 @@ import static org.hamcrest.Matchers.not; */ public class TestSyntheticMthRename extends SmaliTest { -// public class TestCls { -// public interface I { -// R call(P... p); -// } -// -// public static final class A implements I { -// public /* synthetic */ /* virtual */ Object call(Object[] objArr) { -// return renamedCall((Runnable[]) objArr); -// } -// -// private /* varargs */ /* direct */ String renamedCall(Runnable... p) { -// return "str"; -// } -// } -// } + // @formatter:off + /* + public class TestCls { + public interface I { + R call(P... p); + } + + public static final class A implements I { + public synthetic virtual Object call(Object[] objArr) { + return renamedCall((Runnable[]) objArr); + } + + private varargs direct String renamedCall(Runnable... p) { + return "str"; + } + } + } + */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/invoke/TestVarArg.java b/jadx-core/src/test/java/jadx/tests/integration/invoke/TestVarArg.java index 44df58f12..3ade2867e 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/invoke/TestVarArg.java +++ b/jadx-core/src/test/java/jadx/tests/integration/invoke/TestVarArg.java @@ -24,7 +24,7 @@ public class TestVarArg extends IntegrationTest { void call() { test1(1, 2); test2(3, "1", 7); - test3(new int[]{5, 8}); + test3(new int[] { 5, 8 }); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestArrayForEach.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestArrayForEach.java index bcf8f78b1..7a8807495 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestArrayForEach.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestArrayForEach.java @@ -31,7 +31,6 @@ public class TestArrayForEach extends IntegrationTest { "for (int n : a) {", indent(1) + "sum += n;", "}", - "return sum;" - )); + "return sum;")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestArrayForEach2.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestArrayForEach2.java index 575f5f7b4..172446bc7 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestArrayForEach2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestArrayForEach2.java @@ -36,7 +36,6 @@ public class TestArrayForEach2 extends IntegrationTest { indent(1) + "if (t.length() > 0) {", indent(2) + "System.out.println(t);", indent(1) + '}', - "}" - )); + "}")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop.java index 3094bb260..d15ce5153 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop.java @@ -31,7 +31,7 @@ public class TestBreakInLoop extends IntegrationTest { String code = cls.getCode().toString(); assertThat(code, containsOne("for (int i = 0; i < a.length; i++) {")); -// assertThat(code, containsOne("a[i]++;")); + // assertThat(code, containsOne("a[i]++;")); assertThat(code, containsOne("if (i < b) {")); assertThat(code, containsOne("break;")); assertThat(code, containsOne("this.f++;")); diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop2.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop2.java index a360a4f25..e14eda6b8 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop2.java @@ -15,7 +15,7 @@ public class TestBreakInLoop2 extends IntegrationTest { public static class TestCls { public void test(List data) throws Exception { - for (; ; ) { + for (;;) { try { funcB(data); break; diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop3.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop3.java index 453f3c61d..418026edf 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop3.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakInLoop3.java @@ -1,7 +1,5 @@ package jadx.tests.integration.loops; -import static org.junit.jupiter.api.Assertions.assertEquals; - import java.io.File; import java.io.FileOutputStream; @@ -10,6 +8,8 @@ import org.junit.jupiter.api.Test; import jadx.NotYetImplemented; import jadx.tests.api.IntegrationTest; +import static org.junit.jupiter.api.Assertions.assertEquals; + public class TestBreakInLoop3 extends IntegrationTest { public static class TestCls { @@ -24,7 +24,7 @@ public class TestBreakInLoop3 extends IntegrationTest { try { new FileOutputStream(fid).close(); } catch (Exception ex) { - if (tryMkdir) { // On first error, try creating the base dirs. + if (tryMkdir) { // On first error, try creating the base dirs. tryMkdir = false; prt("2"); continue; diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakWithLabel.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakWithLabel.java index 482634910..0747a56cd 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakWithLabel.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestBreakWithLabel.java @@ -18,8 +18,7 @@ public class TestBreakWithLabel extends IntegrationTest { public boolean test(int[][] arr, int b) { boolean found = false; - loop0: - for (int i = 0; i < arr.length; i++) { + loop0: for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { if (arr[i][j] == b) { found = true; @@ -41,7 +40,7 @@ public class TestBreakWithLabel extends IntegrationTest { assertThat(code, containsOne("break loop0;")); Method test = getReflectMethod("test", int[][].class, int.class); - int[][] testArray = {{1, 2}, {3, 4}}; + int[][] testArray = { { 1, 2 }, { 3, 4 } }; assertTrue((Boolean) invoke(test, testArray, 3)); assertFalse((Boolean) invoke(test, testArray, 5)); } diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestIfInLoop3.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestIfInLoop3.java index df9cc159f..63e2af1ea 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestIfInLoop3.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestIfInLoop3.java @@ -16,7 +16,7 @@ public class TestIfInLoop3 extends IntegrationTest { static boolean placingStone = true; private static boolean test(int xx, int yy) { - int[] extraArray = new int[]{10, 45, 50, 50, 20, 20}; + int[] extraArray = new int[] { 10, 45, 50, 50, 20, 20 }; if (extraArray != null && placingStone) { for (int i = 0; i < extraArray.length; i += 2) { int tX; diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestIndexForLoop.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestIndexForLoop.java index f85ff09fc..72b1ecf73 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestIndexForLoop.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestIndexForLoop.java @@ -22,7 +22,7 @@ public class TestIndexForLoop extends IntegrationTest { } public void check() { - int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; assertEquals(0, test(array, 0)); assertEquals(6, test(array, 3)); assertEquals(36, test(array, 8)); @@ -39,7 +39,6 @@ public class TestIndexForLoop extends IntegrationTest { "for (int i = 0; i < b; i++) {", indent(1) + "sum += a[i];", "}", - "return sum;" - )); + "return sum;")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestIndexedLoop.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestIndexedLoop.java index a73bbaf2d..e936be8c8 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestIndexedLoop.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestIndexedLoop.java @@ -43,10 +43,10 @@ public class TestIndexedLoop extends IntegrationTest { public void check() { assertThat(test(null), nullValue()); - assertThat(test(new File[]{}), nullValue()); + assertThat(test(new File[] {}), nullValue()); File file = new File("f"); - assertThat(test(new File[]{new File("a"), file}), is(file)); + assertThat(test(new File[] { new File("a"), file }), is(file)); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestIterableForEach.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestIterableForEach.java index 4e1b71da1..879aa4e9d 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestIterableForEach.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestIterableForEach.java @@ -30,7 +30,6 @@ public class TestIterableForEach extends IntegrationTest { "for (String s : a) {", indent(1) + "sb.append(s);", "}", - "return sb.toString();" - )); + "return sb.toString();")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops3.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops3.java index 0f73339f8..d267b6db3 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops3.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops3.java @@ -16,8 +16,7 @@ public class TestNestedLoops3 extends IntegrationTest { public int test(int b) { int i; - loop0: - while (true) { + loop0: while (true) { f1(); i = 0; while (true) { diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops4.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops4.java index 33ee3324d..7b8846ccc 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops4.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops4.java @@ -10,24 +10,24 @@ public class TestNestedLoops4 extends IntegrationTest { public static class TestCls { public int testFor() { - int tmp = 1; - for (int i = 10; i > -1; i--) { - if (i > tmp) { - for (int j = 0; j < 54; j += 4) { - if (i < j) { - for (int k = j; k < j + 4; k++) { - if (tmp > k) { - return 0; - } - } - break; - } - } - } - tmp++; - } - return tmp; - } + int tmp = 1; + for (int i = 10; i > -1; i--) { + if (i > tmp) { + for (int j = 0; j < 54; j += 4) { + if (i < j) { + for (int k = j; k < j + 4; k++) { + if (tmp > k) { + return 0; + } + } + break; + } + } + } + tmp++; + } + return tmp; + } } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops5.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops5.java index 02c8ffd14..ae8cb62b1 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops5.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestNestedLoops5.java @@ -1,16 +1,16 @@ package jadx.tests.integration.loops; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.junit.jupiter.api.Assertions.assertEquals; - import org.junit.jupiter.api.Test; import jadx.NotYetImplemented; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.not; +import static org.junit.jupiter.api.Assertions.assertEquals; + public class TestNestedLoops5 extends IntegrationTest { public static class TestCls { diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestNotIndexedLoop.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestNotIndexedLoop.java index 7642a4661..dfa48c674 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestNotIndexedLoop.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestNotIndexedLoop.java @@ -49,10 +49,10 @@ public class TestNotIndexedLoop extends IntegrationTest { public void check() { assertThat(test(null), nullValue()); - assertThat(test(new File[]{}), nullValue()); + assertThat(test(new File[] {}), nullValue()); File file = new File("f"); - assertThat(test(new File[]{new File("a"), file}), is(file)); + assertThat(test(new File[] { new File("a"), file }), is(file)); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestSequentialLoops2.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestSequentialLoops2.java index 28fa94350..3bdfae6bd 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestSequentialLoops2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestSequentialLoops2.java @@ -13,7 +13,7 @@ import static org.hamcrest.MatcherAssert.assertThat; public class TestSequentialLoops2 extends IntegrationTest { public static class TestCls { - private static char[] lowercases = new char[]{'a'}; + private static char[] lowercases = new char[] { 'a' }; public static String asciiToLowerCase(String s) { char[] c = null; diff --git a/jadx-core/src/test/java/jadx/tests/integration/names/TestCaseSensitiveChecks.java b/jadx-core/src/test/java/jadx/tests/integration/names/TestCaseSensitiveChecks.java index 3100e96eb..58e1e4137 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/names/TestCaseSensitiveChecks.java +++ b/jadx-core/src/test/java/jadx/tests/integration/names/TestCaseSensitiveChecks.java @@ -17,9 +17,9 @@ import static org.hamcrest.Matchers.not; public class TestCaseSensitiveChecks extends SmaliTest { /* - public class A {} - public class a {} - */ + * public class A {} + * public class a {} + */ @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/names/TestClassNameWithInvalidChar.java b/jadx-core/src/test/java/jadx/tests/integration/names/TestClassNameWithInvalidChar.java index 263704f10..f86f9b8c2 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/names/TestClassNameWithInvalidChar.java +++ b/jadx-core/src/test/java/jadx/tests/integration/names/TestClassNameWithInvalidChar.java @@ -6,9 +6,9 @@ import jadx.tests.api.SmaliTest; public class TestClassNameWithInvalidChar extends SmaliTest { /* - public class do- {} - public class i-f {} - */ + * public class do- {} + * public class i-f {} + */ @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/names/TestDuplicatedNames.java b/jadx-core/src/test/java/jadx/tests/integration/names/TestDuplicatedNames.java index b0f808322..8969fb373 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/names/TestDuplicatedNames.java +++ b/jadx-core/src/test/java/jadx/tests/integration/names/TestDuplicatedNames.java @@ -9,6 +9,8 @@ import static jadx.tests.api.utils.JadxMatchers.containsOne; import static org.hamcrest.MatcherAssert.assertThat; public class TestDuplicatedNames extends SmaliTest { + + // @formatter:off /* public static class TestCls { @@ -24,6 +26,8 @@ public class TestDuplicatedNames extends SmaliTest { } } */ + // @formatter:on + @Test public void test() { commonChecks(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedClassNames.java b/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedClassNames.java index 79db7246e..f98ce3bad 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedClassNames.java +++ b/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedClassNames.java @@ -13,9 +13,9 @@ import static org.hamcrest.Matchers.not; public class TestReservedClassNames extends SmaliTest { /* - public class do { - } - */ + * public class do { + * } + */ @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedNames.java b/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedNames.java index c359657a2..ac8362d46 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedNames.java +++ b/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedNames.java @@ -10,6 +10,8 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; public class TestReservedNames extends SmaliTest { + + // @formatter:off /* public static class TestCls { @@ -21,6 +23,7 @@ public class TestReservedNames extends SmaliTest { } } */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/names/TestSameMethodsNames.java b/jadx-core/src/test/java/jadx/tests/integration/names/TestSameMethodsNames.java index f1384fddd..43d207004 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/names/TestSameMethodsNames.java +++ b/jadx-core/src/test/java/jadx/tests/integration/names/TestSameMethodsNames.java @@ -21,7 +21,7 @@ public class TestSameMethodsNames extends IntegrationTest { System.out.println("constructor"); } - @SuppressWarnings("MethodNameSameAsClassName") + @SuppressWarnings({ "MethodName", "MethodNameSameAsClassName" }) void Bug() { System.out.println("Bug"); } diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestBadMethodAccessModifiers.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestBadMethodAccessModifiers.java index 201b4c808..a61292c54 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/others/TestBadMethodAccessModifiers.java +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestBadMethodAccessModifiers.java @@ -11,6 +11,7 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; public class TestBadMethodAccessModifiers extends SmaliTest { + // @formatter:off /* public static class TestCls { @@ -24,6 +25,7 @@ public class TestBadMethodAccessModifiers extends SmaliTest { } } */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestCastOfNull.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestCastOfNull.java index cead0dd10..cb6051923 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/others/TestCastOfNull.java +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestCastOfNull.java @@ -1,14 +1,13 @@ package jadx.tests.integration.others; -import static jadx.tests.api.utils.JadxMatchers.containsOne; -import static org.hamcrest.MatcherAssert.assertThat; - import org.junit.jupiter.api.Test; -import jadx.NotYetImplemented; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.hamcrest.MatcherAssert.assertThat; + public class TestCastOfNull extends IntegrationTest { public static class TestCls { @@ -20,6 +19,7 @@ public class TestCastOfNull extends IntegrationTest { public void m(long[] a) { } + public void m(String s) { } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestFieldInitInTryCatch.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestFieldInitInTryCatch.java index 7e811f493..241196f5b 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/others/TestFieldInitInTryCatch.java +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestFieldInitInTryCatch.java @@ -15,11 +15,11 @@ import static org.hamcrest.MatcherAssert.assertThat; public class TestFieldInitInTryCatch extends IntegrationTest { public static class TestCls { - public static final URL a; + public static final URL A; static { try { - a = new URL("http://www.example.com/"); + A = new URL("http://www.example.com/"); } catch (MalformedURLException e) { throw new RuntimeException(e); } @@ -27,11 +27,11 @@ public class TestFieldInitInTryCatch extends IntegrationTest { } public static class TestCls2 { - public static final URL[] a; + public static final URL[] A; static { try { - a = new URL[]{new URL("http://www.example.com/")}; + A = new URL[] { new URL("http://www.example.com/") }; } catch (MalformedURLException e) { throw new RuntimeException(e); } @@ -39,11 +39,11 @@ public class TestFieldInitInTryCatch extends IntegrationTest { } public static class TestCls3 { - public static final String[] a; + public static final String[] A; static { try { - a = new String[]{"a"}; + A = new String[] { "a" }; // Note: follow code will not be extracted: // a = new String[]{new String("a")}; new URL("http://www.example.com/"); @@ -58,11 +58,11 @@ public class TestFieldInitInTryCatch extends IntegrationTest { ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); - assertThat(code, containsOne("public static final URL a;")); - assertThat(code, containsOne("a = new URL(\"http://www.example.com/\");")); + assertThat(code, containsOne("public static final URL A;")); + assertThat(code, containsOne("A = new URL(\"http://www.example.com/\");")); assertThat(code, containsLines(2, "try {", - indent(1) + "a = new URL(\"http://www.example.com/\");", + indent(1) + "A = new URL(\"http://www.example.com/\");", "} catch (MalformedURLException e) {")); } @@ -73,7 +73,7 @@ public class TestFieldInitInTryCatch extends IntegrationTest { assertThat(code, containsLines(2, "try {", - indent(1) + "a = new URL[]{new URL(\"http://www.example.com/\")};", + indent(1) + "A = new URL[]{new URL(\"http://www.example.com/\")};", "} catch (MalformedURLException e) {")); } @@ -82,6 +82,6 @@ public class TestFieldInitInTryCatch extends IntegrationTest { ClassNode cls = getClassNode(TestCls3.class); String code = cls.getCode().toString(); - assertThat(code, containsOne("public static final String[] a = {\"a\"};")); + assertThat(code, containsOne("public static final String[] A = {\"a\"};")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestIfTryInCatch.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestIfTryInCatch.java index 14319024a..58515232b 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/others/TestIfTryInCatch.java +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestIfTryInCatch.java @@ -23,8 +23,8 @@ public class TestIfTryInCatch extends IntegrationTest { if (a(e) && b(obj)) { try { return f(); - } catch (Exception e2) { - e = e2; + } catch (Exception exc) { + e = exc; } } System.out.println("Exception" + e); diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestIssue13a.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestIssue13a.java index b2d63d5e9..0a32fc27b 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/others/TestIssue13a.java +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestIssue13a.java @@ -2,6 +2,7 @@ package jadx.tests.integration.others; import java.lang.reflect.Field; import java.util.HashMap; +import java.util.Map; import org.junit.jupiter.api.Test; @@ -17,8 +18,7 @@ public class TestIssue13a extends IntegrationTest { public static class TestCls { private static final String TAG = "Parcel"; - private static final HashMap>> - mCreators = new HashMap<>(); + private static final Map>> M_CREATORS = new HashMap<>(); @SuppressWarnings("unchecked") public final T test(ClassLoader loader) { @@ -27,17 +27,16 @@ public class TestIssue13a extends IntegrationTest { return null; } Parcelable.Creator creator; - synchronized (mCreators) { - HashMap> map = mCreators.get(loader); + synchronized (M_CREATORS) { + Map> map = M_CREATORS.get(loader); if (map == null) { map = new HashMap<>(); - mCreators.put(loader, map); + M_CREATORS.put(loader, map); } creator = (Parcelable.Creator) map.get(name); if (creator == null) { try { - Class c = loader == null ? - Class.forName(name) : Class.forName(name, true, loader); + Class c = loader == null ? Class.forName(name) : Class.forName(name, true, loader); Field f = c.getField("CREATOR"); creator = (Parcelable.Creator) f.get(null); } catch (IllegalAccessException e) { diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestLoopInTry2.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestLoopInTry2.java index 1b208d62f..24e789b24 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/others/TestLoopInTry2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestLoopInTry2.java @@ -2,10 +2,11 @@ package jadx.tests.integration.others; import java.io.EOFException; +import org.junit.jupiter.api.Test; + import com.android.dex.Code; import com.android.dx.io.instructions.DecodedInstruction; import com.android.dx.io.instructions.ShortArrayCodeInput; -import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.core.dex.nodes.MethodNode; diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestStringConstructor.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestStringConstructor.java index 28269140d..884ed14dc 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/others/TestStringConstructor.java +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestStringConstructor.java @@ -1,8 +1,5 @@ package jadx.tests.integration.others; -import static jadx.tests.api.utils.JadxMatchers.containsOne; -import static org.hamcrest.MatcherAssert.assertThat; - import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Test; @@ -10,10 +7,13 @@ import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.hamcrest.MatcherAssert.assertThat; + public class TestStringConstructor extends IntegrationTest { public static class TestCls { - public String tag = new String(new byte[] {'a', 'b', 'c'}); + public String tag = new String(new byte[] { 'a', 'b', 'c' }); } @Test @@ -25,7 +25,7 @@ public class TestStringConstructor extends IntegrationTest { } public static class TestCls2 { - public String tag = new String(new byte[] {'a', 'b', 'c'}, StandardCharsets.UTF_8); + public String tag = new String(new byte[] { 'a', 'b', 'c' }, StandardCharsets.UTF_8); } @Test @@ -37,7 +37,7 @@ public class TestStringConstructor extends IntegrationTest { } public static class TestCls3 { - public String tag = new String(new byte[] {1, 2, 3, 'a', 'b', 'c'}); + public String tag = new String(new byte[] { 1, 2, 3, 'a', 'b', 'c' }); } @Test @@ -49,7 +49,7 @@ public class TestStringConstructor extends IntegrationTest { } public static class TestCls4 { - public String tag = new String(new char[] {1, 2, 3, 'a', 'b', 'c'}); + public String tag = new String(new char[] { 1, 2, 3, 'a', 'b', 'c' }); } @Test @@ -61,7 +61,7 @@ public class TestStringConstructor extends IntegrationTest { } public static class TestCls5 { - public String tag = new String(new char[] {1, 2, 3, 'a', 'b'}); + public String tag = new String(new char[] { 1, 2, 3, 'a', 'b' }); } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitch2.java b/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitch2.java index e48cffcf9..15f471d7e 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitch2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitch2.java @@ -60,8 +60,8 @@ public class TestSwitch2 extends IntegrationTest { ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); -// assertThat(code, countString(4, "break;")); -// assertThat(code, countString(2, "return;")); + // assertThat(code, countString(4, "break;")); + // assertThat(code, countString(2, "return;")); // TODO: remove redundant break and returns assertThat(code, countString(5, "break;")); diff --git a/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchBreak.java b/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchBreak.java index 135f4ec32..96e5cc2dc 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchBreak.java +++ b/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchBreak.java @@ -17,8 +17,7 @@ public class TestSwitchBreak extends IntegrationTest { public static class TestCls { public String test(int a) { String s = ""; - loop: - while (a > 0) { + loop: while (a > 0) { switch (a % 4) { case 1: s += "1"; diff --git a/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchWithTryCatch.java b/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchWithTryCatch.java index f9c43d222..121da0a09 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchWithTryCatch.java +++ b/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchWithTryCatch.java @@ -62,7 +62,7 @@ public class TestSwitchWithTryCatch extends IntegrationTest { ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); -// assertThat(code, countString(3, "break;")); + // assertThat(code, countString(3, "break;")); assertThat(code, countString(4, "return;")); // TODO: remove redundant break diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestFinally.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestFinally.java index f0ff3195e..a4aa17c32 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestFinally.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestFinally.java @@ -17,7 +17,7 @@ public class TestFinally extends IntegrationTest { String test(Context context, Object uri) { Cursor cursor = null; try { - String[] projection = {DISPLAY_NAME}; + String[] projection = { DISPLAY_NAME }; cursor = context.query(uri, projection); int columnIndex = cursor.getColumnIndexOrThrow(DISPLAY_NAME); cursor.moveToFirst(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestFinallyExtract.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestFinallyExtract.java index 2c4db000f..3d6a43f1c 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestFinallyExtract.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestFinallyExtract.java @@ -62,6 +62,7 @@ public class TestFinallyExtract extends IntegrationTest { String code = cls.getCode().toString(); // java compiler optimization: 'success' variable completely removed and no code duplication: + // @formatter:off /* public String test() { try { @@ -74,6 +75,8 @@ public class TestFinallyExtract extends IntegrationTest { } } */ + // @formatter:on + assertThat(code, containsOne("this.result++;")); assertThat(code, containsOne("} catch (Throwable th) {")); assertThat(code, containsOne("this.result -= 2;")); diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestMultiExceptionCatch2.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestMultiExceptionCatch2.java index d769978db..dc623d2bf 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestMultiExceptionCatch2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestMultiExceptionCatch2.java @@ -43,6 +43,6 @@ public class TestMultiExceptionCatch2 extends IntegrationTest { assertThat(code, containsOne("e.printStackTrace();")); // TODO: store vararg attribute for methods from classpath -// assertThat(code, containsOne("constructor.newInstance();")); + // assertThat(code, containsOne("constructor.newInstance();")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestMultiExceptionCatchSameJump.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestMultiExceptionCatchSameJump.java index a1c707fa6..aae2c06ac 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestMultiExceptionCatchSameJump.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestMultiExceptionCatchSameJump.java @@ -11,6 +11,7 @@ import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; public class TestMultiExceptionCatchSameJump extends SmaliTest { + // @formatter:off /* public static class TestCls { public void test() { @@ -22,6 +23,7 @@ public class TestMultiExceptionCatchSameJump extends SmaliTest { } } */ + // @formatter:on @Test public void test() { ClassNode cls = getClassNodeFromSmaliWithPkg("trycatch", "TestMultiExceptionCatchSameJump"); diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestNestedTryCatch.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestNestedTryCatch.java index c1f1cefb9..9d461fa04 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestNestedTryCatch.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestNestedTryCatch.java @@ -17,9 +17,9 @@ public class TestNestedTryCatch extends IntegrationTest { Thread.sleep(1); try { Thread.sleep(2); - } catch (InterruptedException e) { + } catch (InterruptedException ignored) { } - } catch (Exception e) { + } catch (Exception ignored) { } return; diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryAfterDeclaration.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryAfterDeclaration.java index 3993df575..27ade5902 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryAfterDeclaration.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryAfterDeclaration.java @@ -23,7 +23,7 @@ public class TestTryAfterDeclaration extends IntegrationTest { while (bis != null) { System.out.println("c"); } - } catch (final IOException e) { + } catch (final IOException ignore) { } } } @@ -40,5 +40,3 @@ public class TestTryAfterDeclaration extends IntegrationTest { assertThat(code, containsOne("try {")); } } - - diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatch2.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatch2.java index fd07e4ceb..be76966cb 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatch2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatch2.java @@ -11,12 +11,12 @@ import static org.hamcrest.MatcherAssert.assertThat; public class TestTryCatch2 extends IntegrationTest { public static class TestCls { - private final static Object obj = new Object(); + private static final Object OBJ = new Object(); public static boolean test() { try { - synchronized (obj) { - obj.wait(5); + synchronized (OBJ) { + OBJ.wait(5); } return true; } catch (InterruptedException e) { @@ -31,8 +31,8 @@ public class TestTryCatch2 extends IntegrationTest { String code = cls.getCode().toString(); assertThat(code, containsString("try {")); - assertThat(code, containsString("synchronized (obj) {")); - assertThat(code, containsString("obj.wait(5);")); + assertThat(code, containsString("synchronized (OBJ) {")); + assertThat(code, containsString("OBJ.wait(5);")); assertThat(code, containsString("return true;")); assertThat(code, containsString("} catch (InterruptedException e) {")); assertThat(code, containsString("return false;")); diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatch8.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatch8.java index d51da9eaa..fa8d878b5 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatch8.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatch8.java @@ -33,8 +33,8 @@ public class TestTryCatch8 extends IntegrationTest { throw new MyException(); } catch (MyException myExc) { this.e = myExc; - } catch (Exception x) { - this.e = new MyException("MyExc", x); + } catch (Exception ex) { + this.e = new MyException("MyExc", ex); } } } @@ -56,8 +56,8 @@ public class TestTryCatch8 extends IntegrationTest { assertThat(code, containsOne("throw new MyException();")); assertThat(code, containsOne("} catch (MyException myExc) {")); assertThat(code, containsOne("this.e = myExc;")); - assertThat(code, containsOne("} catch (Exception x) {")); - assertThat(code, containsOne("this.e = new MyException(\"MyExc\", x);")); + assertThat(code, containsOne("} catch (Exception ex) {")); + assertThat(code, containsOne("this.e = new MyException(\"MyExc\", ex);")); } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchFinally4.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchFinally4.java index caf1314fe..1c629f88f 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchFinally4.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchFinally4.java @@ -25,7 +25,7 @@ public class TestTryCatchFinally4 extends IntegrationTest { try { outputStream.close(); file.delete(); - } catch (IOException e) { + } catch (IOException ignored) { } } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchFinally6.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchFinally6.java index e6b01178a..8ea6f84c9 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchFinally6.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchFinally6.java @@ -45,8 +45,7 @@ public class TestTryCatchFinally6 extends IntegrationTest { indent(1) + "if (is != null) {", indent(2) + "is.close();", indent(1) + '}', - "}" - )); + "}")); } @Test @@ -64,7 +63,6 @@ public class TestTryCatchFinally6 extends IntegrationTest { indent() + "if (fileInputStream != null) {", indent() + indent() + "fileInputStream.close();", indent() + '}', - "}" - )); + "}")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMoveExc.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMoveExc.java index 291ed9e11..f1514c275 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMoveExc.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMoveExc.java @@ -9,15 +9,18 @@ import static jadx.tests.api.utils.JadxMatchers.containsOne; import static org.hamcrest.MatcherAssert.assertThat; public class TestTryCatchNoMoveExc extends SmaliTest { - -// private static void test(AutoCloseable closeable) { -// if (closeable != null) { -// try { -// closeable.close(); -// } catch (Exception ignored) { -// } -// } -// } + // @formatter:off + /* + private static void test(AutoCloseable closeable) { + if (closeable != null) { + try { + closeable.close(); + } catch (Exception ignored) { + } + } + } + */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMoveExc2.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMoveExc2.java index 3333705b9..b6bb873d6 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMoveExc2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMoveExc2.java @@ -13,16 +13,19 @@ import static org.hamcrest.MatcherAssert.assertThat; * Issue: https://github.com/skylot/jadx/issues/395 */ public class TestTryCatchNoMoveExc2 extends SmaliTest { - -// private static void test(AutoCloseable closeable) { -// if (closeable != null) { -// try { -// closeable.close(); -// } catch (Exception unused) { -// } -// System.nanoTime(); -// } -// } + // @formatter:off + /* + private static void test(AutoCloseable closeable) { + if (closeable != null) { + try { + closeable.close(); + } catch (Exception unused) { + } + System.nanoTime(); + } + } + */ + // @formatter:on @Test public void test() { @@ -33,7 +36,6 @@ public class TestTryCatchNoMoveExc2 extends SmaliTest { assertThat(code, containsLines(2, "} catch (Exception unused) {", "}", - "System.nanoTime();" - )); + "System.nanoTime();")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchStartOnMove.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchStartOnMove.java index 35897dc4e..8fc5f953f 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchStartOnMove.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchStartOnMove.java @@ -9,17 +9,19 @@ import static jadx.tests.api.utils.JadxMatchers.containsOne; import static org.hamcrest.MatcherAssert.assertThat; public class TestTryCatchStartOnMove extends SmaliTest { + // @formatter:off + /* + private static void test(String s) { + try { + call(s); + } catch (Exception unused) { + System.out.println("Failed call for " + s); + } + } -// private static void test(String s) { -// try { -// call(s); -// } catch (Exception unused) { -// System.out.println("Failed call for " + s); -// } -// } -// -// private static void call(String s) { -// } + private static void call(String s) {} + */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryWithResources.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryWithResources.java index a3e98bc8c..a259d8cc5 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryWithResources.java +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryWithResources.java @@ -1,10 +1,5 @@ package jadx.tests.integration.trycatch; -import static jadx.tests.api.utils.JadxMatchers.containsOne; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; - import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -16,6 +11,11 @@ import jadx.NotYetImplemented; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.SmaliTest; +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.not; + public class TestTryWithResources extends SmaliTest { public static class TestCls { diff --git a/jadx-core/src/test/java/jadx/tests/integration/types/TestArrayTypes.java b/jadx-core/src/test/java/jadx/tests/integration/types/TestArrayTypes.java index 1849dd320..bf070ad79 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/types/TestArrayTypes.java +++ b/jadx-core/src/test/java/jadx/tests/integration/types/TestArrayTypes.java @@ -15,10 +15,11 @@ public class TestArrayTypes extends IntegrationTest { public void test() { Exception e = new Exception(); System.out.println(e); - use(new Object[]{e}); + use(new Object[] { e }); } - public void use(Object[] arr) {} + public void use(Object[] arr) { + } public void check() { test(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/types/TestConstInline.java b/jadx-core/src/test/java/jadx/tests/integration/types/TestConstInline.java index fe111f56d..9c09a9db9 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/types/TestConstInline.java +++ b/jadx-core/src/test/java/jadx/tests/integration/types/TestConstInline.java @@ -9,23 +9,26 @@ import static jadx.tests.api.utils.JadxMatchers.containsOne; import static org.hamcrest.MatcherAssert.assertThat; public class TestConstInline extends SmaliTest { + // @formatter:off + /* + private static String test(boolean b) { + List list; + String str; + if (b) { + list = Collections.emptyList(); + str = "1"; + } else { + list = null; + str = list; // not correct assign in java but bytecode allow it + } + return use(list, str); + } -// private static String test(boolean b) { -// List list; -// String str; -// if (b) { -// list = Collections.emptyList(); -// str = "1"; -// } else { -// list = null; -// str = list; // not correct assign in java but bytecode allow it -// } -// return use(list, str); -// } -// -// private static String use(List list, String str) { -// return list + str; -// } + private static String use(List list, String str) { + return list + str; + } + */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/types/TestConstTypeInference.java b/jadx-core/src/test/java/jadx/tests/integration/types/TestConstTypeInference.java index a13273776..e146a9fe9 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/types/TestConstTypeInference.java +++ b/jadx-core/src/test/java/jadx/tests/integration/types/TestConstTypeInference.java @@ -13,7 +13,7 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; public class TestConstTypeInference extends IntegrationTest { - @SuppressWarnings("overrides") + @SuppressWarnings({ "overrides", "EqualsHashCode" }) public static class TestCls { private final int a; diff --git a/jadx-core/src/test/java/jadx/tests/integration/types/TestTypeInheritance.java b/jadx-core/src/test/java/jadx/tests/integration/types/TestTypeInheritance.java index 95750f883..d1e6ffc76 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/types/TestTypeInheritance.java +++ b/jadx-core/src/test/java/jadx/tests/integration/types/TestTypeInheritance.java @@ -22,7 +22,8 @@ public class TestTypeInheritance extends IntegrationTest { } public static class B implements IBase { - public void b() {} + public void b() { + } } public static void test(boolean z) { @@ -38,9 +39,11 @@ public class TestTypeInheritance extends IntegrationTest { useRoot(impl); } - private static void useRoot(IRoot root) {} + private static void useRoot(IRoot root) { + } - private static void useBase(IBase base) {} + private static void useBase(IBase base) { + } } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/types/TestTypeResolver7.java b/jadx-core/src/test/java/jadx/tests/integration/types/TestTypeResolver7.java index 08473d49f..0d35db413 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/types/TestTypeResolver7.java +++ b/jadx-core/src/test/java/jadx/tests/integration/types/TestTypeResolver7.java @@ -28,9 +28,11 @@ public class TestTypeResolver7 extends IntegrationTest { return null; } - private void use(Exception e) {} + private void use(Exception e) { + } - private void use(Runnable r) {} + private void use(Runnable r) { + } } @Test diff --git a/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariables6.java b/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariables6.java index 52b4b2f8c..bb0ecd7c6 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariables6.java +++ b/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariables6.java @@ -20,7 +20,7 @@ public class TestVariables6 extends SmaliTest { assertThat(code, not(containsString("r4"))); assertThat(code, not(containsString("r1v1"))); assertThat(code, containsString("DateStringParser dateStringParser")); - assertThat(code, containsString("FinancialInstrumentMetadataAttribute startYear = this.mFinancialInstrumentMetadataDefinition" + - ".getStartYear();")); + assertThat(code, containsString("FinancialInstrumentMetadataAttribute startYear =" + + " this.mFinancialInstrumentMetadataDefinition.getStartYear();")); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesDefinitions.java b/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesDefinitions.java index a28b4a99d..be4a7e701 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesDefinitions.java +++ b/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesDefinitions.java @@ -18,7 +18,7 @@ import static org.hamcrest.MatcherAssert.assertThat; public class TestVariablesDefinitions extends IntegrationTest { public static class TestCls { - private static Logger LOG; + private static Logger log; private ClassNode cls; private List passes; @@ -29,7 +29,7 @@ public class TestVariablesDefinitions extends IntegrationTest { DepthTraversal.visit(pass, cls); } } catch (Exception e) { - LOG.error("Decode exception: {}", cls, e); + log.error("Decode exception: {}", cls, e); } } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesGeneric.java b/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesGeneric.java index c09cd6a43..b862fac98 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesGeneric.java +++ b/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesGeneric.java @@ -10,16 +10,19 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; public class TestVariablesGeneric extends SmaliTest { + // @formatter:off /* - public static j a(i iVar, c cVar) { - if (iVar == null) { - throw new IllegalArgumentException("subscriber can not be null"); - } - if (cVar.a == null) { - throw new IllegalStateException("onSubscribe function can not be null."); - } - ... + public static j a(i iVar, c cVar) { + if (iVar == null) { + throw new IllegalArgumentException("subscriber can not be null"); + } + if (cVar.a == null) { + throw new IllegalStateException("onSubscribe function can not be null."); + } + ... + } */ + // @formatter:on @Test public void test() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesUsageWithLoops.java b/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesUsageWithLoops.java index 1e2fe25a8..d5fb80100 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesUsageWithLoops.java +++ b/jadx-core/src/test/java/jadx/tests/integration/variables/TestVariablesUsageWithLoops.java @@ -1,8 +1,5 @@ package jadx.tests.integration.variables; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; - import java.util.ArrayList; import java.util.List; @@ -11,6 +8,9 @@ import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + public class TestVariablesUsageWithLoops extends IntegrationTest { public static class TestEnhancedFor { @@ -36,6 +36,7 @@ public class TestVariablesUsageWithLoops extends IntegrationTest { public static class TestForLoop { + @SuppressWarnings("rawtypes") public void test() { List list; synchronized (this) { diff --git a/jadx-gui/src/main/java/jadx/gui/JadxGUI.java b/jadx-gui/src/main/java/jadx/gui/JadxGUI.java index 13fd94531..72aa6946f 100644 --- a/jadx-gui/src/main/java/jadx/gui/JadxGUI.java +++ b/jadx-gui/src/main/java/jadx/gui/JadxGUI.java @@ -46,4 +46,3 @@ public class JadxGUI { return false; } } - diff --git a/jadx-gui/src/main/java/jadx/gui/JadxWrapper.java b/jadx-gui/src/main/java/jadx/gui/JadxWrapper.java index 746cc24ad..a0ed87113 100644 --- a/jadx-gui/src/main/java/jadx/gui/JadxWrapper.java +++ b/jadx-gui/src/main/java/jadx/gui/JadxWrapper.java @@ -1,6 +1,5 @@ package jadx.gui; -import javax.swing.*; import java.io.File; import java.util.ArrayList; import java.util.Arrays; @@ -9,6 +8,8 @@ import java.util.List; import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; +import javax.swing.*; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/jadx-gui/src/main/java/jadx/gui/jobs/BackgroundWorker.java b/jadx-gui/src/main/java/jadx/gui/jobs/BackgroundWorker.java index 9fb93a8c2..b0f2b8547 100644 --- a/jadx-gui/src/main/java/jadx/gui/jobs/BackgroundWorker.java +++ b/jadx-gui/src/main/java/jadx/gui/jobs/BackgroundWorker.java @@ -1,8 +1,9 @@ package jadx.gui.jobs; -import javax.swing.*; import java.util.concurrent.Future; +import javax.swing.*; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxProject.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxProject.java index 687d6a009..539051bea 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxProject.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxProject.java @@ -77,7 +77,7 @@ public class JadxProject { } public void removeTreeExpansion(String[] expansion) { - for (Iterator it = treeExpansions.iterator(); it.hasNext(); ) { + for (Iterator it = treeExpansions.iterator(); it.hasNext();) { if (isParentOfExpansion(expansion, it.next())) { it.remove(); } @@ -101,8 +101,7 @@ public class JadxProject { private void changed() { if (settings.isAutoSaveProject()) { save(); - } - else { + } else { saved = false; } initial = false; diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java index ca42113d7..cd6f88e08 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java @@ -37,8 +37,7 @@ public class JadxSettings extends JadxCLIArgs { private static final Font DEFAULT_FONT = new RSyntaxTextArea().getFont(); static final Set SKIP_FIELDS = new HashSet<>(Arrays.asList( - "files", "input", "outDir", "outDirSrc", "outDirRes", "verbose", "printVersion", "printHelp" - )); + "files", "input", "outDir", "outDirSrc", "outDirRes", "verbose", "printVersion", "printHelp")); private Path lastSaveProjectPath = USER_HOME; private Path lastOpenFilePath = USER_HOME; private Path lastSaveFilePath = USER_HOME; diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java index f75f9a811..b3210b2b8 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java @@ -42,8 +42,7 @@ public class JadxSettingsAdapter { private static final GsonBuilder GSON_BUILDER = new GsonBuilder() .setExclusionStrategies(EXCLUDE_FIELDS) .registerTypeHierarchyAdapter(Path.class, PathTypeAdapter.singleton()) - .registerTypeHierarchyAdapter(Rectangle.class, RectangleTypeAdapter.singleton()) - ; + .registerTypeHierarchyAdapter(Rectangle.class, RectangleTypeAdapter.singleton()); private static final Gson GSON = GSON_BUILDER.create(); private JadxSettingsAdapter() { diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java index d335edc79..c95a35dbe 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java @@ -1,6 +1,5 @@ package jadx.gui.settings; -import javax.swing.*; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.MouseAdapter; @@ -8,8 +7,11 @@ import java.awt.event.MouseEvent; import java.util.Arrays; import java.util.Collection; +import javax.swing.*; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import say.swing.JFontChooser; import jadx.gui.ui.MainWindow; @@ -68,11 +70,10 @@ public class JadxSettingsWindow extends JDialog { } if (!settings.getLangLocale().equals(prevLang)) { JOptionPane.showMessageDialog( - this, - NLS.str("msg.language_changed", settings.getLangLocale()), - NLS.str("msg.language_changed_title", settings.getLangLocale()), - JOptionPane.INFORMATION_MESSAGE - ); + this, + NLS.str("msg.language_changed", settings.getLangLocale()), + NLS.str("msg.language_changed_title", settings.getLangLocale()), + JOptionPane.INFORMATION_MESSAGE); } dispose(); }); @@ -87,11 +88,10 @@ public class JadxSettingsWindow extends JDialog { JButton resetBtn = new JButton(NLS.str("preferences.reset")); resetBtn.addActionListener(event -> { int res = JOptionPane.showConfirmDialog( - JadxSettingsWindow.this, - NLS.str("preferences.reset_message"), - NLS.str("preferences.reset_title"), - JOptionPane.YES_NO_OPTION - ); + JadxSettingsWindow.this, + NLS.str("preferences.reset_message"), + NLS.str("preferences.reset_title"), + JOptionPane.YES_NO_OPTION); if (res == JOptionPane.YES_OPTION) { String defaults = JadxSettingsAdapter.makeString(JadxSettings.makeDefault()); JadxSettingsAdapter.fill(settings, defaults); @@ -216,8 +216,7 @@ public class JadxSettingsWindow extends JDialog { private SettingsGroup makeProjectGroup() { JCheckBox autoSave = new JCheckBox(); autoSave.setSelected(settings.isAutoSaveProject()); - autoSave.addItemListener(e -> - settings.setAutoSaveProject(e.getStateChange() == ItemEvent.SELECTED)); + autoSave.addItemListener(e -> settings.setAutoSaveProject(e.getStateChange() == ItemEvent.SELECTED)); SettingsGroup group = new SettingsGroup(NLS.str("preferences.project")); group.addRow(NLS.str("preferences.autoSave"), autoSave); @@ -294,7 +293,7 @@ public class JadxSettingsWindow extends JDialog { }); SpinnerNumberModel spinnerModel = new SpinnerNumberModel( - settings.getThreadsCount(), 1, Runtime.getRuntime().availableProcessors() * 2, 1); + settings.getThreadsCount(), 1, Runtime.getRuntime().availableProcessors() * 2, 1); JSpinner threadsCount = new JSpinner(spinnerModel); threadsCount.addChangeListener(e -> { settings.setThreadsCount((Integer) threadsCount.getValue()); @@ -306,7 +305,7 @@ public class JadxSettingsWindow extends JDialog { String oldExcludedPackages = settings.getExcludedPackages(); String result = JOptionPane.showInputDialog(this, NLS.str("preferences.excludedPackages.editDialog"), - settings.getExcludedPackages()); + settings.getExcludedPackages()); if (result != null) { settings.setExcludedPackages(result); if (!oldExcludedPackages.equals(result)) { @@ -357,7 +356,7 @@ public class JadxSettingsWindow extends JDialog { SettingsGroup other = new SettingsGroup(NLS.str("preferences.decompile")); other.addRow(NLS.str("preferences.threads"), threadsCount); other.addRow(NLS.str("preferences.excludedPackages"), NLS.str("preferences.excludedPackages.tooltip"), - editExcludedPackages); + editExcludedPackages); other.addRow(NLS.str("preferences.start_jobs"), autoStartJobs); other.addRow(NLS.str("preferences.showInconsistentCode"), showInconsistentCode); other.addRow(NLS.str("preferences.escapeUnicode"), escapeUnicode); @@ -371,8 +370,8 @@ public class JadxSettingsWindow extends JDialog { } private SettingsGroup makeOtherGroup() { - JComboBox languageCbx = new JComboBox<>(NLS.getI18nLocales()); - for (LangLocale locale : NLS.getI18nLocales()) { + JComboBox languageCbx = new JComboBox<>(NLS.getLangLocales()); + for (LangLocale locale : NLS.getLangLocales()) { if (locale.equals(settings.getLangLocale())) { languageCbx.setSelectedItem(locale); break; diff --git a/jadx-gui/src/main/java/jadx/gui/settings/WindowLocation.java b/jadx-gui/src/main/java/jadx/gui/settings/WindowLocation.java index e05127686..3f3341471 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/WindowLocation.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/WindowLocation.java @@ -1,6 +1,6 @@ package jadx.gui.settings; -import java.awt.Rectangle; +import java.awt.*; public class WindowLocation { @@ -23,12 +23,12 @@ public class WindowLocation { @Override public String toString() { - return "WindowLocation{" + - "id='" + windowId + '\'' + - ", x=" + bounds.getX() + - ", y=" + bounds.getY() + - ", width=" + bounds.getWidth() + - ", height=" + bounds.getHeight() + - '}'; + return "WindowLocation{" + + "id='" + windowId + '\'' + + ", x=" + bounds.getX() + + ", y=" + bounds.getY() + + ", width=" + bounds.getWidth() + + ", height=" + bounds.getHeight() + + '}'; } } diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/ApkSignature.java b/jadx-gui/src/main/java/jadx/gui/treemodel/ApkSignature.java index 08c32a31e..7c1844260 100644 --- a/jadx-gui/src/main/java/jadx/gui/treemodel/ApkSignature.java +++ b/jadx-gui/src/main/java/jadx/gui/treemodel/ApkSignature.java @@ -1,17 +1,19 @@ package jadx.gui.treemodel; -import javax.swing.*; import java.io.File; import java.security.cert.Certificate; import java.util.List; import java.util.stream.Collectors; -import com.android.apksig.ApkVerifier; +import javax.swing.*; + import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.commons.text.StringEscapeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.android.apksig.ApkVerifier; + import jadx.gui.JadxWrapper; import jadx.gui.utils.CertificateManager; import jadx.gui.utils.NLS; @@ -156,8 +158,8 @@ public class ApkSignature extends JNode { builder.append(""); builder.append("
"); // Unprotected Zip entry issues are very common, handle them separately - List unprotIssues = issueList.stream().filter(i -> - i.getIssue() == ApkVerifier.Issue.JAR_SIG_UNPROTECTED_ZIP_ENTRY).collect(Collectors.toList()); + List unprotIssues = issueList.stream() + .filter(i -> i.getIssue() == ApkVerifier.Issue.JAR_SIG_UNPROTECTED_ZIP_ENTRY).collect(Collectors.toList()); if (!unprotIssues.isEmpty()) { builder.append("

"); builder.escape(NLS.str("apkSignature.unprotectedEntry")); @@ -168,8 +170,8 @@ public class ApkSignature extends JNode { } builder.append("

"); } - List remainingIssues = issueList.stream().filter(i -> - i.getIssue() != ApkVerifier.Issue.JAR_SIG_UNPROTECTED_ZIP_ENTRY).collect(Collectors.toList()); + List remainingIssues = issueList.stream() + .filter(i -> i.getIssue() != ApkVerifier.Issue.JAR_SIG_UNPROTECTED_ZIP_ENTRY).collect(Collectors.toList()); if (!remainingIssues.isEmpty()) { builder.append("
\n");
 				for (ApkVerifier.IssueWithParams issue : remainingIssues) {
diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JCertificate.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JCertificate.java
index be6c176cc..f3118725a 100644
--- a/jadx-gui/src/main/java/jadx/gui/treemodel/JCertificate.java
+++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JCertificate.java
@@ -1,6 +1,5 @@
 package jadx.gui.treemodel;
 
-import javax.swing.*;
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -9,6 +8,8 @@ import java.io.InputStream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
+import javax.swing.*;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JMethod.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JMethod.java
index e657c965b..8b4702712 100644
--- a/jadx-gui/src/main/java/jadx/gui/treemodel/JMethod.java
+++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JMethod.java
@@ -1,8 +1,9 @@
 package jadx.gui.treemodel;
 
-import javax.swing.*;
 import java.util.Iterator;
 
+import javax.swing.*;
+
 import jadx.api.JavaMethod;
 import jadx.api.JavaNode;
 import jadx.core.dex.info.AccessInfo;
@@ -77,7 +78,7 @@ public class JMethod extends JNode {
 			base.append(mth.getName());
 		}
 		base.append('(');
-		for (Iterator it = mth.getArguments().iterator(); it.hasNext(); ) {
+		for (Iterator it = mth.getArguments().iterator(); it.hasNext();) {
 			base.append(Utils.typeStr(it.next()));
 			if (it.hasNext()) {
 				base.append(", ");
diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JPackage.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JPackage.java
index 679e3c854..9076eb170 100644
--- a/jadx-gui/src/main/java/jadx/gui/treemodel/JPackage.java
+++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JPackage.java
@@ -1,9 +1,10 @@
 package jadx.gui.treemodel;
 
-import javax.swing.*;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.swing.*;
+
 import org.jetbrains.annotations.NotNull;
 
 import jadx.api.JavaClass;
@@ -45,7 +46,7 @@ public class JPackage extends JNode implements Comparable {
 		List excludedPackages = wrapper.getExcludedPackages();
 		this.enabled = excludedPackages.isEmpty()
 				|| excludedPackages.stream().filter(p -> !p.isEmpty())
-				.noneMatch(p -> name.equals(p) || name.startsWith(p + '.'));
+						.noneMatch(p -> name.equals(p) || name.startsWith(p + '.'));
 	}
 
 	public final void update() {
diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JResource.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JResource.java
index 59a82b20b..2fea96069 100644
--- a/jadx-gui/src/main/java/jadx/gui/treemodel/JResource.java
+++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JResource.java
@@ -1,12 +1,13 @@
 package jadx.gui.treemodel;
 
-import javax.swing.*;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
+import javax.swing.*;
+
 import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
 import org.jetbrains.annotations.NotNull;
 
@@ -70,10 +71,8 @@ public class JResource extends JLoadableNode implements Comparable {
 		} else {
 			removeAllChildren();
 
-			Comparator typeComparator
-				= (r1, r2) -> r1.type.ordinal() - r2.type.ordinal();
-			Comparator nameComparator
-				= Comparator.comparing(JResource::getName, String.CASE_INSENSITIVE_ORDER);
+			Comparator typeComparator = (r1, r2) -> r1.type.ordinal() - r2.type.ordinal();
+			Comparator nameComparator = Comparator.comparing(JResource::getName, String.CASE_INSENSITIVE_ORDER);
 
 			files.sort(typeComparator.thenComparing(nameComparator));
 
@@ -236,8 +235,7 @@ public class JResource extends JLoadableNode implements Comparable {
 			"properties", SyntaxConstants.SYNTAX_STYLE_PROPERTIES_FILE,
 			"ini", SyntaxConstants.SYNTAX_STYLE_INI,
 			"sql", SyntaxConstants.SYNTAX_STYLE_SQL,
-			"arsc", SyntaxConstants.SYNTAX_STYLE_XML
-	);
+			"arsc", SyntaxConstants.SYNTAX_STYLE_XML);
 
 	private String getSyntaxByExtension(String name) {
 		int dot = name.lastIndexOf('.');
diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JRoot.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JRoot.java
index e90335d11..fd23bf92b 100644
--- a/jadx-gui/src/main/java/jadx/gui/treemodel/JRoot.java
+++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JRoot.java
@@ -1,12 +1,13 @@
 package jadx.gui.treemodel;
 
-import javax.swing.*;
 import java.io.File;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.regex.Pattern;
 
+import javax.swing.*;
+
 import jadx.api.ResourceFile;
 import jadx.gui.JadxWrapper;
 import jadx.gui.treemodel.JResource.JResType;
diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JSources.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JSources.java
index 6522dec96..6760e1873 100644
--- a/jadx-gui/src/main/java/jadx/gui/treemodel/JSources.java
+++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JSources.java
@@ -1,6 +1,5 @@
 package jadx.gui.treemodel;
 
-import javax.swing.*;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -10,6 +9,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.swing.*;
+
 import jadx.api.JavaPackage;
 import jadx.gui.JadxWrapper;
 import jadx.gui.utils.NLS;
@@ -78,7 +79,7 @@ public class JSources extends JNode {
 		} while (repeat);
 
 		// remove empty packages
-		for (Iterator> it = pkgMap.entrySet().iterator(); it.hasNext(); ) {
+		for (Iterator> it = pkgMap.entrySet().iterator(); it.hasNext();) {
 			JPackage pkg = it.next().getValue();
 			if (pkg.getInnerPackages().isEmpty() && pkg.getClasses().isEmpty()) {
 				it.remove();
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/AboutDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/AboutDialog.java
index a32e9a290..1cda71322 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/AboutDialog.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/AboutDialog.java
@@ -1,9 +1,10 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
 import java.awt.*;
 import java.net.URL;
 
+import javax.swing.*;
+
 import jadx.api.JadxDecompiler;
 import jadx.gui.utils.NLS;
 import jadx.gui.utils.Utils;
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/CertificatePanel.java b/jadx-gui/src/main/java/jadx/gui/ui/CertificatePanel.java
index c1761fafc..122ca32c7 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/CertificatePanel.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/CertificatePanel.java
@@ -1,8 +1,9 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
 import java.awt.*;
 
+import javax.swing.*;
+
 import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
 
 import jadx.gui.treemodel.JNode;
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/CommonSearchDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/CommonSearchDialog.java
index ffbab7c92..dd9eba74c 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/CommonSearchDialog.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/CommonSearchDialog.java
@@ -1,10 +1,5 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
 import java.awt.*;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
@@ -18,6 +13,12 @@ import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+
 import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
 import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
 import org.fife.ui.rtextarea.SearchContext;
@@ -154,7 +155,7 @@ public abstract class CommonSearchDialog extends JDialog {
 		resultsTable.setShowHorizontalLines(false);
 		resultsTable.setDragEnabled(false);
 		resultsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-//		resultsTable.setBackground(CodeArea.CODE_BACKGROUND);
+		// resultsTable.setBackground(CodeArea.CODE_BACKGROUND);
 		resultsTable.setColumnSelectionAllowed(false);
 		resultsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 		resultsTable.setAutoscrolls(false);
@@ -233,10 +234,9 @@ public abstract class CommonSearchDialog extends JDialog {
 
 	protected void updateProgressLabel() {
 		String statusText = NLS.str("search_dialog.info_label",
-			resultsModel.getDisplayedResultsStart(),
-			resultsModel.getDisplayedResultsEnd(),
-			resultsModel.getResultCount()
-		);
+				resultsModel.getDisplayedResultsStart(),
+				resultsModel.getDisplayedResultsEnd(),
+				resultsModel.getResultCount());
 		resultsInfoLabel.setText(statusText);
 	}
 
@@ -286,7 +286,8 @@ public abstract class CommonSearchDialog extends JDialog {
 				TableColumn column = columnModel.getColumn(col);
 				column.setPreferredWidth(colWidth);
 			}
-//				setRowHeight(Math.max(nodeComp.getPreferredSize().height, codeComp.getPreferredSize().height + 4));
+			// setRowHeight(Math.max(nodeComp.getPreferredSize().height, codeComp.getPreferredSize().height +
+			// 4));
 			updateUI();
 			setRowHeight(Math.max(getHeight(nodeComp), getHeight(codeComp) + 4));
 		}
@@ -410,7 +411,7 @@ public abstract class CommonSearchDialog extends JDialog {
 
 		@Override
 		public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected,
-		                                               boolean hasFocus, int row, int column) {
+				boolean hasFocus, int row, int column) {
 			int id = row << 2 | column;
 			Component comp = componentCache.get(id);
 			if (comp == null) {
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/HeapUsageBar.java b/jadx-gui/src/main/java/jadx/gui/ui/HeapUsageBar.java
index d6add3d53..eba6d56df 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/HeapUsageBar.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/HeapUsageBar.java
@@ -1,12 +1,13 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 
+import javax.swing.*;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/HtmlPanel.java b/jadx-gui/src/main/java/jadx/gui/ui/HtmlPanel.java
index 52af564cd..c9d21cadf 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/HtmlPanel.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/HtmlPanel.java
@@ -1,8 +1,9 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
 import java.awt.*;
 
+import javax.swing.*;
+
 import jadx.gui.settings.JadxSettings;
 import jadx.gui.treemodel.JNode;
 
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/ImagePanel.java b/jadx-gui/src/main/java/jadx/gui/ui/ImagePanel.java
index 404bf66ed..24bc9ca52 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/ImagePanel.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/ImagePanel.java
@@ -1,13 +1,15 @@
 package jadx.gui.ui;
 
-import javax.imageio.ImageIO;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
 
-import hu.kazocsaba.imageviewer.ImageViewer;
+import javax.imageio.ImageIO;
+
 import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
 
+import hu.kazocsaba.imageviewer.ImageViewer;
+
 import jadx.api.ResourceFile;
 import jadx.api.ResourcesLoader;
 import jadx.core.utils.Utils;
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/LogViewer.java b/jadx-gui/src/main/java/jadx/gui/ui/LogViewer.java
index 8d117bc24..978be5726 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/LogViewer.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/LogViewer.java
@@ -1,11 +1,13 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
 import java.awt.*;
 
-import ch.qos.logback.classic.Level;
+import javax.swing.*;
+
 import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
 
+import ch.qos.logback.classic.Level;
+
 import jadx.gui.settings.JadxSettings;
 import jadx.gui.ui.codearea.CodeArea;
 import jadx.gui.utils.NLS;
@@ -14,7 +16,7 @@ import jadx.gui.utils.logs.LogCollector;
 
 class LogViewer extends JDialog {
 	private static final long serialVersionUID = -2188700277429054641L;
-	private static final Level[] LEVEL_ITEMS = {Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR};
+	private static final Level[] LEVEL_ITEMS = { Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR };
 
 	private static Level level = Level.WARN;
 
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainDropTarget.java b/jadx-gui/src/main/java/jadx/gui/ui/MainDropTarget.java
index 3f03c852d..8496d1776 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/MainDropTarget.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/MainDropTarget.java
@@ -14,7 +14,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Enables drop support from external applications for the {@link MainWindow} (load dropped APK file)
+ * Enables drop support from external applications for the {@link MainWindow} (load dropped APK
+ * file)
  */
 public class MainDropTarget implements DropTargetListener {
 
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java
index db55694a7..5ceeb7d48 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java
@@ -1,13 +1,6 @@
 package jadx.gui.ui;
 
-import static javax.swing.KeyStroke.getKeyStroke;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.DisplayMode;
-import java.awt.Font;
-import java.awt.GraphicsDevice;
-import java.awt.GraphicsEnvironment;
+import java.awt.*;
 import java.awt.dnd.DnDConstants;
 import java.awt.dnd.DropTarget;
 import java.awt.event.ActionEvent;
@@ -30,27 +23,7 @@ import java.util.Locale;
 import java.util.Timer;
 import java.util.TimerTask;
 
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.Box;
-import javax.swing.ImageIcon;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JToggleButton;
-import javax.swing.JToolBar;
-import javax.swing.JTree;
-import javax.swing.ProgressMonitor;
-import javax.swing.SwingUtilities;
-import javax.swing.WindowConstants;
+import javax.swing.*;
 import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;
 import javax.swing.event.TreeExpansionEvent;
@@ -94,6 +67,8 @@ import jadx.gui.utils.Link;
 import jadx.gui.utils.NLS;
 import jadx.gui.utils.Utils;
 
+import static javax.swing.KeyStroke.getKeyStroke;
+
 @SuppressWarnings("serial")
 public class MainWindow extends JFrame {
 	private static final Logger LOG = LoggerFactory.getLogger(MainWindow.class);
@@ -200,7 +175,7 @@ public class MainWindow extends JFrame {
 	public void openFileOrProject() {
 		JFileChooser fileChooser = new JFileChooser();
 		fileChooser.setAcceptAllFileFilterUsed(true);
-		String[] exts = {JadxProject.PROJECT_EXTENSION, "apk", "dex", "jar", "class", "zip", "aar", "arsc", "smali"};
+		String[] exts = { JadxProject.PROJECT_EXTENSION, "apk", "dex", "jar", "class", "smali", "zip", "aar", "arsc" };
 		String description = "supported files: " + Arrays.toString(exts).replace('[', '(').replace(']', ')');
 		fileChooser.setFileFilter(new FileNameExtensionFilter(description, exts));
 		fileChooser.setToolTipText(NLS.str("file.open_action"));
@@ -235,8 +210,7 @@ public class MainWindow extends JFrame {
 	private void saveProject() {
 		if (project.getProjectPath() == null) {
 			saveProjectAs();
-		}
-		else {
+		} else {
 			project.save();
 			update();
 		}
@@ -245,7 +219,7 @@ public class MainWindow extends JFrame {
 	private void saveProjectAs() {
 		JFileChooser fileChooser = new JFileChooser();
 		fileChooser.setAcceptAllFileFilterUsed(true);
-		String[] exts = {JadxProject.PROJECT_EXTENSION};
+		String[] exts = { JadxProject.PROJECT_EXTENSION };
 		String description = "supported files: " + Arrays.toString(exts).replace('[', '(').replace(']', ')');
 		fileChooser.setFileFilter(new FileNameExtensionFilter(description, exts));
 		fileChooser.setToolTipText(NLS.str("file.save_project"));
@@ -281,8 +255,7 @@ public class MainWindow extends JFrame {
 		if (path.getFileName().toString().toLowerCase(Locale.ROOT)
 				.endsWith(JadxProject.PROJECT_EXTENSION)) {
 			openProject(path);
-		}
-		else {
+		} else {
 			project.setFilePath(path);
 			tabbedPane.closeAllTabs();
 			resetCache();
@@ -321,8 +294,7 @@ public class MainWindow extends JFrame {
 					this,
 					NLS.str("msg.project_error"),
 					NLS.str("msg.project_error_title"),
-					JOptionPane.INFORMATION_MESSAGE
-			);
+					JOptionPane.INFORMATION_MESSAGE);
 			return;
 		}
 		update();
@@ -330,8 +302,7 @@ public class MainWindow extends JFrame {
 		Path filePath = project.getFilePath();
 		if (filePath == null) {
 			clearTree();
-		}
-		else {
+		} else {
 			open(filePath);
 		}
 	}
@@ -344,8 +315,7 @@ public class MainWindow extends JFrame {
 		String pathString;
 		if (projectPath == null) {
 			pathString = "";
-		}
-		else {
+		} else {
 			pathString = " [" + projectPath.getParent().toAbsolutePath() + ']';
 		}
 		setTitle((project.isSaved() ? "" : '*')
@@ -397,8 +367,7 @@ public class MainWindow extends JFrame {
 					this,
 					NLS.str("msg.rename_disabled", settings.getLangLocale()),
 					NLS.str("msg.rename_disabled_title", settings.getLangLocale()),
-					JOptionPane.INFORMATION_MESSAGE
-			);
+					JOptionPane.INFORMATION_MESSAGE);
 		}
 		JFileChooser fileChooser = new JFileChooser();
 		fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
@@ -833,8 +802,8 @@ public class MainWindow extends JFrame {
 		tree.setCellRenderer(new DefaultTreeCellRenderer() {
 			@Override
 			public Component getTreeCellRendererComponent(JTree tree,
-			                                              Object value, boolean selected, boolean expanded,
-			                                              boolean isLeaf, int row, boolean focused) {
+					Object value, boolean selected, boolean expanded,
+					boolean isLeaf, int row, boolean focused) {
 				Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, isLeaf, row, focused);
 				if (value instanceof JNode) {
 					setIcon(((JNode) value).getIcon());
@@ -894,8 +863,7 @@ public class MainWindow extends JFrame {
 			String name;
 			if (node instanceof JClass) {
 				name = ((JClass) node).getCls().getClassNode().getClassInfo().getFullName();
-			}
-			else {
+			} else {
 				name = node.toString();
 			}
 			pathList.add(name);
@@ -937,7 +905,7 @@ public class MainWindow extends JFrame {
 			LOG.error("Can't load editor theme from classpath: {}", editorThemePath);
 			try {
 				editorTheme = Theme.load(new FileInputStream(editorThemePath));
-			} catch (Exception e2) {
+			} catch (Exception ex) {
 				LOG.error("Can't load editor theme from file: {}", editorThemePath);
 			}
 		}
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/ProgressPanel.java b/jadx-gui/src/main/java/jadx/gui/ui/ProgressPanel.java
index a03169a56..5661cb669 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/ProgressPanel.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/ProgressPanel.java
@@ -1,10 +1,11 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
 import java.awt.*;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 
+import javax.swing.*;
+
 import jadx.gui.utils.Utils;
 
 public class ProgressPanel extends JPanel implements PropertyChangeListener {
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/SearchDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/SearchDialog.java
index 69fdf98f2..39fd2624f 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/SearchDialog.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/SearchDialog.java
@@ -1,8 +1,5 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
 import java.awt.*;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
@@ -10,14 +7,19 @@ import java.util.EnumSet;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
+import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import hu.akarnokd.rxjava2.swing.SwingSchedulers;
 import io.reactivex.BackpressureStrategy;
 import io.reactivex.Emitter;
 import io.reactivex.Flowable;
 import io.reactivex.disposables.Disposable;
 import io.reactivex.schedulers.Schedulers;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import jadx.gui.treemodel.JNode;
 import jadx.gui.utils.NLS;
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java b/jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java
index 5e6183e15..6f537968c 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java
@@ -1,8 +1,5 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
-import javax.swing.plaf.basic.BasicButtonUI;
-import javax.swing.text.BadLocationException;
 import java.awt.*;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
@@ -11,6 +8,10 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.swing.*;
+import javax.swing.plaf.basic.BasicButtonUI;
+import javax.swing.text.BadLocationException;
+
 import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/UsageDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/UsageDialog.java
index 49accb725..cbc0a6860 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/UsageDialog.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/UsageDialog.java
@@ -1,8 +1,9 @@
 package jadx.gui.ui;
 
-import javax.swing.*;
 import java.awt.*;
 
+import javax.swing.*;
+
 import jadx.gui.treemodel.JNode;
 import jadx.gui.utils.CodeUsageInfo;
 import jadx.gui.utils.NLS;
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodeLinkGenerator.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodeLinkGenerator.java
index d44fbfa19..1db8d7b84 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodeLinkGenerator.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodeLinkGenerator.java
@@ -1,8 +1,9 @@
 package jadx.gui.ui.codearea;
 
+import java.util.Objects;
+
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
-import java.util.Objects;
 
 import org.fife.ui.rsyntaxtextarea.LinkGenerator;
 import org.fife.ui.rsyntaxtextarea.LinkGeneratorResult;
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/EditorTheme.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/EditorTheme.java
index fc1931e34..9bf9b1770 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/EditorTheme.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/EditorTheme.java
@@ -4,7 +4,7 @@ public final class EditorTheme {
 	private static final String RSTA_THEME_PATH = "/org/fife/ui/rsyntaxtextarea/themes/";
 
 	private static final EditorTheme[] ALL_THEMES =
-			new EditorTheme[]{
+			new EditorTheme[] {
 					new EditorTheme("default"),
 					new EditorTheme("eclipse"),
 					new EditorTheme("idea"),
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/FindUsageAction.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/FindUsageAction.java
index ea2afe9df..fc9f975ee 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/FindUsageAction.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/FindUsageAction.java
@@ -1,10 +1,11 @@
 package jadx.gui.ui.codearea;
 
+import java.awt.*;
+import java.awt.event.ActionEvent;
+
 import javax.swing.*;
 import javax.swing.event.PopupMenuEvent;
 import javax.swing.event.PopupMenuListener;
-import java.awt.*;
-import java.awt.event.ActionEvent;
 
 import org.fife.ui.rsyntaxtextarea.Token;
 
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/LineNumbers.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/LineNumbers.java
index 1f4334032..f42464799 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/LineNumbers.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/LineNumbers.java
@@ -1,5 +1,11 @@
 package jadx.gui.ui.codearea;
 
+import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.swing.*;
 import javax.swing.border.Border;
 import javax.swing.border.CompoundBorder;
@@ -12,11 +18,6 @@ import javax.swing.text.BadLocationException;
 import javax.swing.text.Element;
 import javax.swing.text.StyleConstants;
 import javax.swing.text.Utilities;
-import java.awt.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.fife.ui.rsyntaxtextarea.SyntaxScheme;
 import org.fife.ui.rsyntaxtextarea.Token;
diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/SearchBar.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/SearchBar.java
index 41086124c..443845035 100644
--- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/SearchBar.java
+++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/SearchBar.java
@@ -1,12 +1,13 @@
 package jadx.gui.ui.codearea;
 
-import javax.swing.*;
-import javax.swing.text.BadLocationException;
 import java.awt.*;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 
+import javax.swing.*;
+import javax.swing.text.BadLocationException;
+
 import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
 import org.fife.ui.rtextarea.SearchContext;
 import org.fife.ui.rtextarea.SearchEngine;
diff --git a/jadx-gui/src/main/java/jadx/gui/update/JadxUpdate.java b/jadx-gui/src/main/java/jadx/gui/update/JadxUpdate.java
index c88ceca4f..83dc134f5 100644
--- a/jadx-gui/src/main/java/jadx/gui/update/JadxUpdate.java
+++ b/jadx-gui/src/main/java/jadx/gui/update/JadxUpdate.java
@@ -10,11 +10,12 @@ import java.nio.charset.StandardCharsets;
 import java.util.Comparator;
 import java.util.List;
 
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+
 import jadx.api.JadxDecompiler;
 import jadx.gui.update.data.Release;
 
@@ -31,8 +32,7 @@ public class JadxUpdate {
 	private static final Type RELEASES_LIST_TYPE = new TypeToken>() {
 	}.getType();
 
-	private static final Comparator RELEASE_COMPARATOR = (o1, o2) ->
-			VersionComparator.checkAndCompare(o1.getName(), o2.getName());
+	private static final Comparator RELEASE_COMPARATOR = (o1, o2) -> VersionComparator.checkAndCompare(o1.getName(), o2.getName());
 
 	public interface IUpdateCallback {
 		void onUpdate(Release r);
diff --git a/jadx-gui/src/main/java/jadx/gui/utils/CertificateManager.java b/jadx-gui/src/main/java/jadx/gui/utils/CertificateManager.java
index 43096f2ec..f5cf20463 100755
--- a/jadx-gui/src/main/java/jadx/gui/utils/CertificateManager.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/CertificateManager.java
@@ -163,7 +163,7 @@ public class CertificateManager {
 	}
 
 	public static String hexify(byte[] bytes) {
-		char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+		char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
 		StringBuilder buf = new StringBuilder(bytes.length * 3);
 		for (byte aByte : bytes) {
 			buf.append(hexDigits[(aByte & 0xf0) >> 4]);
diff --git a/jadx-gui/src/main/java/jadx/gui/utils/CodeUsageInfo.java b/jadx-gui/src/main/java/jadx/gui/utils/CodeUsageInfo.java
index 6a5869334..cec7fd1aa 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/CodeUsageInfo.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/CodeUsageInfo.java
@@ -45,7 +45,7 @@ public class CodeUsageInfo {
 	}
 
 	private void addUsage(JNode jNode, JavaClass javaClass,
-	                      CodeLinesInfo linesInfo, CodePosition codePosition, List lines) {
+			CodeLinesInfo linesInfo, CodePosition codePosition, List lines) {
 		UsageInfo usageInfo = usageMap.computeIfAbsent(jNode, key -> new UsageInfo());
 		int line = codePosition.getLine();
 		JavaNode javaNodeByLine = linesInfo.getJavaNodeByLine(line);
diff --git a/jadx-gui/src/main/java/jadx/gui/utils/Link.java b/jadx-gui/src/main/java/jadx/gui/utils/Link.java
index 66fa6d0d7..b4d51cbbf 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/Link.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/Link.java
@@ -1,11 +1,12 @@
 package jadx.gui.utils;
 
-import javax.swing.*;
 import java.awt.*;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.util.Map;
 
+import javax.swing.*;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,20 +68,20 @@ public class Link extends JLabel implements MouseListener {
 			String os = System.getProperty("os.name").toLowerCase();
 			if (os.contains("win")) {
 				new ProcessBuilder()
-						.command(new String[]{"rundll32", "url.dll,FileProtocolHandler", url})
+						.command(new String[] { "rundll32", "url.dll,FileProtocolHandler", url })
 						.start();
 				return;
 			}
 			if (os.contains("mac")) {
 				new ProcessBuilder()
-						.command(new String[]{"open", url})
+						.command(new String[] { "open", url })
 						.start();
 				return;
 			}
 			Map env = System.getenv();
 			if (env.get("BROWSER") != null) {
 				new ProcessBuilder()
-						.command(new String[]{env.get("BROWSER"), url})
+						.command(new String[] { env.get("BROWSER"), url })
 						.start();
 				return;
 			}
diff --git a/jadx-gui/src/main/java/jadx/gui/utils/NLS.java b/jadx-gui/src/main/java/jadx/gui/utils/NLS.java
index 2c1a295ef..77eb77087 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/NLS.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/NLS.java
@@ -17,29 +17,29 @@ import jadx.core.utils.exceptions.JadxRuntimeException;
 
 public class NLS {
 
-	private static final Vector i18nLocales = new Vector<>();
+	private static final Vector LANG_LOCALES = new Vector<>();
 
-	private static final Map i18nMessagesMap = new HashMap<>();
+	private static final Map LANG_LOCALES_MAP = new HashMap<>();
 
-	private static final ResourceBundle fallbackMessagesMap;
-	private static final LangLocale localLocale;
+	private static final ResourceBundle FALLBACK_MESSAGES_MAP;
+	private static final LangLocale LOCAL_LOCALE;
 
 	// Use these two fields to avoid invoking Map.get() method twice.
 	private static ResourceBundle localizedMessagesMap;
 	private static LangLocale currentLocale;
 
 	static {
-		localLocale = new LangLocale(Locale.getDefault());
+		LOCAL_LOCALE = new LangLocale(Locale.getDefault());
 
-		i18nLocales.add(new LangLocale("en", "US")); // As default language
-		i18nLocales.add(new LangLocale("zh", "CN"));
-		i18nLocales.add(new LangLocale("es", "ES"));
+		LANG_LOCALES.add(new LangLocale("en", "US")); // As default language
+		LANG_LOCALES.add(new LangLocale("zh", "CN"));
+		LANG_LOCALES.add(new LangLocale("es", "ES"));
 
-		i18nLocales.forEach(NLS::load);
+		LANG_LOCALES.forEach(NLS::load);
 
-		LangLocale defLang = i18nLocales.get(0);
-		fallbackMessagesMap = i18nMessagesMap.get(defLang);
-		localizedMessagesMap = i18nMessagesMap.get(defLang);
+		LangLocale defLang = LANG_LOCALES.get(0);
+		FALLBACK_MESSAGES_MAP = LANG_LOCALES_MAP.get(defLang);
+		localizedMessagesMap = LANG_LOCALES_MAP.get(defLang);
 	}
 
 	private NLS() {
@@ -58,7 +58,7 @@ public class NLS {
 		} catch (IOException e) {
 			throw new JadxRuntimeException("Failed to load " + resName, e);
 		}
-		i18nMessagesMap.put(locale, bundle);
+		LANG_LOCALES_MAP.put(locale, bundle);
 	}
 
 	public static String str(String key, Object... parameters) {
@@ -66,13 +66,13 @@ public class NLS {
 		try {
 			value = localizedMessagesMap.getString(key);
 		} catch (MissingResourceException e) {
-			value = fallbackMessagesMap.getString(key); // definitely exists
+			value = FALLBACK_MESSAGES_MAP.getString(key); // definitely exists
 		}
 		return String.format(value, parameters);
 	}
 
 	public static String str(String key, LangLocale locale) {
-		ResourceBundle bundle = i18nMessagesMap.get(locale);
+		ResourceBundle bundle = LANG_LOCALES_MAP.get(locale);
 		if (bundle != null) {
 			try {
 				return bundle.getString(key);
@@ -80,20 +80,20 @@ public class NLS {
 				// use fallback string
 			}
 		}
-		return fallbackMessagesMap.getString(key); // definitely exists
+		return FALLBACK_MESSAGES_MAP.getString(key); // definitely exists
 	}
 
 	public static void setLocale(LangLocale locale) {
-		if (i18nMessagesMap.containsKey(locale)) {
+		if (LANG_LOCALES_MAP.containsKey(locale)) {
 			currentLocale = locale;
 		} else {
-			currentLocale = i18nLocales.get(0);
+			currentLocale = LANG_LOCALES.get(0);
 		}
-		localizedMessagesMap = i18nMessagesMap.get(currentLocale);
+		localizedMessagesMap = LANG_LOCALES_MAP.get(currentLocale);
 	}
 
-	public static Vector getI18nLocales() {
-		return i18nLocales;
+	public static Vector getLangLocales() {
+		return LANG_LOCALES;
 	}
 
 	public static LangLocale currentLocale() {
@@ -101,10 +101,10 @@ public class NLS {
 	}
 
 	public static LangLocale defaultLocale() {
-		if (i18nMessagesMap.containsKey(localLocale)) {
-			return localLocale;
+		if (LANG_LOCALES_MAP.containsKey(LOCAL_LOCALE)) {
+			return LOCAL_LOCALE;
 		}
 		// fallback to english if unsupported
-		return i18nLocales.get(0);
+		return LANG_LOCALES.get(0);
 	}
 }
diff --git a/jadx-gui/src/main/java/jadx/gui/utils/OverlayIcon.java b/jadx-gui/src/main/java/jadx/gui/utils/OverlayIcon.java
index 6c1002995..9471c3b5e 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/OverlayIcon.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/OverlayIcon.java
@@ -1,11 +1,12 @@
 package jadx.gui.utils;
 
-import javax.swing.*;
 import java.awt.*;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import javax.swing.*;
+
 public class OverlayIcon implements Icon {
 
 	private final Icon icon;
@@ -13,7 +14,7 @@ public class OverlayIcon implements Icon {
 
 	private static final double A = 0.8;
 	private static final double B = 0.2;
-	private static final double[] OVERLAY_POS = new double[]{A, B, B, B, A, A, B, A};
+	private static final double[] OVERLAY_POS = new double[] { A, B, B, B, A, A, B, A };
 
 	public OverlayIcon(Icon icon) {
 		this.icon = icon;
diff --git a/jadx-gui/src/main/java/jadx/gui/utils/PathTypeAdapter.java b/jadx-gui/src/main/java/jadx/gui/utils/PathTypeAdapter.java
index 127783574..df3530e82 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/PathTypeAdapter.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/PathTypeAdapter.java
@@ -11,31 +11,27 @@ import com.google.gson.stream.JsonWriter;
 
 public class PathTypeAdapter {
 
-	private static TypeAdapter SINGLETON;
+	private static final TypeAdapter SINGLETON = new TypeAdapter() {
+		@Override
+		public void write(JsonWriter out, Path value) throws IOException {
+			if (value == null) {
+				out.nullValue();
+			} else {
+				out.value(value.toAbsolutePath().toString());
+			}
+		}
+
+		@Override
+		public Path read(JsonReader in) throws IOException {
+			if (in.peek() == JsonToken.NULL) {
+				in.nextNull();
+				return null;
+			}
+			return Paths.get(in.nextString());
+		}
+	};
 
 	public static TypeAdapter singleton() {
-		if (SINGLETON == null) {
-			SINGLETON = new TypeAdapter() {
-
-				@Override
-				public void write(JsonWriter out, Path value) throws IOException {
-					if (value == null) {
-						out.nullValue();
-					} else {
-						out.value(value.toAbsolutePath().toString());
-					}
-				}
-
-				@Override
-				public Path read(JsonReader in) throws IOException {
-					if (in.peek() == JsonToken.NULL) {
-				         in.nextNull();
-				         return null;
-					}
-					return Paths.get(in.nextString());
-				}
-			};
-		}
 		return SINGLETON;
 	}
 
diff --git a/jadx-gui/src/main/java/jadx/gui/utils/RectangleTypeAdapter.java b/jadx-gui/src/main/java/jadx/gui/utils/RectangleTypeAdapter.java
index 6742f41a8..27ba217bf 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/RectangleTypeAdapter.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/RectangleTypeAdapter.java
@@ -1,7 +1,8 @@
 package jadx.gui.utils;
 
-import java.awt.Rectangle;
+import java.awt.*;
 import java.io.IOException;
+
 import com.google.gson.TypeAdapter;
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonToken;
@@ -9,56 +10,55 @@ import com.google.gson.stream.JsonWriter;
 
 public class RectangleTypeAdapter {
 
-	private static TypeAdapter SINGLETON;
+	private static final TypeAdapter SINGLETON = new TypeAdapter() {
+		@Override
+		public void write(JsonWriter out, Rectangle value) throws IOException {
+			if (value == null) {
+				out.nullValue();
+			} else {
+				out.beginObject();
+				out.name("x").value(value.getX());
+				out.name("y").value(value.getY());
+				out.name("width").value(value.getWidth());
+				out.name("height").value(value.getHeight());
+				out.endObject();
+			}
+		}
+
+		@Override
+		public Rectangle read(JsonReader in) throws IOException {
+			if (in.peek() == JsonToken.NULL) {
+				in.nextNull();
+				return null;
+			}
+			in.beginObject();
+			Rectangle rectangle = new Rectangle();
+			while (in.hasNext()) {
+				String name = in.nextName();
+				switch (name) {
+					case "x":
+						rectangle.x = in.nextInt();
+						break;
+					case "y":
+						rectangle.y = in.nextInt();
+						break;
+					case "width":
+						rectangle.width = in.nextInt();
+						break;
+					case "height":
+						rectangle.height = in.nextInt();
+						break;
+
+					default:
+						throw new IllegalArgumentException("Unknown field in Rectangle: " + name);
+				}
+			}
+			in.endObject();
+			return rectangle;
+		}
+	};
 
 	public static TypeAdapter singleton() {
-		if (SINGLETON == null) {
-			SINGLETON = new TypeAdapter() {
-
-				@Override
-				public void write(JsonWriter out, Rectangle value) throws IOException {
-					if (value == null) {
-						out.nullValue();
-					} else {
-						out.beginObject();
-						out.name("x").value(value.getX());
-						out.name("y").value(value.getY());
-						out.name("width").value(value.getWidth());
-						out.name("height").value(value.getHeight());
-						out.endObject();
-					}
-				}
-
-				@Override
-				public Rectangle read(JsonReader in) throws IOException {
-					if (in.peek() == JsonToken.NULL) {
-				         in.nextNull();
-				         return null;
-					}
-					in.beginObject();
-					Rectangle rectangle = new Rectangle();
-					while (in.hasNext()) {
-					       String name = in.nextName();
-					       switch(name) {
-					       	case "x":
-					       		rectangle.x = in.nextInt();
-					       		break;
-					       	case "y":
-					       		rectangle.y = in.nextInt();
-					       		break;
-					       	case "width":
-					       		rectangle.width = in.nextInt();
-					       		break;
-					       	case "height":
-					       		rectangle.height = in.nextInt();
-					       		break;
-					       }
-					     }
-					in.endObject();
-					return rectangle;
-				}
-			};
-		}
 		return SINGLETON;
 	}
 
diff --git a/jadx-gui/src/main/java/jadx/gui/utils/TextStandardActions.java b/jadx-gui/src/main/java/jadx/gui/utils/TextStandardActions.java
index a5aa1e64a..bd3785d6b 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/TextStandardActions.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/TextStandardActions.java
@@ -1,8 +1,5 @@
 package jadx.gui.utils;
 
-import javax.swing.*;
-import javax.swing.text.JTextComponent;
-import javax.swing.undo.UndoManager;
 import java.awt.*;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.event.ActionEvent;
@@ -10,6 +7,10 @@ import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 
+import javax.swing.*;
+import javax.swing.text.JTextComponent;
+import javax.swing.undo.UndoManager;
+
 @SuppressWarnings("serial")
 public class TextStandardActions {
 
diff --git a/jadx-gui/src/main/java/jadx/gui/utils/Utils.java b/jadx-gui/src/main/java/jadx/gui/utils/Utils.java
index 33506213a..49066b721 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/Utils.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/Utils.java
@@ -1,6 +1,5 @@
 package jadx.gui.utils;
 
-import javax.swing.*;
 import java.awt.*;
 import java.awt.datatransfer.Clipboard;
 import java.awt.datatransfer.StringSelection;
@@ -10,6 +9,9 @@ import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.swing.*;
+
+import org.intellij.lang.annotations.MagicConstant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -26,8 +28,10 @@ public class Utils {
 	private static final ImageIcon ICON_NATIVE = openIcon("native_co");
 
 	/**
-	 * The minimum about of memory in bytes we are trying to keep free, otherwise the application may run out of heap
-	 * which ends up in a Java garbage collector running "amok" (CPU utilization 100% for each core and the UI is
+	 * The minimum about of memory in bytes we are trying to keep free, otherwise the application may
+	 * run out of heap
+	 * which ends up in a Java garbage collector running "amok" (CPU utilization 100% for each core and
+	 * the UI is
 	 * not responsive).
 	 * 

* We can calculate and store this value here as the maximum heap is fixed for each JVM instance @@ -134,11 +138,11 @@ public class Utils { long allocatedMemory = runtime.totalMemory(); long freeMemory = runtime.freeMemory(); - return "heap: " + format(allocatedMemory - freeMemory) + - ", allocated: " + format(allocatedMemory) + - ", free: " + format(freeMemory) + - ", total free: " + format(freeMemory + maxMemory - allocatedMemory) + - ", max: " + format(maxMemory); + return "heap: " + format(allocatedMemory - freeMemory) + + ", allocated: " + format(allocatedMemory) + + ", free: " + format(freeMemory) + + ", total free: " + format(freeMemory + maxMemory - allocatedMemory) + + ", max: " + format(maxMemory); } private static String format(long mem) { @@ -174,6 +178,7 @@ public class Utils { public static final int CTRL_BNT_KEY = getCtrlButton(); + @MagicConstant(flagsFromClass = InputEvent.class) private static int getCtrlButton() { if (System.getProperty("os.name").toLowerCase().contains("mac")) { return Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); @@ -182,6 +187,7 @@ public class Utils { } } + @MagicConstant(flagsFromClass = InputEvent.class) public static int ctrlButton() { return CTRL_BNT_KEY; } diff --git a/jadx-gui/src/main/java/jadx/gui/utils/logs/LogCollector.java b/jadx-gui/src/main/java/jadx/gui/utils/logs/LogCollector.java index f906590ec..966a00449 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/logs/LogCollector.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/logs/LogCollector.java @@ -3,6 +3,10 @@ package jadx.gui.utils.logs; import java.util.Deque; import java.util.LinkedList; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; @@ -10,9 +14,6 @@ import ch.qos.logback.classic.PatternLayout; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.AppenderBase; import ch.qos.logback.core.Layout; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.slf4j.LoggerFactory; public class LogCollector extends AppenderBase { public static final int BUFFER_SIZE = 5000; diff --git a/jadx-gui/src/main/java/jadx/gui/utils/search/CodeIndex.java b/jadx-gui/src/main/java/jadx/gui/utils/search/CodeIndex.java index 6aaf8e6e2..e2315eec2 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/search/CodeIndex.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/search/CodeIndex.java @@ -3,11 +3,12 @@ package jadx.gui.utils.search; import java.util.ArrayList; import java.util.List; -import io.reactivex.BackpressureStrategy; -import io.reactivex.Flowable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.reactivex.BackpressureStrategy; +import io.reactivex.Flowable; + import jadx.gui.utils.Utils; public class CodeIndex implements SearchIndex { diff --git a/jadx-gui/src/main/java/jadx/gui/utils/search/SimpleIndex.java b/jadx-gui/src/main/java/jadx/gui/utils/search/SimpleIndex.java index 471d29e17..49d9fb546 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/search/SimpleIndex.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/search/SimpleIndex.java @@ -3,9 +3,10 @@ package jadx.gui.utils.search; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; + import io.reactivex.BackpressureStrategy; import io.reactivex.Flowable; -import org.apache.commons.lang3.StringUtils; public class SimpleIndex implements SearchIndex { diff --git a/jadx-gui/src/main/java/jadx/gui/utils/search/StringRef.java b/jadx-gui/src/main/java/jadx/gui/utils/search/StringRef.java index 38e57c90c..46fb8aa46 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/search/StringRef.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/search/StringRef.java @@ -83,8 +83,8 @@ public class StringRef implements CharSequence { } private static int indexOf(String source, int sourceOffset, int sourceCount, - String target, int targetOffset, int targetCount, - int fromIndex, boolean caseInsensitive) { + String target, int targetOffset, int targetCount, + int fromIndex, boolean caseInsensitive) { if (fromIndex >= sourceCount) { return (targetCount == 0 ? sourceCount : -1); } diff --git a/jadx-gui/src/main/java/jadx/gui/utils/search/TextSearchIndex.java b/jadx-gui/src/main/java/jadx/gui/utils/search/TextSearchIndex.java index 92a7fbdfb..c2ccbde18 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/search/TextSearchIndex.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/search/TextSearchIndex.java @@ -4,13 +4,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import io.reactivex.BackpressureStrategy; -import io.reactivex.Flowable; -import io.reactivex.FlowableEmitter; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.reactivex.BackpressureStrategy; +import io.reactivex.Flowable; +import io.reactivex.FlowableEmitter; + import jadx.api.JavaClass; import jadx.api.JavaField; import jadx.api.JavaMethod; @@ -137,7 +138,7 @@ public class TextSearchIndex { } private int searchNext(FlowableEmitter emitter, String text, JavaNode javaClass, String code, - int startPos, boolean ignoreCase) { + int startPos, boolean ignoreCase) { int pos; if (ignoreCase) { pos = StringUtils.indexOfIgnoreCase(code, text, startPos); diff --git a/jadx-gui/src/test/java/jadx/gui/TestI18n.java b/jadx-gui/src/test/java/jadx/gui/TestI18n.java index d8596ae0a..fdfef3453 100644 --- a/jadx-gui/src/test/java/jadx/gui/TestI18n.java +++ b/jadx-gui/src/test/java/jadx/gui/TestI18n.java @@ -1,10 +1,5 @@ package jadx.gui; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.empty; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - import java.io.IOException; import java.io.Reader; import java.nio.file.Files; @@ -20,6 +15,11 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.empty; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + public class TestI18n { private static Path guiJavaPath; @@ -45,8 +45,7 @@ public class TestI18n { if (reference == null) { reference = lines; referenceName = p.getFileName().toString(); - } - else { + } else { compareToReference(p); } @@ -97,7 +96,7 @@ public class TestI18n { try { List lines = Files.readAllLines(p); for (String line : lines) { - for (Iterator it = keys.iterator(); it.hasNext(); ) { + for (Iterator it = keys.iterator(); it.hasNext();) { if (line.contains(it.next())) { it.remove(); } diff --git a/jadx-gui/src/test/java/jadx/gui/treemodel/JSourcesTest.java b/jadx-gui/src/test/java/jadx/gui/treemodel/JSourcesTest.java index 9053faa61..d2f789c3f 100644 --- a/jadx-gui/src/test/java/jadx/gui/treemodel/JSourcesTest.java +++ b/jadx-gui/src/test/java/jadx/gui/treemodel/JSourcesTest.java @@ -15,9 +15,9 @@ import jadx.core.dex.nodes.ClassNode; import jadx.gui.JadxWrapper; import static java.util.Arrays.asList; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; -import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -53,8 +53,7 @@ public class JSourcesTest { List packages = asList( newPkg("a.b"), newPkg("a.c"), - newPkg("a.d") - ); + newPkg("a.d")); List out = sources.getHierarchyPackages(packages); assertThat(out, hasSize(1)); @@ -69,8 +68,7 @@ public class JSourcesTest { List packages = asList( newPkg("a.b.p1"), newPkg("a.b.p2"), - newPkg("a.b.p3") - ); + newPkg("a.b.p3")); List out = sources.getHierarchyPackages(packages); assertThat(out, hasSize(1)); @@ -87,8 +85,7 @@ public class JSourcesTest { newPkg("a.b.c.p2"), newPkg("a.b.c.p3"), newPkg("d.e"), - newPkg("d.f.a") - ); + newPkg("d.f.a")); List out = sources.getHierarchyPackages(packages); assertThat(out, hasSize(2)); diff --git a/jadx-gui/src/test/java/jadx/gui/utils/CertificateManagerTest.java b/jadx-gui/src/test/java/jadx/gui/utils/CertificateManagerTest.java index c5616f16a..d622e1894 100644 --- a/jadx-gui/src/test/java/jadx/gui/utils/CertificateManagerTest.java +++ b/jadx-gui/src/test/java/jadx/gui/utils/CertificateManagerTest.java @@ -1,8 +1,5 @@ package jadx.gui.utils; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; @@ -13,6 +10,9 @@ import java.util.Collection; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + public class CertificateManagerTest { private static final String CERTIFICATE_TEST_DIR = "certificate-test/"; private static final String DSA = "CERT.DSA"; @@ -84,8 +84,7 @@ public class CertificateManagerTest { String string = certificateManagerRSA.generateFingerprint(); assertTrue(string.contains("61 18 0A 71 3F C9 55 16 4E 04 E3 C5 45 08 D9 11")); assertTrue(string.contains("A0 6E A6 06 DB 2C 6F 3A 16 56 7F 75 97 7B AE 85 C2 13 09 37")); - assertTrue(string.contains("12 53 E8 BB C8 AA 27 A8 49 9B F8 0D 6E 68 CE 32 35 50 DE 55 A7 E7 8C 29 51 00 96 D7 56 F4 54 " + - "44")); + assertTrue(string.contains("12 53 E8 BB C8 AA 27 A8 49 9B F8 0D 6E 68 CE 32 35 50 DE 55 A7 E7 8C 29 51 00 96 D7 56 F4 54 44")); } @Test @@ -93,8 +92,7 @@ public class CertificateManagerTest { String string = certificateManagerDSA.generateFingerprint(); assertTrue(string.contains("D9 06 A6 2D 1F 79 8C 9D A6 EF 40 C7 2E C2 EA 0B")); assertTrue(string.contains("18 E9 9C D4 A1 40 8F 63 FA EC 2E 62 A0 F2 AE B7 3F C3 C2 04")); - assertTrue(string.contains("74 F9 48 64 EE AC 92 26 53 2C 7A 0E 55 BE 5E D8 2F A7 D9 A9 99 F5 D5 21 2C 51 21 C4 31 AD 73 " + - "40")); + assertTrue(string.contains("74 F9 48 64 EE AC 92 26 53 2C 7A 0E 55 BE 5E D8 2F A7 D9 A9 99 F5 D5 21 2C 51 21 C4 31 AD 73 40")); } @Test @@ -102,16 +100,23 @@ public class CertificateManagerTest { String string = certificateManagerRSA.generatePublicKey(); assertTrue(string.contains("RSA")); assertTrue(string.contains("65537")); - assertTrue(string.contains( - "16819531290318044625546437357099080306019392752925688951114880688329201213180109168890384305768067101521914473763638669503560977521269328582980060332888147680193318231260043189411794465899645633586173494259691101582064441956032924396850221679489313043628562082670183392670094163371858684118480409374749790551473773845213427476236147328434427272177623018935282929152308753854314219987617604037468769472089902090243358285991739642170211970862773121939911777280101937073243006335384636193260583579409760790138329893534549366882523130765297472656435892831796545149793228897111760122091442123535919361963075454640516520743")); + assertTrue(string.contains("1681953129031804462554643735709908030601939275292568895111488068832920121318010916" + + "889038430576806710152191447376363866950356097752126932858298006033288814768019331823126004318941179" + + "4465899645633586173494259691101582064441956032924396850221679489313043628562082670183392670094163371" + + "8586841184804093747497905514737738452134274762361473284344272721776230189352829291523087538543142199" + + "8761760403746876947208990209024335828599173964217021197086277312193991177728010193707324300633538463" + + "6193260583579409760790138329893534549366882523130765297472656435892831796545149793228897111760122091" + + "442123535919361963075454640516520743")); } @Test public void decodeDSAPubKey() { String string = certificateManagerDSA.generatePublicKey(); assertTrue(string.contains("DSA")); - assertTrue(string.contains( - "19323367605058154682563301282345453222279312104889899001698209626254725581511375469963812461090495963838615773832867364330457010553974237985991904800958394169421485070378434746792379708805563793253282995274293621162504943287538455944652344378242226897507369146942411692220922477368782490423187845815262510366")); + assertTrue(string.contains("193233676050581546825633012823454532222793121048898990016982096262547255815113" + + "7546996381246109049596383861577383286736433045701055397423798599190480095839416942148507037843474" + + "67923797088055637932532829952742936211625049432875384559446523443782422268975073691469424116922209" + + "22477368782490423187845815262510366")); } private String getResourcePath(String resName) { diff --git a/jadx-gui/src/test/resources/certificate-test/EMPTY.txt b/jadx-gui/src/test/resources/certificate-test/EMPTY.txt index 30d74d258..9daeafb98 100644 --- a/jadx-gui/src/test/resources/certificate-test/EMPTY.txt +++ b/jadx-gui/src/test/resources/certificate-test/EMPTY.txt @@ -1 +1 @@ -test \ No newline at end of file +test diff --git a/jadx-samples/src/main/java/jadx/samples/TestAnnotations.java b/jadx-samples/src/main/java/jadx/samples/TestAnnotations.java index 70bae924e..eac897d14 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestAnnotations.java +++ b/jadx-samples/src/main/java/jadx/samples/TestAnnotations.java @@ -47,12 +47,14 @@ public class TestAnnotations extends AbstractTest { Thread.State state() default Thread.State.TERMINATED; } - @MyAnnotation(name = "b", + @MyAnnotation( + name = "b", num = 7, cls = Exception.class, - doubles = {0.0, 1.1}, + doubles = { 0.0, 1.1 }, value = 9.87f, - simple = @SimpleAnnotation(false)) + simple = @SimpleAnnotation(false) + ) public static Object test(String[] a) { return Arrays.asList(a); } @@ -67,10 +69,12 @@ public class TestAnnotations extends AbstractTest { Class[] value(); } - @ClassesAnnotation({ - int.class, int[].class, int[][][].class, - String.class, String[].class, String[][].class - }) + @ClassesAnnotation( + { + int.class, int[].class, int[][][].class, + String.class, String[].class, String[][].class + } + ) public static Object test3(Object b) { return b.toString(); } diff --git a/jadx-samples/src/main/java/jadx/samples/TestAnnotationsParser.java b/jadx-samples/src/main/java/jadx/samples/TestAnnotationsParser.java index cfb364d17..57f5537d6 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestAnnotationsParser.java +++ b/jadx-samples/src/main/java/jadx/samples/TestAnnotationsParser.java @@ -7,7 +7,7 @@ import java.lang.annotation.Target; public class TestAnnotationsParser extends AbstractTest { - @Target({ElementType.TYPE}) + @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public static @interface A { int i(); diff --git a/jadx-samples/src/main/java/jadx/samples/TestArrays.java b/jadx-samples/src/main/java/jadx/samples/TestArrays.java index fbe599b90..c5624b194 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestArrays.java +++ b/jadx-samples/src/main/java/jadx/samples/TestArrays.java @@ -4,7 +4,7 @@ public class TestArrays extends AbstractTest { public int test1(int i) { // fill-array-data - int[] a = new int[]{1, 2, 3, 5}; + int[] a = new int[] { 1, 2, 3, 5 }; return a[i]; } @@ -22,13 +22,13 @@ public class TestArrays extends AbstractTest { private static Object test4(int type) { if (type == 1) { - return new int[]{1, 2}; + return new int[] { 1, 2 }; } else if (type == 2) { - return new float[]{1, 2}; + return new float[] { 1, 2 }; } else if (type == 3) { - return new short[]{1, 2}; + return new short[] { 1, 2 }; } else if (type == 4) { - return new byte[]{1, 2}; + return new byte[] { 1, 2 }; } else { return null; } diff --git a/jadx-samples/src/main/java/jadx/samples/TestCF.java b/jadx-samples/src/main/java/jadx/samples/TestCF.java index 96a1e4585..407606804 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestCF.java +++ b/jadx-samples/src/main/java/jadx/samples/TestCF.java @@ -169,11 +169,11 @@ public class TestCF extends AbstractTest { } } - public static void test_hello(String[] args) { + public static void testHello(String[] args) { System.out.println("Hello world!"); } - public static void test_print(String[] args) { + public static void testPrint(String[] args) { for (String arg : args) { System.out.println(arg); } diff --git a/jadx-samples/src/main/java/jadx/samples/TestCF2.java b/jadx-samples/src/main/java/jadx/samples/TestCF2.java index f09ce28da..336a3957f 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestCF2.java +++ b/jadx-samples/src/main/java/jadx/samples/TestCF2.java @@ -1,10 +1,10 @@ package jadx.samples; public class TestCF2 extends AbstractTest { - private final Object ready_mutex = new Object(); + private final Object readyMutex = new Object(); private boolean ready = false; - public int simple_loops() throws InterruptedException { + public int simpleLoops() throws InterruptedException { int[] a = new int[]{1, 2, 4, 6, 8}; int b = 0; for (int i = 0; i < a.length; i++) { @@ -22,7 +22,7 @@ public class TestCF2 extends AbstractTest { public void run() throws InterruptedException { while (true) { if (!ready) { - ready_mutex.wait(); + readyMutex.wait(); } ready = false; func(); @@ -33,7 +33,7 @@ public class TestCF2 extends AbstractTest { ready = true; } - public void do_while() throws InterruptedException { + public void doWhile() throws InterruptedException { int i = 3; do { func(); @@ -41,7 +41,7 @@ public class TestCF2 extends AbstractTest { } while (i < 5); } - public void do_while_2(long k) throws InterruptedException { + public void doWhile2(long k) throws InterruptedException { if (k > 5) { long i = 3; do { @@ -51,7 +51,7 @@ public class TestCF2 extends AbstractTest { } } - public void do_while_3(int k) throws InterruptedException { + public void doWhile3(int k) throws InterruptedException { int i = 3; do { if (k > 9) { @@ -61,7 +61,7 @@ public class TestCF2 extends AbstractTest { } while (i < 5); } - public int do_while_break(int k) throws InterruptedException { + public int doWhileBreak(int k) throws InterruptedException { int i = 3; do { if (k > 9) { @@ -74,7 +74,7 @@ public class TestCF2 extends AbstractTest { return i; } - public int do_while_continue(int k) throws InterruptedException { + public int doWhileContinue(int k) throws InterruptedException { int i = 0; do { if (k > 9) { @@ -86,7 +86,7 @@ public class TestCF2 extends AbstractTest { return i; } - public void do_while_return2(boolean k) throws InterruptedException { + public void doWhileReturn2(boolean k) throws InterruptedException { int i = 3; do { if (k) { @@ -96,7 +96,7 @@ public class TestCF2 extends AbstractTest { } while (i < 5); } - public void while_iterator(String[] args, int k) throws InterruptedException { + public void whileIterator(String[] args, int k) throws InterruptedException { for (String arg : args) { if (arg.length() > 9) { func(); @@ -106,7 +106,7 @@ public class TestCF2 extends AbstractTest { @Override public boolean testRun() throws Exception { - assertEquals(simple_loops(), 252); + assertEquals(simpleLoops(), 252); // TODO add checks return true; } diff --git a/jadx-samples/src/main/java/jadx/samples/TestCF3.java b/jadx-samples/src/main/java/jadx/samples/TestCF3.java index 5a368ad29..3589ddbb6 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestCF3.java +++ b/jadx-samples/src/main/java/jadx/samples/TestCF3.java @@ -226,9 +226,9 @@ public class TestCF3 extends AbstractTest { assertEquals(testReturnInLoop2(list1), "a"); // TODO this line required to omit generic information because it create List -// List list2 = Arrays.asList(null, null, null); -// assertEquals(testReturnInLoop(list2), "error"); -// assertEquals(testReturnInLoop2(list2), "error"); + // List list2 = Arrays.asList(null, null, null); + // assertEquals(testReturnInLoop(list2), "error"); + // assertEquals(testReturnInLoop2(list2), "error"); // assertTrue(testLabeledBreakContinue()); @@ -242,7 +242,7 @@ public class TestCF3 extends AbstractTest { assertEquals(testComplexIfInLoop3(6), 6); assertEquals(testComplexIfInLoop3(8), 24); - assertEquals(testLoops(new int[]{1, 2, 3, 4, 5, 6}, 2), 19); + assertEquals(testLoops(new int[] { 1, 2, 3, 4, 5, 6 }, 2), 19); assertTrue(testInline() > 20); assertTrue(testInline2()); diff --git a/jadx-samples/src/main/java/jadx/samples/TestEnum.java b/jadx-samples/src/main/java/jadx/samples/TestEnum.java index 3358d88b7..89bb8f2e1 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestEnum.java +++ b/jadx-samples/src/main/java/jadx/samples/TestEnum.java @@ -97,6 +97,7 @@ public class TestEnum extends AbstractTest { } } + @SuppressWarnings("NoWhitespaceBefore") public enum EmptyEnum { ; diff --git a/jadx-samples/src/main/java/jadx/samples/TestFields.java b/jadx-samples/src/main/java/jadx/samples/TestFields.java index fbce500e8..6b49748c9 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestFields.java +++ b/jadx-samples/src/main/java/jadx/samples/TestFields.java @@ -2,6 +2,7 @@ package jadx.samples; import java.util.Arrays; +@SuppressWarnings("ConstantName") public class TestFields extends AbstractTest { public static class ConstFields { @@ -20,7 +21,7 @@ public class TestFields extends AbstractTest { private static final String fstr = "final string"; private static final double fd = 3.14; - private static final double[] fda = new double[]{3.14, 2.7}; + private static final double[] fda = new double[] { 3.14, 2.7 }; private static int si = 5; diff --git a/jadx-samples/src/main/java/jadx/samples/TestGenerics.java b/jadx-samples/src/main/java/jadx/samples/TestGenerics.java index 3e70e3d1a..dcb5438ed 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestGenerics.java +++ b/jadx-samples/src/main/java/jadx/samples/TestGenerics.java @@ -37,6 +37,7 @@ public class TestGenerics extends AbstractTest { public static Box integerBox = new Box<>(); + @SuppressWarnings("InterfaceTypeParameterName") public interface Pair { K getKey(); @@ -69,8 +70,8 @@ public class TestGenerics extends AbstractTest { public static class Util { // Generic static method public static boolean compare(Pair p1, Pair p2) { - return p1.getKey().equals(p2.getKey()) && - p1.getValue().equals(p2.getValue()); + return p1.getKey().equals(p2.getKey()) + && p1.getValue().equals(p2.getValue()); } } diff --git a/jadx-samples/src/main/java/jadx/samples/TestInitializers.java b/jadx-samples/src/main/java/jadx/samples/TestInitializers.java index 8f195ad63..ee061a67c 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestInitializers.java +++ b/jadx-samples/src/main/java/jadx/samples/TestInitializers.java @@ -4,7 +4,7 @@ public class TestInitializers extends AbstractTest { private static String a; private static int counter; - private A c_a; + private A cA; public static class A { public static String a; @@ -23,19 +23,19 @@ public class TestInitializers extends AbstractTest { private int bbb; public B() { - if (c_a.z()) { + if (cA.z()) { b = -1; } else { b = 1; } } - public B(int _b) { - b = _b; + public B(int pb) { + b = pb; } - public void setB(int _b) { - b = _b; + public void setB(int pb) { + b = pb; } public int getB() { @@ -57,7 +57,7 @@ public class TestInitializers extends AbstractTest { } { - c_a = new A(); + cA = new A(); } @Override diff --git a/jadx-samples/src/main/java/jadx/samples/TestInnerNames.java b/jadx-samples/src/main/java/jadx/samples/TestInnerNames.java index 9c6e38a59..efe5281f5 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestInnerNames.java +++ b/jadx-samples/src/main/java/jadx/samples/TestInnerNames.java @@ -2,6 +2,7 @@ package jadx.samples; public class TestInnerNames extends AbstractTest { + @SuppressWarnings("MemberName") public int D; public class A extends TestInner.MyThread { diff --git a/jadx-samples/src/main/java/jadx/samples/TestInvoke.java b/jadx-samples/src/main/java/jadx/samples/TestInvoke.java index b1279c950..2259160f8 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestInvoke.java +++ b/jadx-samples/src/main/java/jadx/samples/TestInvoke.java @@ -49,13 +49,13 @@ public class TestInvoke extends AbstractTest { public boolean testRun() throws Exception { TestInvoke inv = new TestInvoke(); - inv.parse(new String[]{"12", "35"}); + inv.parse(new String[] { "12", "35" }); assertTrue(inv.getF() == 12); inv.parse(new String[0]); assertTrue(inv.getF() == 20); assertTrue(inv.testVarArgs("a", "2", "III")); - assertTrue(inv.testVarArgs2("a".toCharArray(), new char[]{'1', '2'}).equals("a12")); + assertTrue(inv.testVarArgs2("a".toCharArray(), new char[] { '1', '2' }).equals("a12")); assertEquals(testSameArgTypes("a", "b"), "a"); return true; diff --git a/jadx-samples/src/main/java/jadx/samples/TestStringProcessing.java b/jadx-samples/src/main/java/jadx/samples/TestStringProcessing.java index 4c4d80e06..0c3499fed 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestStringProcessing.java +++ b/jadx-samples/src/main/java/jadx/samples/TestStringProcessing.java @@ -2,6 +2,7 @@ package jadx.samples; public class TestStringProcessing extends AbstractTest { + @SuppressWarnings("AvoidEscapedUnicodeCharacters") public void testStringEscape() { String str = "test\tstr\n"; assertTrue(str.length() == 9); diff --git a/jadx-samples/src/main/java/jadx/samples/TestTryCatch.java b/jadx-samples/src/main/java/jadx/samples/TestTryCatch.java index 48a749ceb..2b7f1a7a2 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestTryCatch.java +++ b/jadx-samples/src/main/java/jadx/samples/TestTryCatch.java @@ -161,7 +161,7 @@ public class TestTryCatch extends AbstractTest { } // TODO: remove 'synchronized(TestTryCatch.class)' block in decompiled version - private synchronized static boolean testSynchronize2(Object obj) throws InterruptedException { + private static synchronized boolean testSynchronize2(Object obj) throws InterruptedException { return obj.toString() != null; } diff --git a/jadx-samples/src/main/java/jadx/samples/TestTypeResolver.java b/jadx-samples/src/main/java/jadx/samples/TestTypeResolver.java index 3eb1e1ec4..302cf2c39 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestTypeResolver.java +++ b/jadx-samples/src/main/java/jadx/samples/TestTypeResolver.java @@ -20,7 +20,7 @@ public class TestTypeResolver extends AbstractTest { public static class TestTernaryInSuper extends TestTypeResolver { public TestTernaryInSuper(int c) { -// super(c > 0 ? c : -c, 1); + // super(c > 0 ? c : -c, 1); } } diff --git a/jadx-samples/src/main/java/jadx/samples/TestUnicode.java b/jadx-samples/src/main/java/jadx/samples/TestUnicode.java index 15e02d8f1..9abf9ec24 100644 --- a/jadx-samples/src/main/java/jadx/samples/TestUnicode.java +++ b/jadx-samples/src/main/java/jadx/samples/TestUnicode.java @@ -9,6 +9,7 @@ public class TestUnicode extends AbstractTest { * Some unicode strings from: * http://www.ltg.ed.ac.uk/~richard/unicode-sample-3-2.html */ + @SuppressWarnings({ "LineLength", "AvoidEscapedUnicodeCharacters" }) public List strings() { List list = new ArrayList<>(); list.add("! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~"); @@ -21,9 +22,9 @@ public class TestUnicode extends AbstractTest { list.add("豈 更 車 賈 滑 串 句 龜 龜 契 金 喇 奈 懶 癩 羅 蘿 螺 裸 邏 樂 洛 烙 珞 落 酪 駱 亂 卵 欄 爛 蘭 鸞 嵐 濫 藍 襤 拉 臘 蠟 廊 朗 浪 狼 郎 來 冷 勞 擄 櫓 爐 盧 老 蘆 虜 路 露 魯 鷺 碌 祿 綠 菉 錄 鹿 論 壟 弄 籠 聾 牢 磊 賂 雷 壘 屢 樓 淚 漏 累 縷 陋 勒 肋 凜 凌 稜 綾 菱 陵 讀 拏 樂 諾 丹 寧 怒 率 異 北 磻 便 復 不 泌 數 索 參 塞 省 葉 說 殺 辰 沈 拾 若 掠 略 亮 兩 凉 梁 糧 良 諒 量 勵"); list.add("ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ ㅤ ㅥ ㅦ ㅧ ㅨ ㅩ ㅪ ㅫ ㅬ ㅭ ㅮ ㅯ ㅰ ㅱ ㅲ ㅳ ㅴ ㅵ ㅶ ㅷ ㅸ ㅹ ㅺ ㅻ ㅼ ㅽ ㅾ ㅿ ㆀ ㆁ ㆂ ㆃ ㆄ ㆅ ㆆ ㆇ ㆈ ㆉ ㆊ ㆋ ㆌ"); list.add("가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿"); - list.add( "؛ ؟ ء آ أ ؤ إ ئ ا ب ة ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ـ ف ق ك ل م ن ه و ى ي ً ٌ ٍ َ ُ ِ ّ ْ ٓ ٔ ٕ ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٪ ٫ ٬ ٭ ٮ ٯ ٰ ٱ ٲ ٳ ٴ ٵ ٶ ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ ڀ ځ ڂ ڃ ڄ څ چ ڇ ڈ ډ ڊ ڋ ڌ ڍ ڎ ڏ ڐ ڑ ڒ ړ ڔ ڕ ږ ڗ ژ ڙ ښ ڛ ڜ ڝ ڞ ڟ ڠ ڡ ڢ ڣ ڤ ڥ ڦ ڧ ڨ ک ڪ ګ ڬ"); - list.add( "ஃ அ ஆ இ ஈ உ ஊ எ ஏ ஐ ஒ ஓ ஔ க ங ச ஜ ஞ ட ண த ந ன ப ம ய ர ற ல ள ழ வ ஷ ஸ ஹ ா ி ீ ு ூ ெ ே ை ொ ோ ௌ ் ௗ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ ௰ ௱ ௲"); - list.add( "\uD800\uDF00 \uD800\uDF01 \uD800\uDF02 \uD800\uDF03 \uD800\uDF04 \uD800\uDF05 \uD800\uDF06 \uD800\uDF07 \uD800\uDF08 \uD800\uDF09 \uD800\uDF0A \uD800\uDF0B \uD800\uDF0C \uD800\uDF0D \uD800\uDF0E \uD800\uDF0F \uD800\uDF10 \uD800\uDF11 \uD800\uDF12 \uD800\uDF13 \uD800\uDF14 \uD800\uDF15 \uD800\uDF16 \uD800\uDF17 \uD800\uDF18 \uD800\uDF19 \uD800\uDF1A \uD800\uDF1B \uD800\uDF1C \uD800\uDF1D \uD800\uDF1E \uD800\uDF20 \uD800\uDF21 \uD800\uDF22 \uD800\uDF23"); + list.add("؛ ؟ ء آ أ ؤ إ ئ ا ب ة ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ـ ف ق ك ل م ن ه و ى ي ً ٌ ٍ َ ُ ِ ّ ْ ٓ ٔ ٕ ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٪ ٫ ٬ ٭ ٮ ٯ ٰ ٱ ٲ ٳ ٴ ٵ ٶ ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ ڀ ځ ڂ ڃ ڄ څ چ ڇ ڈ ډ ڊ ڋ ڌ ڍ ڎ ڏ ڐ ڑ ڒ ړ ڔ ڕ ږ ڗ ژ ڙ ښ ڛ ڜ ڝ ڞ ڟ ڠ ڡ ڢ ڣ ڤ ڥ ڦ ڧ ڨ ک ڪ ګ ڬ"); + list.add("ஃ அ ஆ இ ஈ உ ஊ எ ஏ ஐ ஒ ஓ ஔ க ங ச ஜ ஞ ட ண த ந ன ப ம ய ர ற ல ள ழ வ ஷ ஸ ஹ ா ி ீ ு ூ ெ ே ை ொ ோ ௌ ் ௗ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ ௰ ௱ ௲"); + list.add("\uD800\uDF00 \uD800\uDF01 \uD800\uDF02 \uD800\uDF03 \uD800\uDF04 \uD800\uDF05 \uD800\uDF06 \uD800\uDF07 \uD800\uDF08 \uD800\uDF09 \uD800\uDF0A \uD800\uDF0B \uD800\uDF0C \uD800\uDF0D \uD800\uDF0E \uD800\uDF0F \uD800\uDF10 \uD800\uDF11 \uD800\uDF12 \uD800\uDF13 \uD800\uDF14 \uD800\uDF15 \uD800\uDF16 \uD800\uDF17 \uD800\uDF18 \uD800\uDF19 \uD800\uDF1A \uD800\uDF1B \uD800\uDF1C \uD800\uDF1D \uD800\uDF1E \uD800\uDF20 \uD800\uDF21 \uD800\uDF22 \uD800\uDF23"); list.add("𐌀 𐌁 𐌂 𐌃 𐌄 𐌅 𐌆 𐌇 𐌈 𐌉 𐌊 𐌋 𐌌 𐌍 𐌎 𐌏 𐌐 𐌑 𐌒 𐌓 𐌔 𐌕 𐌖 𐌗 𐌘 𐌙 𐌚 𐌛 𐌜 𐌝 𐌞 𐌠 𐌡 𐌢 𐌣"); return list; }