From f5216b77f81aa0cabab04bbac845e67c6f085e43 Mon Sep 17 00:00:00 2001 From: Skylot Date: Thu, 28 Oct 2021 17:48:39 +0100 Subject: [PATCH] fix(gui): resolve some minor rename issues - correct variable definition in method arguments - refresh current class if rename interface method --- .../main/java/jadx/core/codegen/MethodGen.java | 2 +- .../main/java/jadx/core/codegen/RegionGen.java | 2 +- .../src/main/java/jadx/gui/ui/MainWindow.java | 8 ++------ .../java/jadx/gui/ui/codearea/RenameAction.java | 2 +- .../java/jadx/gui/ui/dialog/RenameDialog.java | 15 ++++++++++++--- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java index c697980b..b815a24a 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java @@ -228,7 +228,7 @@ public class MethodGen { } code.add(' '); if (code.isMetadataSupported() && ssaVar != null) { - code.attachAnnotation(VarDeclareRef.get(mth, var)); + code.attachDefinition(VarDeclareRef.get(mth, var)); } code.add(nameGen.assignArg(var)); diff --git a/jadx-core/src/main/java/jadx/core/codegen/RegionGen.java b/jadx-core/src/main/java/jadx/core/codegen/RegionGen.java index 5943c20b..f451e263 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/RegionGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/RegionGen.java @@ -348,7 +348,7 @@ public class RegionGen extends InsnGen { } else if (arg instanceof RegisterArg) { CodeVar codeVar = ((RegisterArg) arg).getSVar().getCodeVar(); if (code.isMetadataSupported()) { - code.attachAnnotation(VarDeclareRef.get(mth, codeVar)); + code.attachDefinition(VarDeclareRef.get(mth, codeVar)); } code.add(mgen.getNameGen().assignArg(codeVar)); } else if (arg instanceof NamedArg) { 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 1e6b629e..9edc7f20 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -717,19 +717,15 @@ public class MainWindow extends JFrame { } } - private void rename(JNode node) { - RenameDialog.rename(this, node); - } - private void treeRightClickAction(MouseEvent e) { JNode obj = getJNodeUnderMouse(e, false); if (obj instanceof JPackage) { JPackagePopupMenu menu = new JPackagePopupMenu(this, (JPackage) obj); menu.show(e.getComponent(), e.getX(), e.getY()); } else if (obj instanceof JClass || obj instanceof JField || obj instanceof JMethod) { - JPopupMenu menu = new JPopupMenu(); JMenuItem jmi = new JMenuItem(NLS.str("popup.rename")); - jmi.addActionListener(action -> rename(obj)); + jmi.addActionListener(action -> RenameDialog.rename(this, obj)); + JPopupMenu menu = new JPopupMenu(); menu.add(jmi); menu.show(e.getComponent(), e.getX(), e.getY()); } diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/RenameAction.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/RenameAction.java index c6f437db..64813764 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/RenameAction.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/RenameAction.java @@ -49,7 +49,7 @@ public final class RenameAction extends JNodeMenuAction { LOG.warn("Can't rename node: {}", node); return; } - RenameDialog.rename(codeArea.getMainWindow(), node); + RenameDialog.rename(codeArea.getMainWindow(), codeArea.getNode(), node); node = null; } diff --git a/jadx-gui/src/main/java/jadx/gui/ui/dialog/RenameDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/dialog/RenameDialog.java index 2aa9fb3b..3b6fb681 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/dialog/RenameDialog.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/dialog/RenameDialog.java @@ -68,19 +68,25 @@ public class RenameDialog extends JDialog { private final transient MainWindow mainWindow; private final transient CacheObject cache; + private final transient JNode source; private final transient JNode node; private transient JTextField renameField; public static boolean rename(MainWindow mainWindow, JNode node) { - RenameDialog renameDialog = new RenameDialog(mainWindow, node); + return rename(mainWindow, node, node); + } + + public static boolean rename(MainWindow mainWindow, JNode source, JNode node) { + RenameDialog renameDialog = new RenameDialog(mainWindow, source, node); renameDialog.setVisible(true); return true; } - private RenameDialog(MainWindow mainWindow, JNode node) { + private RenameDialog(MainWindow mainWindow, JNode source, JNode node) { super(mainWindow); this.mainWindow = mainWindow; this.cache = mainWindow.getCacheObject(); + this.source = source; this.node = node; initUI(); } @@ -158,6 +164,9 @@ public class RenameDialog extends JDialog { JavaNode javaNode = node.getJavaNode(); List toUpdate = new ArrayList<>(); + if (source != null && source != node) { + toUpdate.add(source.getJavaNode()); + } if (javaNode != null) { toUpdate.add(javaNode); toUpdate.addAll(javaNode.getUseIn()); @@ -171,8 +180,8 @@ public class RenameDialog extends JDialog { } Set updatedTopClasses = toUpdate .stream() + .map(JavaNode::getTopParentClass) .map(nodeCache::makeFrom) - .map(JNode::getRootClass) .filter(Objects::nonNull) .collect(Collectors.toSet()); -- GitLab