From d3f6160e626a3b259efb78fbe3d3f76120597590 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 30 Jul 2022 14:03:32 +0100 Subject: [PATCH] feat: add option to disable finally block extraction (#1592) --- README.md | 1 + jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java | 8 ++++++++ .../src/main/java/jadx/gui/settings/JadxSettings.java | 4 ++++ .../main/java/jadx/gui/settings/JadxSettingsWindow.java | 8 ++++++++ .../src/main/resources/i18n/Messages_de_DE.properties | 1 + .../src/main/resources/i18n/Messages_en_US.properties | 3 ++- .../src/main/resources/i18n/Messages_es_ES.properties | 1 + .../src/main/resources/i18n/Messages_ko_KR.properties | 1 + .../src/main/resources/i18n/Messages_zh_CN.properties | 1 + .../src/main/resources/i18n/Messages_zh_TW.properties | 1 + 10 files changed, 28 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cc501ef6..a6878d7d 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 884a9345..67f10567 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 class JadxCLIArgs { 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 class JadxCLIArgs { 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 8de45268..fd10b6b3 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 class JadxSettings extends JadxCLIArgs { 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 208fa17d..71f379aa 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 @@ public class JadxSettingsWindow extends JDialog { 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 @@ public class JadxSettingsWindow extends JDialog { 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 9e10d246..5d4bbe84 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 e188eb78..675c293b 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 43a52dc6..0463e83e 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 89464667..4bc2e3c0 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 0be460d4..a0d47f1a 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 549b1f54..9c47895a 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 方法來為變數重新命名 -- GitLab