diff --git a/plugins/kotlin/idea/tests/testData/refactoring/copyMultiModule/referencesToUnrelatedModule/after/B/src/bar/A.k2.kt b/plugins/kotlin/idea/tests/testData/refactoring/copyMultiModule/referencesToUnrelatedModule/after/B/src/bar/A.k2.kt new file mode 100644 index 000000000000..ff6dabd7f75f --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/copyMultiModule/referencesToUnrelatedModule/after/B/src/bar/A.k2.kt @@ -0,0 +1,6 @@ +package bar + +class A { + val a: A = A() + val b: B = B() +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/moveMultiModule/moveEnumVariableReference/after/B/src/b/Refer.k2.kt b/plugins/kotlin/idea/tests/testData/refactoring/moveMultiModule/moveEnumVariableReference/after/B/src/b/Refer.k2.kt deleted file mode 100644 index 7eb41491b258..000000000000 --- a/plugins/kotlin/idea/tests/testData/refactoring/moveMultiModule/moveEnumVariableReference/after/B/src/b/Refer.k2.kt +++ /dev/null @@ -1,5 +0,0 @@ -package b - -fun refer(enumContainer: a.EnumContainer) { - enumContainer.foo() -} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/moveMultiModule/moveFileWithDeclarationsToUnrelatedModuleConflict/moveFileWithDeclarationsToUnrelatedModuleConflict.test b/plugins/kotlin/idea/tests/testData/refactoring/moveMultiModule/moveFileWithDeclarationsToUnrelatedModuleConflict/moveFileWithDeclarationsToUnrelatedModuleConflict.test index 8222083604e7..4d02fe8c98bb 100644 --- a/plugins/kotlin/idea/tests/testData/refactoring/moveMultiModule/moveFileWithDeclarationsToUnrelatedModuleConflict/moveFileWithDeclarationsToUnrelatedModuleConflict.test +++ b/plugins/kotlin/idea/tests/testData/refactoring/moveMultiModule/moveFileWithDeclarationsToUnrelatedModuleConflict/moveFileWithDeclarationsToUnrelatedModuleConflict.test @@ -4,5 +4,5 @@ "targetDirectory": "B/src/b", "withRuntime": "true", "enabledInK1": "true", - "enabledInK2": "false" + "enabledInK2": "true" } diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/K2ReferenceMutateService.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/K2ReferenceMutateService.kt index 502b5848a962..9a5c6c7d556c 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/K2ReferenceMutateService.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/K2ReferenceMutateService.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.references.* import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.contains import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementOrCallableRef import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration import org.jetbrains.kotlin.psi.psiUtil.isTopLevelKtOrJavaMember @@ -90,6 +91,9 @@ internal class K2ReferenceMutateService : KtReferenceMutateServiceBase() { val expression = simpleNameReference.expression if (targetElement != null) { // if we are already referencing the target, there is no need to call bindToElement if (simpleNameReference.isReferenceTo(targetElement)) return expression + + // if reference will be unresolvable, don't retarget + if (!simpleNameReference.element.resolveScope.contains(targetElement)) return expression } else { // Here we assume that the passed fqName uniquely identifies the new target element val oldTarget = simpleNameReference.resolve()