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 c410d763dac1..f09da834c348 100644 --- a/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java @@ -210,10 +210,16 @@ public class RenameJavaMethodProcessor extends RenameJavaMemberProcessor { if (element instanceof PsiReferenceExpression) { if (((PsiReferenceExpression)element).resolve() == methodToRename) { final PsiElement parent = element.getParent(); - LOG.assertTrue(parent instanceof PsiMethodCallExpression, parent.getText()); - final PsiMethodCallExpression copy = (PsiMethodCallExpression)JavaPsiFacade.getElementFactory(element.getProject()) - .createExpressionFromText(parent.getText(), element); - final PsiReferenceExpression expression = (PsiReferenceExpression)processRef(copy.getMethodExpression(), newName); + final PsiReferenceExpression copyRef; + if (parent instanceof PsiMethodCallExpression) { + final PsiMethodCallExpression copy = (PsiMethodCallExpression)JavaPsiFacade.getElementFactory(element.getProject()) + .createExpressionFromText(parent.getText(), element); + copyRef = copy.getMethodExpression(); + } else { + LOG.assertTrue(element instanceof PsiMethodReferenceExpression, element.getText()); + copyRef = (PsiReferenceExpression)element.copy(); + } + final PsiReferenceExpression expression = (PsiReferenceExpression)processRef(copyRef, newName); if (expression == null) continue; final JavaResolveResult resolveResult = expression.advancedResolve(true); final PsiMember resolveResultElement = (PsiMember)resolveResult.getElement(); diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignatureMethodRef.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignatureMethodRef.java new file mode 100644 index 000000000000..dd815139efa5 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignatureMethodRef.java @@ -0,0 +1,9 @@ +class Test { + + static void foo() {} + static void foo2(int i) {} + + { + Runnable r = Test :: foo; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignatureMethodRef.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignatureMethodRef.java.after new file mode 100644 index 000000000000..8dab0803fcec --- /dev/null +++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignatureMethodRef.java.after @@ -0,0 +1,9 @@ +class Test { + + static void foo2() {} + static void foo2(int i) {} + + { + Runnable r = Test ::foo2; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java b/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java index 204525cb6822..e830594db39f 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java @@ -208,6 +208,10 @@ public class RenameCollisionsTest extends LightRefactoringTestCase { doTest("foo2"); } + public void testRenameMethodNoCollisionWithOtherSignatureMethodRef() throws Exception { + doTest("foo2"); + } + public void testRenameNoStaticOverridingInInterfaces() throws Exception { doTest("foo"); }