Move: Do not process 'super' references
#KT-6769 Fixed
This commit is contained in:
+2
-2
@@ -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()
|
||||
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package a
|
||||
|
||||
open class A {
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package b
|
||||
|
||||
import a.A
|
||||
|
||||
open class B : A() {
|
||||
fun t() {
|
||||
super.foo()
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package b
|
||||
|
||||
class C: B() {
|
||||
fun test() {
|
||||
super.t()
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package a
|
||||
|
||||
open class A {
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
open class <caret>B : A() {
|
||||
fun t() {
|
||||
super.foo()
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package b
|
||||
|
||||
class C: a.B() {
|
||||
fun test() {
|
||||
super.t()
|
||||
}
|
||||
}
|
||||
+5
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user