From 4a39af7cb3067b7df19a333ae4e9a2d821eba0f3 Mon Sep 17 00:00:00 2001 From: Jan S Date: Tue, 30 Apr 2019 23:17:08 +0200 Subject: [PATCH] feat(gui): make search bar usable for smali code (PR #652) --- jadx-core/src/main/java/jadx/api/JadxDecompiler.java | 4 +--- .../src/main/java/jadx/gui/ui/codearea/CodePanel.java | 7 ++++++- .../src/main/java/jadx/gui/ui/codearea/SearchBar.java | 9 ++++++++- .../src/main/java/jadx/gui/ui/codearea/SmaliArea.java | 1 + 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java index 9234e9fe1..712ae09fa 100644 --- a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java +++ b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java @@ -2,9 +2,7 @@ package jadx.api; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.io.StringWriter; -import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; @@ -312,7 +310,7 @@ public final class JadxDecompiler { Path path = cls.dex().getDexFile().getPath(); String className = cls.getAlias().makeRawFullName(); className = 'L' + className.replace('.', '/') + ';'; - try (InputStream in = Files.newInputStream(path)) { + try { DexBackedDexFile dexFile = DexFileFactory.loadDexFile(path.toFile(), Opcodes.getDefault()); boolean decompiled = false; for (DexBackedClassDef classDef : dexFile.getClasses()) { diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java index b1d824536..180d70e04 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java @@ -45,11 +45,16 @@ public final class CodePanel extends ContentPanel { add(areaTabbedPane); KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_F, Utils.ctrlButton()); - Utils.addKeyBinding(codeArea, key, "SearchAction", new SearchAction()); + SearchAction searchAction = new SearchAction(); + Utils.addKeyBinding(codeArea, key, "SearchAction", searchAction); + Utils.addKeyBinding(smaliArea, key, "SearchAction", searchAction); areaTabbedPane.addChangeListener(e -> { if (areaTabbedPane.getSelectedComponent() == smaliScrollPane) { smaliArea.load(); + searchBar.setRTextArea(smaliArea); + } else if (areaTabbedPane.getSelectedComponent() == codeScrollPane) { + searchBar.setRTextArea(codeArea); } }); } 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 443845035..61ea5f95c 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 @@ -32,7 +32,7 @@ class SearchBar extends JToolBar { private static final Icon ICON_DOWN = Utils.openIcon("arrow_down"); private static final Icon ICON_CLOSE = Utils.openIcon("cross"); - private final RSyntaxTextArea rTextArea; + private RSyntaxTextArea rTextArea; private final JTextField searchField; private final JCheckBox markAllCB; @@ -168,4 +168,11 @@ class SearchBar extends JToolBar { searchField.setBackground(COLOR_BG_NORMAL); } } + + public void setRTextArea(RSyntaxTextArea rTextArea) { + this.rTextArea = rTextArea; + if (isVisible()) { + this.search(0); + } + } } diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/SmaliArea.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/SmaliArea.java index b11faa8b1..ce7fc1c42 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/SmaliArea.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/SmaliArea.java @@ -18,6 +18,7 @@ public final class SmaliArea extends RSyntaxTextArea { void load() { if (getText().isEmpty()) { setText(node.getSmali()); + setCaretPosition(0); } } }