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>
|
||||
)
|
||||
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() {
|
||||
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
|
||||
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) {
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user