From 7d185349c87359a95ff19b2b3216f98c6c5e2d10 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Sat, 4 Mar 2017 23:59:43 +0300 Subject: [PATCH] Move: Fix broken tests Check that constructor call corresponds to class being moved before transforming outer instance to argument --- .../MoveDeclarationsDelegate.kt | 25 +++++++++++-------- .../MoveKotlinDeclarationsProcessor.kt | 4 +-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveDeclarationsDelegate.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveDeclarationsDelegate.kt index 38e8e0a6996..76a9325d35f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveDeclarationsDelegate.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveDeclarationsDelegate.kt @@ -41,7 +41,7 @@ sealed class MoveDeclarationsDelegate { conflicts: MultiMap ) abstract fun preprocessDeclaration(descriptor: MoveDeclarationsDescriptor, originalDeclaration: KtNamedDeclaration) - abstract fun preprocessUsages(project: Project, usages: List) + abstract fun preprocessUsages(project: Project, descriptor: MoveDeclarationsDescriptor, usages: List) object TopLevel : MoveDeclarationsDelegate() { override fun getContainerChangeInfo(originalDeclaration: KtNamedDeclaration, moveTarget: KotlinMoveTarget): ContainerChangeInfo { @@ -63,7 +63,7 @@ sealed class MoveDeclarationsDelegate { } - override fun preprocessUsages(project: Project, usages: List) { + override fun preprocessUsages(project: Project, descriptor: MoveDeclarationsDescriptor, usages: List) { } } @@ -136,19 +136,24 @@ sealed class MoveDeclarationsDelegate { } } - override fun preprocessUsages(project: Project, usages: List) { + override fun preprocessUsages(project: Project, descriptor: MoveDeclarationsDescriptor, usages: List) { if (outerInstanceParameterName == null) return val psiFactory = KtPsiFactory(project) val newOuterInstanceRef = psiFactory.createExpression(outerInstanceParameterName) + val classToMove = descriptor.elementsToMove.singleOrNull() as? KtClass for (usage in usages) { - val referencedNestedClass = (usage as? MoveRenameUsageInfo)?.referencedElement?.unwrapped as? KtClassOrObject - val outerClass = referencedNestedClass?.containingClassOrObject - val lightOuterClass = outerClass?.toLightClass() - if (lightOuterClass != null) { - MoveInnerClassUsagesHandler.EP_NAME - .forLanguage(usage.element!!.language) - ?.correctInnerClassUsage(usage, lightOuterClass) + if (usage is MoveRenameUsageInfo) { + val referencedNestedClass = usage.referencedElement?.unwrapped as? KtClassOrObject + if (referencedNestedClass == classToMove) { + val outerClass = referencedNestedClass?.containingClassOrObject + val lightOuterClass = outerClass?.toLightClass() + if (lightOuterClass != null) { + MoveInnerClassUsagesHandler.EP_NAME + .forLanguage(usage.element!!.language) + ?.correctInnerClassUsage(usage, lightOuterClass) + } + } } when (usage) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt index 8adc19c51f2..332bc88185d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt @@ -233,8 +233,8 @@ class MoveKotlinDeclarationsProcessor( usageList.partition { it is UsagesToProcessBeforeMoveWrapper } val usagesToProcessBeforeMove = usagesToProcessBeforeMoveWrappers.flatMap { (it as UsagesToProcessBeforeMoveWrapper).usages } - descriptor.delegate.preprocessUsages(project, usagesToProcessBeforeMove) - descriptor.delegate.preprocessUsages(project, usagesToProcessAfterMove) + descriptor.delegate.preprocessUsages(project, descriptor, usagesToProcessBeforeMove) + descriptor.delegate.preprocessUsages(project, descriptor, usagesToProcessAfterMove) postProcessMoveUsages(usagesToProcessBeforeMove, shorteningMode = ShorteningMode.NO_SHORTENING)