From ecd9ee45c84291053fd0d5a261bf821d0f70e3b9 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 12 Feb 2015 15:30:01 +0300 Subject: [PATCH] Move: Do not process 'super' references #KT-6769 Fixed --- .../MoveKotlinTopLevelDeclarationsProcessor.kt | 4 ++-- .../kotlin/idea/refactoring/move/moveUtils.kt | 12 ++++++++---- .../misc/superReferences/after/a/main.kt | 6 ++++++ .../misc/superReferences/after/b/B.kt | 9 +++++++++ .../misc/superReferences/after/b/usage.kt | 7 +++++++ .../misc/superReferences/before/a/main.kt | 11 +++++++++++ .../misc/superReferences/before/b/usage.kt | 7 +++++++ .../misc/superReferences/superReferences.test | 5 +++++ .../idea/refactoring/move/JetMoveTestGenerated.java | 6 ++++++ 9 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/a/main.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/b/B.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/b/usage.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/before/a/main.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/before/b/usage.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/superReferences.test diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsProcessor.kt index ece86647d65..d38579e7753 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsProcessor.kt @@ -65,7 +65,7 @@ import com.intellij.util.VisibilityUtil import com.intellij.openapi.util.Ref import org.jetbrains.kotlin.idea.search.projectScope import org.jetbrains.kotlin.idea.refactoring.move.getInternalReferencesToUpdateOnPackageNameChange -import org.jetbrains.kotlin.idea.refactoring.move.createMoveUsageInfo +import org.jetbrains.kotlin.idea.refactoring.move.createMoveUsageInfoIfPossible import org.jetbrains.kotlin.idea.refactoring.move.postProcessMoveUsages import org.jetbrains.kotlin.idea.references.JetSimpleNameReference.ShorteningMode import org.jetbrains.kotlin.psi.psiUtil.isAncestor @@ -127,7 +127,7 @@ public class MoveKotlinTopLevelDeclarationsProcessor( .search(lightElement, projectScope, false) .mapTo(ArrayList()) { ref -> if (foundReferences.add(ref) && elementsToMove.all { !it.isAncestor(ref.getElement())}) { - createMoveUsageInfo(ref, lightElement, true) + createMoveUsageInfoIfPossible(ref, lightElement, true) } else null } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt index 4a49b119067..16c2e0c12be 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt @@ -55,6 +55,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.asJava.* +import org.jetbrains.kotlin.psi.JetSuperExpression +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType public class PackageNameInfo(val oldPackageName: FqName, val newPackageName: FqName) @@ -111,7 +113,7 @@ public fun JetElement.getInternalReferencesToUpdateOnPackageNameChange(packageNa packageName == packageNameInfo.oldPackageName, packageName == packageNameInfo.newPackageName, isImported(descriptor) -> { - (refExpr.getReference() as? JetSimpleNameReference)?.let { createMoveUsageInfo(it, declaration, false) } + (refExpr.getReference() as? JetSimpleNameReference)?.let { createMoveUsageInfoIfPossible(it, declaration, false) } } else -> null @@ -141,13 +143,15 @@ class MoveRenameUsageInfoForExtension( val addImportToOriginalFile: Boolean ): MoveRenameUsageInfo(element, reference, startOffset, endOffset, referencedElement, false) -fun createMoveUsageInfo( +fun createMoveUsageInfoIfPossible( reference: PsiReference, referencedElement: PsiElement, addImportToOriginalFile: Boolean -): UsageInfo { - val range = reference.getRangeInElement()!! +): UsageInfo? { val element = reference.getElement() + if (element.getStrictParentOfType() != null) return null + + val range = reference.getRangeInElement()!! val startOffset = range.getStartOffset() val endOffset = range.getEndOffset() diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/a/main.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/a/main.kt new file mode 100644 index 00000000000..be7c471eca7 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/a/main.kt @@ -0,0 +1,6 @@ +package a + +open class A { + fun foo() {} +} + diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/b/B.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/b/B.kt new file mode 100644 index 00000000000..7a1f232a92c --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/b/B.kt @@ -0,0 +1,9 @@ +package b + +import a.A + +open class B : A() { + fun t() { + super.foo() + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/b/usage.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/b/usage.kt new file mode 100644 index 00000000000..4bf59edc1b0 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/after/b/usage.kt @@ -0,0 +1,7 @@ +package b + +class C: B() { + fun test() { + super.t() + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/before/a/main.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/before/a/main.kt new file mode 100644 index 00000000000..470f40133d3 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/before/a/main.kt @@ -0,0 +1,11 @@ +package a + +open class A { + fun foo() {} +} + +open class B : A() { + fun t() { + super.foo() + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/before/b/usage.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/before/b/usage.kt new file mode 100644 index 00000000000..3ab2eccd8b6 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/before/b/usage.kt @@ -0,0 +1,7 @@ +package b + +class C: a.B() { + fun test() { + super.t() + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/superReferences.test b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/superReferences.test new file mode 100644 index 00000000000..10641ec2d49 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/superReferences.test @@ -0,0 +1,5 @@ +{ + "mainFile": "a/main.kt", + "type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS", + "targetPackage": "b" +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/JetMoveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/JetMoveTestGenerated.java index 2f099d812d3..5b73c9de48a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/JetMoveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/JetMoveTestGenerated.java @@ -282,6 +282,12 @@ public class JetMoveTestGenerated extends AbstractJetMoveTest { doTest(fileName); } + @TestMetadata("kotlin/moveTopLevelDeclarations/misc/superReferences/superReferences.test") + public void testKotlin_moveTopLevelDeclarations_misc_superReferences_SuperReferences() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/superReferences/superReferences.test"); + doTest(fileName); + } + @TestMetadata("kotlin/moveTopLevelDeclarations/misc/syntheticMembers/syntheticMembers.test") public void testKotlin_moveTopLevelDeclarations_misc_syntheticMembers_SyntheticMembers() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/syntheticMembers/syntheticMembers.test");