diff --git a/README.md b/README.md index cc501ef6c61..a6878d7d696 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,7 @@ options: --add-debug-lines - add comments with debug line numbers if available --no-inline-anonymous - disable anonymous classes inline --no-inline-methods - disable methods inline + --no-finally - don't extract finally block --no-replace-consts - don't replace constant value with matching constant field --escape-unicode - escape non latin characters in strings (with \u) --respect-bytecode-access-modifiers - don't change original access modifiers diff --git a/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java b/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java index 884a93455d5..67f105677b8 100644 --- a/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java +++ b/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java @@ -89,6 +89,9 @@ public class JadxCLIArgs { @Parameter(names = { "--no-inline-methods" }, description = "disable methods inline") protected boolean inlineMethods = true; + @Parameter(names = "--no-finally", description = "don't extract finally block") + protected boolean extractFinally = true; + @Parameter(names = "--no-replace-consts", description = "don't replace constant value with matching constant field") protected boolean replaceConsts = true; @@ -282,6 +285,7 @@ public JadxArgs toJadxArgs() { args.setInsertDebugLines(addDebugLines); args.setInlineAnonymousClasses(inlineAnonymousClasses); args.setInlineMethods(inlineMethods); + args.setExtractFinally(extractFinally); args.setRenameFlags(renameFlags); args.setFsCaseSensitive(fsCaseSensitive); args.setCommentsLevel(commentsLevel); @@ -362,6 +366,10 @@ public boolean isInlineMethods() { return inlineMethods; } + public boolean isExtractFinally() { + return extractFinally; + } + public boolean isDeobfuscationOn() { return deobfuscationOn; } 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 8de45268e64..fd10b6b3bdc 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java @@ -385,6 +385,10 @@ public void setInlineMethods(boolean inlineMethods) { this.inlineMethods = inlineMethods; } + public void setExtractFinally(boolean extractFinally) { + this.extractFinally = extractFinally; + } + public void setFsCaseSensitive(boolean fsCaseSensitive) { this.fsCaseSensitive = fsCaseSensitive; } 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 208fa17d288..71f379aaa3c 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java @@ -542,6 +542,13 @@ private SettingsGroup makeDecompilationGroup() { needReload(); }); + JCheckBox extractFinally = new JCheckBox(); + extractFinally.setSelected(settings.isExtractFinally()); + extractFinally.addItemListener(e -> { + settings.setExtractFinally(e.getStateChange() == ItemEvent.SELECTED); + needReload(); + }); + JCheckBox fsCaseSensitive = new JCheckBox(); fsCaseSensitive.setSelected(settings.isFsCaseSensitive()); fsCaseSensitive.addItemListener(e -> { @@ -578,6 +585,7 @@ private SettingsGroup makeDecompilationGroup() { other.addRow(NLS.str("preferences.useDebugInfo"), useDebugInfo); other.addRow(NLS.str("preferences.inlineAnonymous"), inlineAnonymous); other.addRow(NLS.str("preferences.inlineMethods"), inlineMethods); + other.addRow(NLS.str("preferences.extractFinally"), extractFinally); other.addRow(NLS.str("preferences.fsCaseSensitive"), fsCaseSensitive); other.addRow(NLS.str("preferences.useDx"), useDx); other.addRow(NLS.str("preferences.skipResourcesDecode"), resourceDecode); diff --git a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties index 9e10d24600d..5d4bbe8426b 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties @@ -146,6 +146,7 @@ preferences.useImports=Import statements generieren preferences.useDebugInfo=Debug-Infos verwenden preferences.inlineAnonymous=Anonyme Inline-Klassen preferences.inlineMethods=Inline-Methoden +#preferences.extractFinally=Extract finally block preferences.fsCaseSensitive=Dateisystem unterscheidet zwischen Groß/Kleinschreibung preferences.skipResourcesDecode=Keine Ressourcen dekodieren preferences.useKotlinMethodsForVarNames=Kotlin-Methoden für die Umbenennung von Variablen verwenden diff --git a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties index e188eb78690..675c293b2fc 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties @@ -146,7 +146,8 @@ preferences.useImports=Use import statements preferences.useDebugInfo=Use debug info preferences.inlineAnonymous=Inline anonymous classes preferences.inlineMethods=Inline methods -preferences.fsCaseSensitive=File system is case sensitive +preferences.extractFinally=Extract finally block +preferences.fsCaseSensitive=File system is case-sensitive preferences.skipResourcesDecode=Don't decode resources preferences.useKotlinMethodsForVarNames=Use kotlin methods for variables rename preferences.commentsLevel=Code comments level diff --git a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties index 43a52dc6003..0463e83e448 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties @@ -146,6 +146,7 @@ preferences.replaceConsts=Reemplazar constantes #preferences.useDebugInfo=Use debug info #preferences.inlineAnonymous= #preferences.inlineMethods=Inline methods +#preferences.extractFinally=Extract finally block #preferences.fsCaseSensitive= preferences.skipResourcesDecode=No descodificar recursos #preferences.useKotlinMethodsForVarNames=Use kotlin methods for variables rename diff --git a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties index 89464667982..4bc2e3c065b 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties @@ -146,6 +146,7 @@ preferences.useImports=import 문 사용 #preferences.useDebugInfo=Use debug info preferences.inlineAnonymous=인라인 익명 클래스 preferences.inlineMethods=인라인 메서드 +#preferences.extractFinally=Extract finally block preferences.fsCaseSensitive=파일 시스템 대소문자 구별 preferences.skipResourcesDecode=리소스 디코딩 하지 않기 #preferences.useKotlinMethodsForVarNames=Use kotlin methods for variables rename diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties index 0be460d47b8..a0d47f1a68b 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties @@ -146,6 +146,7 @@ preferences.useImports=使用 import 语句 preferences.useDebugInfo=启用调试信息 preferences.inlineAnonymous=内联匿名类 preferences.inlineMethods=内联方法 +#preferences.extractFinally=Extract finally block preferences.fsCaseSensitive=文件系统区分大小写 preferences.skipResourcesDecode=不反编译资源文件 preferences.useKotlinMethodsForVarNames=使用Kotlin方法来重命名变量 diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties index 549b1f54ce5..9c47895a986 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties @@ -146,6 +146,7 @@ preferences.useImports=使用 import 陳述式 preferences.useDebugInfo=使用除錯資訊 preferences.inlineAnonymous=內嵌匿名類別 preferences.inlineMethods=內嵌方式 +#preferences.extractFinally=Extract finally block preferences.fsCaseSensitive=檔案系統區分大小寫 preferences.skipResourcesDecode=不要為資源解碼 preferences.useKotlinMethodsForVarNames=使用 Kotlin 方法來為變數重新命名