From 83decc24731dd5883cc8cd34e50e078c9244de61 Mon Sep 17 00:00:00 2001 From: Skylot Date: Fri, 8 Apr 2022 13:45:27 +0100 Subject: [PATCH] fix(gui): rename class while rename constructor (#1441) --- .../main/java/jadx/gui/treemodel/JMethod.java | 3 +++ .../java/jadx/gui/ui/dialog/RenameDialog.java | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JMethod.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JMethod.java index 156404213..a0f2865c2 100644 --- a/jadx-gui/src/main/java/jadx/gui/treemodel/JMethod.java +++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JMethod.java @@ -103,6 +103,9 @@ public class JMethod extends JNode { @Override public boolean canRename() { + if (mth.isClassInit()) { + return false; + } return !mth.getMethodNode().contains(AFlag.DONT_RENAME); } 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 deff31b23..b58638b79 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 @@ -87,10 +87,24 @@ public class RenameDialog extends JDialog { this.mainWindow = mainWindow; this.cache = mainWindow.getCacheObject(); this.source = source; - this.node = node; + this.node = replaceNode(node); initUI(); } + private JNode replaceNode(JNode node) { + if (node instanceof JMethod) { + JavaMethod javaMethod = ((JMethod) node).getJavaMethod(); + if (javaMethod.isClassInit()) { + throw new JadxRuntimeException("Can't rename class init method: " + node); + } + if (javaMethod.isConstructor()) { + // rename class instead constructor + return node.getJParent(); + } + } + return node; + } + private void rename() { try { updateCodeRenames(set -> processRename(node, renameField.getText(), set));