Move: Fix broken tests
Check that constructor call corresponds to class being moved before transforming outer instance to argument
This commit is contained in:
+15
-10
@@ -41,7 +41,7 @@ sealed class MoveDeclarationsDelegate {
|
|||||||
conflicts: MultiMap<PsiElement, String>
|
conflicts: MultiMap<PsiElement, String>
|
||||||
)
|
)
|
||||||
abstract fun preprocessDeclaration(descriptor: MoveDeclarationsDescriptor, originalDeclaration: KtNamedDeclaration)
|
abstract fun preprocessDeclaration(descriptor: MoveDeclarationsDescriptor, originalDeclaration: KtNamedDeclaration)
|
||||||
abstract fun preprocessUsages(project: Project, usages: List<UsageInfo>)
|
abstract fun preprocessUsages(project: Project, descriptor: MoveDeclarationsDescriptor, usages: List<UsageInfo>)
|
||||||
|
|
||||||
object TopLevel : MoveDeclarationsDelegate() {
|
object TopLevel : MoveDeclarationsDelegate() {
|
||||||
override fun getContainerChangeInfo(originalDeclaration: KtNamedDeclaration, moveTarget: KotlinMoveTarget): ContainerChangeInfo {
|
override fun getContainerChangeInfo(originalDeclaration: KtNamedDeclaration, moveTarget: KotlinMoveTarget): ContainerChangeInfo {
|
||||||
@@ -63,7 +63,7 @@ sealed class MoveDeclarationsDelegate {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun preprocessUsages(project: Project, usages: List<UsageInfo>) {
|
override fun preprocessUsages(project: Project, descriptor: MoveDeclarationsDescriptor, usages: List<UsageInfo>) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -136,19 +136,24 @@ sealed class MoveDeclarationsDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun preprocessUsages(project: Project, usages: List<UsageInfo>) {
|
override fun preprocessUsages(project: Project, descriptor: MoveDeclarationsDescriptor, usages: List<UsageInfo>) {
|
||||||
if (outerInstanceParameterName == null) return
|
if (outerInstanceParameterName == null) return
|
||||||
val psiFactory = KtPsiFactory(project)
|
val psiFactory = KtPsiFactory(project)
|
||||||
val newOuterInstanceRef = psiFactory.createExpression(outerInstanceParameterName)
|
val newOuterInstanceRef = psiFactory.createExpression(outerInstanceParameterName)
|
||||||
|
val classToMove = descriptor.elementsToMove.singleOrNull() as? KtClass
|
||||||
|
|
||||||
for (usage in usages) {
|
for (usage in usages) {
|
||||||
val referencedNestedClass = (usage as? MoveRenameUsageInfo)?.referencedElement?.unwrapped as? KtClassOrObject
|
if (usage is MoveRenameUsageInfo) {
|
||||||
val outerClass = referencedNestedClass?.containingClassOrObject
|
val referencedNestedClass = usage.referencedElement?.unwrapped as? KtClassOrObject
|
||||||
val lightOuterClass = outerClass?.toLightClass()
|
if (referencedNestedClass == classToMove) {
|
||||||
if (lightOuterClass != null) {
|
val outerClass = referencedNestedClass?.containingClassOrObject
|
||||||
MoveInnerClassUsagesHandler.EP_NAME
|
val lightOuterClass = outerClass?.toLightClass()
|
||||||
.forLanguage(usage.element!!.language)
|
if (lightOuterClass != null) {
|
||||||
?.correctInnerClassUsage(usage, lightOuterClass)
|
MoveInnerClassUsagesHandler.EP_NAME
|
||||||
|
.forLanguage(usage.element!!.language)
|
||||||
|
?.correctInnerClassUsage(usage, lightOuterClass)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
when (usage) {
|
when (usage) {
|
||||||
|
|||||||
+2
-2
@@ -233,8 +233,8 @@ class MoveKotlinDeclarationsProcessor(
|
|||||||
usageList.partition { it is UsagesToProcessBeforeMoveWrapper }
|
usageList.partition { it is UsagesToProcessBeforeMoveWrapper }
|
||||||
val usagesToProcessBeforeMove = usagesToProcessBeforeMoveWrappers.flatMap { (it as UsagesToProcessBeforeMoveWrapper).usages }
|
val usagesToProcessBeforeMove = usagesToProcessBeforeMoveWrappers.flatMap { (it as UsagesToProcessBeforeMoveWrapper).usages }
|
||||||
|
|
||||||
descriptor.delegate.preprocessUsages(project, usagesToProcessBeforeMove)
|
descriptor.delegate.preprocessUsages(project, descriptor, usagesToProcessBeforeMove)
|
||||||
descriptor.delegate.preprocessUsages(project, usagesToProcessAfterMove)
|
descriptor.delegate.preprocessUsages(project, descriptor, usagesToProcessAfterMove)
|
||||||
|
|
||||||
postProcessMoveUsages(usagesToProcessBeforeMove, shorteningMode = ShorteningMode.NO_SHORTENING)
|
postProcessMoveUsages(usagesToProcessBeforeMove, shorteningMode = ShorteningMode.NO_SHORTENING)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user