Move: Fix broken tests

Check that constructor call corresponds to class being moved before
transforming outer instance to argument
This commit is contained in:
Alexey Sedunov
2017-03-04 23:59:43 +03:00
parent 13de9aea81
commit 7d185349c8
2 changed files with 17 additions and 12 deletions
@@ -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) {
@@ -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)