From 0bbf8ea90ec3adbc672a3db7743ed54896218fcf Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Wed, 11 Jul 2018 09:17:43 +0200 Subject: [PATCH] rename: don't change qualifier on rename with collisions --- .../rename/RenameJavaMethodProcessor.java | 2 +- .../RenameConflictNoQualification.java | 19 +++++++++++++++++++ .../RenameConflictNoQualification.java.after | 19 +++++++++++++++++++ .../refactoring/RenameCollisionsTest.java | 3 +++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/renameCollisions/RenameConflictNoQualification.java create mode 100644 java/java-tests/testData/refactoring/renameCollisions/RenameConflictNoQualification.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java index 8619c0c3f2ca..bc5c159987e2 100644 --- a/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java @@ -131,7 +131,7 @@ public class RenameJavaMethodProcessor extends RenameJavaMemberProcessor { private static void fixNameCollisionsWithInnerClassMethod(final PsiElement element, final String newName, final Set methodAndOverriders, final Set containingClasses, final boolean isStatic) throws IncorrectOperationException { - if (!(element instanceof PsiReferenceExpression)) return; + if (!(element instanceof PsiReferenceExpression) || ((PsiReferenceExpression)element).getQualifierExpression() != null) return; PsiElement elem = ((PsiReferenceExpression)element).resolve(); if (elem instanceof PsiMethod) { diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameConflictNoQualification.java b/java/java-tests/testData/refactoring/renameCollisions/RenameConflictNoQualification.java new file mode 100644 index 000000000000..3b653249435b --- /dev/null +++ b/java/java-tests/testData/refactoring/renameCollisions/RenameConflictNoQualification.java @@ -0,0 +1,19 @@ +interface A { + default void m() {} + default void f() { + m(); + } +} + +class Client1 implements A { + Client2 a; + @Override + public void m() { + a.m(); + } +} + +class Client2 implements A { + @Override + public void f() { } +} diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameConflictNoQualification.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameConflictNoQualification.java.after new file mode 100644 index 000000000000..0ac7630eec4b --- /dev/null +++ b/java/java-tests/testData/refactoring/renameCollisions/RenameConflictNoQualification.java.after @@ -0,0 +1,19 @@ +interface A { + default void f() {} + default void f() { + f(); + } +} + +class Client1 implements A { + Client2 a; + @Override + public void f() { + a.f(); + } +} + +class Client2 implements A { + @Override + public void f() { } +} diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/RenameCollisionsTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/RenameCollisionsTest.java index 4c72f118660b..3f5656959e4b 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/RenameCollisionsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/RenameCollisionsTest.java @@ -162,6 +162,9 @@ public class RenameCollisionsTest extends LightRefactoringTestCase { public void testRenameVarParamToOuterConst() { doTest("STATIC_FIELD"); } + public void testRenameConflictNoQualification() { + BaseRefactoringProcessor.ConflictsInTestsException.withIgnoredConflicts(() -> doTest("f")); + } public void testRenameLocalVariableHidesFieldInAnonymous() { try {