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 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<UsageInfo?>()) { ref ->
if (foundReferences.add(ref) && elementsToMove.all { !it.isAncestor(ref.getElement())}) {
createMoveUsageInfo(ref, lightElement, true)
createMoveUsageInfoIfPossible(ref, lightElement, true)
}
else null
}
@@ -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<JetSuperExpression>() != null) return null
val range = reference.getRangeInElement()!!
val startOffset = range.getStartOffset()
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);
}
@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");