From 00196e412bab1602a210185d2a4d48d0f04b39b3 Mon Sep 17 00:00:00 2001 From: Skylot <118523+skylot@users.noreply.github.com> Date: Thu, 5 Mar 2026 18:56:49 +0000 Subject: [PATCH] fix(gui): move scripts leftover code, save tree state on script run --- .../src/main/java/jadx/gui/ui/MainWindow.java | 35 ++++--------------- .../main/resources/files/script.jadx.kts.tmpl | 9 ----- jadx-gui/src/test/java/jadx/gui/TestI18n.java | 1 + 3 files changed, 7 insertions(+), 38 deletions(-) delete mode 100644 jadx-gui/src/main/resources/files/script.jadx.kts.tmpl 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 cae2cf50e..6ec8253dd 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -39,7 +39,6 @@ import javax.swing.Action; import javax.swing.Box; import javax.swing.JCheckBox; import javax.swing.JCheckBoxMenuItem; -import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; @@ -91,7 +90,6 @@ import jadx.core.Jadx; import jadx.core.dex.nodes.ClassNode; import jadx.core.dex.nodes.FieldNode; import jadx.core.dex.nodes.MethodNode; -import jadx.core.export.TemplateFile; import jadx.core.utils.ListUtils; import jadx.core.utils.StringUtils; import jadx.core.utils.android.AndroidManifestParser; @@ -419,30 +417,6 @@ public class MainWindow extends JFrame { update(); } - public void addNewScript() { - FileDialogWrapper fileDialog = new FileDialogWrapper(this, FileOpenMode.CUSTOM_SAVE); - fileDialog.setTitle(NLS.str("file.save")); - Path workingDir = project.getWorkingDir(); - Path baseDir = workingDir != null ? workingDir : settings.getLastSaveFilePath(); - fileDialog.setSelectedFile(baseDir.resolve("script.jadx.kts")); - fileDialog.setFileExtList(Collections.singletonList("jadx.kts")); - fileDialog.setSelectionMode(JFileChooser.FILES_ONLY); - List paths = fileDialog.show(); - if (paths.size() != 1) { - return; - } - Path scriptFile = paths.get(0); - try { - TemplateFile tmpl = TemplateFile.fromResources("/files/script.jadx.kts.tmpl"); - FileUtils.writeFile(scriptFile, tmpl.build()); - } catch (Exception e) { - LOG.error("Failed to save new script file: {}", scriptFile, e); - } - List inputs = project.getFilePaths(); - inputs.add(scriptFile); - refreshTree(inputs); - } - public void removeInput(Path file) { int dialogResult = JOptionPane.showConfirmDialog( this, @@ -650,8 +624,9 @@ public class MainWindow extends JFrame { } public void passesReloaded() { + UiUtils.uiThreadGuard(); tabbedPane.reloadInactiveTabs(); - reloadTree(); + reloadTreePreservingState(); } private void initEvents() { @@ -844,8 +819,10 @@ public class MainWindow extends JFrame { treeRoot.update(); } - // simple save and restore tree state after renaming - // maybe need improve for find and update only changed node + /** + * Simple save and restore tree state after renaming. + * TODO: maybe need improve for find and update only changed node + */ public void reloadTreePreservingState() { List treePath = treeExpansionService.save(); reloadTree(); diff --git a/jadx-gui/src/main/resources/files/script.jadx.kts.tmpl b/jadx-gui/src/main/resources/files/script.jadx.kts.tmpl deleted file mode 100644 index 93bf02458..000000000 --- a/jadx-gui/src/main/resources/files/script.jadx.kts.tmpl +++ /dev/null @@ -1,9 +0,0 @@ -/** -* For script usage check https://github.com/skylot/jadx/blob/master/jadx-plugins/jadx-script/README.md -*/ - -val jadx = getJadxInstance() - -jadx.afterLoad { - log.info { "Hello from jadx script!" } -} diff --git a/jadx-gui/src/test/java/jadx/gui/TestI18n.java b/jadx-gui/src/test/java/jadx/gui/TestI18n.java index f75c940e7..5554eb21a 100644 --- a/jadx-gui/src/test/java/jadx/gui/TestI18n.java +++ b/jadx-gui/src/test/java/jadx/gui/TestI18n.java @@ -122,6 +122,7 @@ public class TestI18n { */ private static final List EXCLUDED_KEYS = Arrays.asList( // keys from `jadx-script-kotlin` + "file.save", "tree.input_scripts", "popup.new_script", "popup.add_scripts",