From c28320e1b2e716800f53c4534daa1be77f60a6d2 Mon Sep 17 00:00:00 2001 From: myzhan Date: Fri, 26 May 2023 04:56:06 +0800 Subject: [PATCH] feat(gui): add an action to prettify json file in resources (PR #1880) * feat(gui): add an action to prettify json file in resources * fix build --------- Co-authored-by: Skylot --- .../java/jadx/gui/ui/codearea/CodeArea.java | 11 +++++++ .../gui/ui/codearea/JsonPrettifyAction.java | 32 +++++++++++++++++++ .../resources/i18n/Messages_de_DE.properties | 1 + .../resources/i18n/Messages_en_US.properties | 1 + .../resources/i18n/Messages_es_ES.properties | 1 + .../resources/i18n/Messages_ko_KR.properties | 1 + .../resources/i18n/Messages_pt_BR.properties | 1 + .../resources/i18n/Messages_ru_RU.properties | 1 + .../resources/i18n/Messages_zh_CN.properties | 1 + .../resources/i18n/Messages_zh_TW.properties | 1 + 10 files changed, 51 insertions(+) create mode 100644 jadx-gui/src/main/java/jadx/gui/ui/codearea/JsonPrettifyAction.java diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodeArea.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodeArea.java index 3134d0a9e..9f3b54239 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodeArea.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodeArea.java @@ -23,6 +23,7 @@ import jadx.gui.JadxWrapper; import jadx.gui.settings.JadxProject; import jadx.gui.treemodel.JClass; import jadx.gui.treemodel.JNode; +import jadx.gui.treemodel.JResource; import jadx.gui.ui.MainWindow; import jadx.gui.ui.panel.ContentPanel; import jadx.gui.utils.CaretPositionFix; @@ -51,6 +52,10 @@ public final class CodeArea extends AbstractCodeArea { addMenuItems(); } + if (node instanceof JResource && node.makeString().endsWith(".json")) { + addMenuForJsonFile(); + } + setHyperlinksEnabled(true); setLinkScanningMask(InputEvent.CTRL_DOWN_MASK); CodeLinkGenerator codeLinkGenerator = new CodeLinkGenerator(this); @@ -137,6 +142,12 @@ public final class CodeArea extends AbstractCodeArea { }); } + private void addMenuForJsonFile() { + JNodePopupBuilder popup = new JNodePopupBuilder(this, getPopupMenu()); + popup.addSeparator(); + popup.add(new JsonPrettifyAction(this)); + } + public int adjustOffsetForToken(@Nullable Token token) { if (token == null) { return -1; diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/JsonPrettifyAction.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/JsonPrettifyAction.java new file mode 100644 index 000000000..7039deda6 --- /dev/null +++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/JsonPrettifyAction.java @@ -0,0 +1,32 @@ +package jadx.gui.ui.codearea; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + +import jadx.gui.treemodel.JNode; +import jadx.gui.utils.NLS; + +public class JsonPrettifyAction extends JNodeAction { + + private static final long serialVersionUID = -2682529369671695550L; + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); + + public JsonPrettifyAction(CodeArea codeArea) { + super(NLS.str("popup.json_prettify"), codeArea); + } + + @Override + public void runAction(JNode node) { + String originString = getCodeArea().getCodeInfo().getCodeStr(); + JsonElement je = JsonParser.parseString(originString); + String prettyString = GSON.toJson(je); + getCodeArea().setText(prettyString); + } + + @Override + public boolean isActionEnabled(JNode node) { + return true; + } +} 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 6038a30a0..8e5a4ea2a 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties @@ -255,6 +255,7 @@ popup.search_global=Globale Suche "%s" #popup.add_files=Add files #popup.add_scripts=Add scripts #popup.new_script=New script +#popup.json_prettify=JSON Prettify #script.run=Run #script.save=Save 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 e628ec473..63a6161da 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties @@ -255,6 +255,7 @@ popup.remove=Remove popup.add_files=Add files popup.add_scripts=Add scripts popup.new_script=New script +popup.json_prettify=JSON Prettify script.run=Run script.save=Save 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 6b52e9981..a5ee97d1a 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties @@ -255,6 +255,7 @@ popup.rename=Nimeta ümber #popup.add_files=Add files #popup.add_scripts=Add scripts #popup.new_script=New script +#popup.json_prettify=JSON Prettify #script.run=Run #script.save=Save 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 ba1e1ac42..6b7b41871 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties @@ -255,6 +255,7 @@ popup.search_global="%s" 전역 검색 #popup.add_files=Add files #popup.add_scripts=Add scripts #popup.new_script=New script +#popup.json_prettify=JSON Prettify #script.run=Run #script.save=Save diff --git a/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties b/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties index 781e441e6..2486d0d8b 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties @@ -255,6 +255,7 @@ popup.search_global=Busca global "%s" #popup.add_files=Add files #popup.add_scripts=Add scripts #popup.new_script=New script +#popup.json_prettify=JSON Prettify #script.run=Run #script.save=Save diff --git a/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties b/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties index 55751a462..71d2e2cf9 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties @@ -255,6 +255,7 @@ popup.search_global=Глобальный поиск "%s" #popup.add_files=Add files #popup.add_scripts=Add scripts #popup.new_script=New script +#popup.json_prettify=JSON Prettify #script.run=Run #script.save=Save 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 63d5f5fcf..30615d097 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties @@ -255,6 +255,7 @@ popup.remove=移除 popup.add_files=添加文件 popup.add_scripts=添加脚本 popup.new_script=新建脚本 +popup.json_prettify=JSON 格式化 script.run=运行 script.save=保存 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 739cf94c7..415d82efc 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties @@ -255,6 +255,7 @@ popup.search_global=全域搜尋 "%s" #popup.add_files=Add files #popup.add_scripts=Add scripts #popup.new_script=New script +popup.json_prettify=JSON 格式化 #script.run=Run #script.save=Save