diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt index 73bddbf3f99..bd330dcda31 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt @@ -27,6 +27,7 @@ import com.intellij.refactoring.rename.RenamePsiElementProcessor import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.asJava.namedUnwrappedElement import org.jetbrains.kotlin.asJava.toLightMethods +import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions @@ -93,7 +94,7 @@ abstract class RenameKotlinPsiProcessor : RenamePsiElementProcessor() { val ref = reference as? PsiPolyVariantReference ?: return false val refElement = ref.element return refElement.parents.any { (it is KtImportDirective && !it.isAllUnder) || (it is PsiImportStaticStatement && !it.isOnDemand) } - && ref.multiResolve(false).size > 1 + && ref.multiResolve(false).mapNotNullTo(HashSet()) { it.element?.unwrapped }.size > 1 } override fun getPostRenameCallback(element: PsiElement, newName: String?, elementListener: RefactoringElementListener?): Runnable? { diff --git a/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/after/OverloadJava.java b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/after/OverloadJava.java new file mode 100644 index 00000000000..f2fa3435ca5 --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/after/OverloadJava.java @@ -0,0 +1,12 @@ +import foo.OverloadKt; + +import static foo.OverloadKt.overload; + +public class OverloadJava { + public void useOverload() { + OverloadKt.overloadNew(0, false); + OverloadKt.overloadNew(0, true); + OverloadKt.overloadNew(0, true, 2.0); + overload("123"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/after/foo/overload.kt b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/after/foo/overload.kt new file mode 100644 index 00000000000..bb526bf975c --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/after/foo/overload.kt @@ -0,0 +1,4 @@ +package foo + +@JvmOverloads fun overloadNew(p1: Int, p2: Boolean, p3: Double = 1.0) {} +fun overload(s: String) {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/before/OverloadJava.java b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/before/OverloadJava.java new file mode 100644 index 00000000000..e3e35b900bd --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/before/OverloadJava.java @@ -0,0 +1,10 @@ +import static foo.OverloadKt.overload; + +public class OverloadJava { + public void useOverload() { + overload(0, false); + overload(0, true); + overload(0, true, 2.0); + overload("123"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/before/foo/overload.kt b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/before/foo/overload.kt new file mode 100644 index 00000000000..125a43e05a9 --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/before/foo/overload.kt @@ -0,0 +1,4 @@ +package foo + +@JvmOverloads fun /*rename*/overload(p1: Int, p2: Boolean, p3: Double = 1.0) {} +fun overload(s: String) {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/overloadsWithDifferentOrigins.test b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/overloadsWithDifferentOrigins.test new file mode 100644 index 00000000000..64476e14c4a --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithDifferentOrigins/overloadsWithDifferentOrigins.test @@ -0,0 +1,7 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "foo/overload.kt", + "newName": "overloadNew", + "withRuntime": "true", + "overloadRenamer.onlyPrimaryElement": "true" +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/overloadsWithSameOrigin/after/OverloadJava.java b/idea/testData/refactoring/rename/overloadsWithSameOrigin/after/OverloadJava.java new file mode 100644 index 00000000000..d13a10de17f --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithSameOrigin/after/OverloadJava.java @@ -0,0 +1,9 @@ +import static foo.OverloadKt.overloadNew; + +public class OverloadJava { + public void useOverload() { + overloadNew(0, false); + overloadNew(0, true); + overloadNew(0, true, 2.0); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/overloadsWithSameOrigin/after/foo/overload.kt b/idea/testData/refactoring/rename/overloadsWithSameOrigin/after/foo/overload.kt new file mode 100644 index 00000000000..f7168052144 --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithSameOrigin/after/foo/overload.kt @@ -0,0 +1,3 @@ +package foo + +@JvmOverloads fun overloadNew(p1: Int, p2: Boolean, p3: Double = 1.0) {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/overloadsWithSameOrigin/before/OverloadJava.java b/idea/testData/refactoring/rename/overloadsWithSameOrigin/before/OverloadJava.java new file mode 100644 index 00000000000..ec1a3fe0762 --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithSameOrigin/before/OverloadJava.java @@ -0,0 +1,9 @@ +import static foo.OverloadKt.overload; + +public class OverloadJava { + public void useOverload() { + overload(0, false); + overload(0, true); + overload(0, true, 2.0); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/overloadsWithSameOrigin/before/foo/overload.kt b/idea/testData/refactoring/rename/overloadsWithSameOrigin/before/foo/overload.kt new file mode 100644 index 00000000000..c8379557f8c --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithSameOrigin/before/foo/overload.kt @@ -0,0 +1,3 @@ +package foo + +@JvmOverloads fun /*rename*/overload(p1: Int, p2: Boolean, p3: Double = 1.0) {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/overloadsWithSameOrigin/overloadsWithSameOrigin.test b/idea/testData/refactoring/rename/overloadsWithSameOrigin/overloadsWithSameOrigin.test new file mode 100644 index 00000000000..64476e14c4a --- /dev/null +++ b/idea/testData/refactoring/rename/overloadsWithSameOrigin/overloadsWithSameOrigin.test @@ -0,0 +1,7 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "foo/overload.kt", + "newName": "overloadNew", + "withRuntime": "true", + "overloadRenamer.onlyPrimaryElement": "true" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java index 34c72ff186f..fbfc6728054 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -421,6 +421,18 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("overloadsWithDifferentOrigins/overloadsWithDifferentOrigins.test") + public void testOverloadsWithDifferentOrigins_OverloadsWithDifferentOrigins() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/overloadsWithDifferentOrigins/overloadsWithDifferentOrigins.test"); + doTest(fileName); + } + + @TestMetadata("overloadsWithSameOrigin/overloadsWithSameOrigin.test") + public void testOverloadsWithSameOrigin_OverloadsWithSameOrigin() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/overloadsWithSameOrigin/overloadsWithSameOrigin.test"); + doTest(fileName); + } + @TestMetadata("paramererAsReceiverWithNewNameAsSelector/parameterAsReceiverWithNewNameAsSelector.test") public void testParamererAsReceiverWithNewNameAsSelector_ParameterAsReceiverWithNewNameAsSelector() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/parameterAsReceiverWithNewNameAsSelector.test");