Move: Do not process 'super' references

#KT-6769 Fixed
This commit is contained in:
Alexey Sedunov
2015-02-12 15:30:01 +03:00
parent ae970044e2
commit ecd9ee45c8
9 changed files with 61 additions and 6 deletions
@@ -65,7 +65,7 @@ import com.intellij.util.VisibilityUtil
import com.intellij.openapi.util.Ref import com.intellij.openapi.util.Ref
import org.jetbrains.kotlin.idea.search.projectScope import org.jetbrains.kotlin.idea.search.projectScope
import org.jetbrains.kotlin.idea.refactoring.move.getInternalReferencesToUpdateOnPackageNameChange 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.refactoring.move.postProcessMoveUsages
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference.ShorteningMode import org.jetbrains.kotlin.idea.references.JetSimpleNameReference.ShorteningMode
import org.jetbrains.kotlin.psi.psiUtil.isAncestor import org.jetbrains.kotlin.psi.psiUtil.isAncestor
@@ -127,7 +127,7 @@ public class MoveKotlinTopLevelDeclarationsProcessor(
.search(lightElement, projectScope, false) .search(lightElement, projectScope, false)
.mapTo(ArrayList<UsageInfo?>()) { ref -> .mapTo(ArrayList<UsageInfo?>()) { ref ->
if (foundReferences.add(ref) && elementsToMove.all { !it.isAncestor(ref.getElement())}) { if (foundReferences.add(ref) && elementsToMove.all { !it.isAncestor(ref.getElement())}) {
createMoveUsageInfo(ref, lightElement, true) createMoveUsageInfoIfPossible(ref, lightElement, true)
} }
else null else null
} }
@@ -55,6 +55,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.caches.resolve.*
import org.jetbrains.kotlin.asJava.* 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) public class PackageNameInfo(val oldPackageName: FqName, val newPackageName: FqName)
@@ -111,7 +113,7 @@ public fun JetElement.getInternalReferencesToUpdateOnPackageNameChange(packageNa
packageName == packageNameInfo.oldPackageName, packageName == packageNameInfo.oldPackageName,
packageName == packageNameInfo.newPackageName, packageName == packageNameInfo.newPackageName,
isImported(descriptor) -> { isImported(descriptor) -> {
(refExpr.getReference() as? JetSimpleNameReference)?.let { createMoveUsageInfo(it, declaration, false) } (refExpr.getReference() as? JetSimpleNameReference)?.let { createMoveUsageInfoIfPossible(it, declaration, false) }
} }
else -> null else -> null
@@ -141,13 +143,15 @@ class MoveRenameUsageInfoForExtension(
val addImportToOriginalFile: Boolean val addImportToOriginalFile: Boolean
): MoveRenameUsageInfo(element, reference, startOffset, endOffset, referencedElement, false) ): MoveRenameUsageInfo(element, reference, startOffset, endOffset, referencedElement, false)
fun createMoveUsageInfo( fun createMoveUsageInfoIfPossible(
reference: PsiReference, reference: PsiReference,
referencedElement: PsiElement, referencedElement: PsiElement,
addImportToOriginalFile: Boolean addImportToOriginalFile: Boolean
): UsageInfo { ): UsageInfo? {
val range = reference.getRangeInElement()!!
val element = reference.getElement() val element = reference.getElement()
if (element.getStrictParentOfType<JetSuperExpression>() != null) return null
val range = reference.getRangeInElement()!!
val startOffset = range.getStartOffset() val startOffset = range.getStartOffset()
val endOffset = range.getEndOffset() val endOffset = range.getEndOffset()
@@ -0,0 +1,6 @@
package a
open class A {
fun foo() {}
}
@@ -0,0 +1,9 @@
package b
import a.A
open class B : A() {
fun t() {
super.foo()
}
}
@@ -0,0 +1,7 @@
package b
class C: B() {
fun test() {
super.t()
}
}
@@ -0,0 +1,11 @@
package a
open class A {
fun foo() {}
}
open class <caret>B : A() {
fun t() {
super.foo()
}
}
@@ -0,0 +1,7 @@
package b
class C: a.B() {
fun test() {
super.t()
}
}
@@ -0,0 +1,5 @@
{
"mainFile": "a/main.kt",
"type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS",
"targetPackage": "b"
}
@@ -282,6 +282,12 @@ public class JetMoveTestGenerated extends AbstractJetMoveTest {
doTest(fileName); 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") @TestMetadata("kotlin/moveTopLevelDeclarations/misc/syntheticMembers/syntheticMembers.test")
public void testKotlin_moveTopLevelDeclarations_misc_syntheticMembers_SyntheticMembers() throws Exception { public void testKotlin_moveTopLevelDeclarations_misc_syntheticMembers_SyntheticMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/syntheticMembers/syntheticMembers.test"); String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/syntheticMembers/syntheticMembers.test");