From 042d76c67894ea20ece8e296ec055404eddc4d32 Mon Sep 17 00:00:00 2001 From: Jakub Herkel Date: Mon, 28 Dec 2020 12:53:30 +0100 Subject: [PATCH 1/2] [NETBEANS-4274] fix refactoring of class member when a new name is the same as the name of a local variable --- .../java/plugins/RenameTransformer.java | 2 +- .../refactoring/java/test/RenameTest.java | 69 +++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java index 5ce03c7993ed..08976676e4b2 100644 --- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java +++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java @@ -254,7 +254,7 @@ public boolean accept(Element e, TypeMirror type) { String useThis = null; String useSuper = null; - if (elementToFind!=null && elementToFind.getKind().isField()) { + if (elementToFind!=null && elementToFind.getKind().isField() && tree.getKind() != Tree.Kind.MEMBER_SELECT) { Scope scope = workingCopy.getTrees().getScope(elementPath); for (Element ele : scope.getLocalElements()) { if ((ele.getKind() == ElementKind.LOCAL_VARIABLE || ele.getKind() == ElementKind.PARAMETER) diff --git a/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RenameTest.java b/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RenameTest.java index 0f2686fb4e3d..e79789998494 100644 --- a/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RenameTest.java +++ b/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RenameTest.java @@ -843,6 +843,75 @@ public void testRenamePropUndoRedo() throws Exception { // #220547 } + public void testRenameLocalVariable_1() throws Exception { // see NETBEANS-4274 + writeFilesAndWaitForScan(src, + new File("t/X.java", "package t;\n" + + "public class X {\n" + + " private static int i;\n" + + " public static void main(String[] args) {\n" + + " X x = new X();\n" + + " String newName = Integer.toString(x.i);\n" + + " }\n" + + "}")); + JavaRenameProperties props = new JavaRenameProperties(); + performRename(src.getFileObject("t/X.java"), 1, -1, "newName", props, true); + verifyContent(src, + new File("t/X.java", "package t;\n" + + "public class X {\n" + + " private static int newName;\n" + + " public static void main(String[] args) {\n" + + " X x = new X();\n" + + " String newName = Integer.toString(x.newName);\n" + + " }\n" + + "}")); + } + + public void testRenameLocalVariable_2() throws Exception { // see NETBEANS-4274 + writeFilesAndWaitForScan(src, + new File("t/X.java", "package t;\n" + + "public class X {\n" + + " private int i;\n" + + " public static void main(String[] args) {\n" + + " X x = new X();\n" + + " String newName = Integer.toString(x.i);\n" + + " }\n" + + "}")); + JavaRenameProperties props = new JavaRenameProperties(); + performRename(src.getFileObject("t/X.java"), 1, -1, "newName", props, true); + verifyContent(src, + new File("t/X.java", "package t;\n" + + "public class X {\n" + + " private int newName;\n" + + " public static void main(String[] args) {\n" + + " X x = new X();\n" + + " String newName = Integer.toString(x.newName);\n" + + " }\n" + + "}")); + } + + public void testRenameLocalVariable_3() throws Exception { // see NETBEANS-4274 + writeFilesAndWaitForScan(src, + new File("t/X.java", "package t;\n" + + "public class X {\n" + + " private static int i;\n" + + " public static void main(String[] args) {\n" + + " X x = new X();\n" + + " String newName = Integer.toString(i);\n" + + " }\n" + + "}")); + JavaRenameProperties props = new JavaRenameProperties(); + performRename(src.getFileObject("t/X.java"), 1, -1, "newName", props, true); + verifyContent(src, + new File("t/X.java", "package t;\n" + + "public class X {\n" + + " private static int newName;\n" + + " public static void main(String[] args) {\n" + + " X x = new X();\n" + + " String newName = Integer.toString(X.newName);\n" + + " }\n" + + "}")); + } + public void test253063() throws Exception { writeFilesAndWaitForScan(src, new File("t/A.java", "package t;\n" From 00c3ddeac09cbf398045c63dc28ec21a7f6d1399 Mon Sep 17 00:00:00 2001 From: Jakub Herkel Date: Sat, 6 Feb 2021 19:09:16 +0100 Subject: [PATCH 2/2] [NETBEANS-4274] remove unused code --- .../refactoring/java/plugins/RenameTransformer.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java index 08976676e4b2..b68dae85df54 100644 --- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java +++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java @@ -254,17 +254,11 @@ public boolean accept(Element e, TypeMirror type) { String useThis = null; String useSuper = null; - if (elementToFind!=null && elementToFind.getKind().isField() && tree.getKind() != Tree.Kind.MEMBER_SELECT) { + if (elementToFind!=null && elementToFind.getKind().isField() && tree.getKind() == Tree.Kind.IDENTIFIER) { Scope scope = workingCopy.getTrees().getScope(elementPath); for (Element ele : scope.getLocalElements()) { if ((ele.getKind() == ElementKind.LOCAL_VARIABLE || ele.getKind() == ElementKind.PARAMETER) && ele.getSimpleName().toString().equals(newName)) { - if (tree.getKind() == Tree.Kind.MEMBER_SELECT) { - String isThis = ((MemberSelectTree) tree).getExpression().toString(); - if (isThis.equals("this") || isThis.endsWith(".this")) { // NOI18N - break; - } - } if (elementToFind.getModifiers().contains(Modifier.STATIC)) { useThis = elementToFind.getEnclosingElement().getSimpleName().toString() + "."; } else {