From f8d79cb446322e1447bfc266b31787a413c7675d Mon Sep 17 00:00:00 2001 From: Bart van Helvert Date: Sat, 22 Apr 2023 16:01:12 +0200 Subject: [PATCH] [kotlin] Move `MoveSource` to common refactoring module ^KTIJ-23273 Also renames it to `KotlinMoveSource` to make it similar to `KotlinMoveTarget` GitOrigin-RevId: 813909d52de9efd8359528cdc2a330af56c12381 --- .../MoveMemberOutOfObjectIntention.kt | 8 +++++-- .../MoveMemberToCompanionObjectIntention.kt | 12 +++++------ .../cutPaste/MoveDeclarationsProcessor.kt | 8 +++++-- .../KotlinChangePackageRefactoring.kt | 3 +-- ...ractDeclarationFromCurrentFileIntention.kt | 5 +++-- .../MoveKotlinDeclarationsProcessor.kt | 19 ++--------------- .../ui/MoveKotlinNestedClassesModel.kt | 3 ++- ...oveKotlinNestedClassesToUpperLevelModel.kt | 3 ++- .../ui/MoveKotlinTopLevelDeclarationsModel.kt | 2 +- .../MoveKotlinFileHandler.kt | 3 +-- .../idea/refactoring/move/AbstractMoveTest.kt | 5 ++--- .../idea/refactoring/move/KotlinMoveSource.kt | 21 +++++++++++++++++++ 12 files changed, 53 insertions(+), 39 deletions(-) create mode 100644 plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/move/KotlinMoveSource.kt diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfObjectIntention.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfObjectIntention.kt index ea6b8607df66..cf8567965fa3 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfObjectIntention.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfObjectIntention.kt @@ -9,8 +9,12 @@ import com.intellij.util.containers.MultiMap import org.jetbrains.kotlin.idea.codeinsight.api.classic.intentions.SelfTargetingRangeIntention import org.jetbrains.kotlin.idea.refactoring.CompositeRefactoringRunner import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively +import org.jetbrains.kotlin.idea.refactoring.move.KotlinMoveSource import org.jetbrains.kotlin.idea.refactoring.move.KotlinMoveTarget -import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.* +import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveDeclarationsDelegate +import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveDeclarationsDescriptor +import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveKotlinDeclarationsProcessor +import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.Mover import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile @@ -43,7 +47,7 @@ abstract class MoveMemberOutOfObjectIntention(textGetter: () -> String) : SelfTa if (element is KtClassOrObject || !element.isPrivate() && destination is KtFile) { val moveDescriptor = MoveDeclarationsDescriptor( project, - MoveSource(element), + KotlinMoveSource(element), KotlinMoveTarget.ExistingElement(destination), MoveDeclarationsDelegate.NestedClass() ) diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberToCompanionObjectIntention.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberToCompanionObjectIntention.kt index b73ff6713523..42e06c88d2b9 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberToCompanionObjectIntention.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberToCompanionObjectIntention.kt @@ -48,11 +48,11 @@ import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.util.runSynchronouslyWithProgress import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactory import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively -import org.jetbrains.kotlin.idea.refactoring.move.KotlinMoveTarget -import org.jetbrains.kotlin.idea.refactoring.move.OuterInstanceReferenceUsageInfo -import org.jetbrains.kotlin.idea.refactoring.move.collectOuterInstanceReferences -import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.* -import org.jetbrains.kotlin.idea.refactoring.move.traverseOuterInstanceReferences +import org.jetbrains.kotlin.idea.refactoring.move.* +import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveDeclarationsDelegate +import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveDeclarationsDescriptor +import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveKotlinDeclarationsProcessor +import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.Mover import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest import org.jetbrains.kotlin.idea.search.declarationsSearch.searchOverriders @@ -382,7 +382,7 @@ class MoveMemberToCompanionObjectIntention : SelfTargetingRangeIntention - MoveSource(additionalElements.toMutableList().also { it.add(0, element) }) + KotlinMoveSource(additionalElements.toMutableList().also { it.add(0, element) }) } - ?: MoveSource(element) + ?: KotlinMoveSource(element) val moveCallBack = MoveCallback { val newFile = directory.findFile(targetFileName) as KtFile diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt index 902845653513..2159676df4a2 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt @@ -86,24 +86,9 @@ interface Mover : (KtNamedDeclaration, KtElement) -> KtNamedDeclaration { } } -sealed class MoveSource { - abstract val elementsToMove: Collection - - class Elements(override val elementsToMove: Collection) : MoveSource() - - class File(val file: KtFile) : MoveSource() { - override val elementsToMove: Collection - get() = file.declarations.filterIsInstance() - } -} - -fun MoveSource(declaration: KtNamedDeclaration) = MoveSource.Elements(listOf(declaration)) -fun MoveSource(declarations: Collection) = MoveSource.Elements(declarations) -fun MoveSource(file: KtFile) = MoveSource.File(file) - class MoveDeclarationsDescriptor @JvmOverloads constructor( val project: Project, - val moveSource: MoveSource, + val moveSource: KotlinMoveSource, val moveTarget: KotlinMoveTarget, val delegate: MoveDeclarationsDelegate, val searchInCommentsAndStrings: Boolean = true, @@ -147,7 +132,7 @@ class MoveKotlinDeclarationsProcessor( val project get() = descriptor.project private var nonCodeUsages: Array? = null - private val moveEntireFile = descriptor.moveSource is MoveSource.File + private val moveEntireFile = descriptor.moveSource is KotlinMoveSource.File private val elementsToMove = descriptor.moveSource.elementsToMove.filter { e -> e.parent != descriptor.moveTarget.getTargetPsiIfExists(e) } diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinNestedClassesModel.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinNestedClassesModel.kt index 79d6ffe6b69b..8b3b896e2811 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinNestedClassesModel.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinNestedClassesModel.kt @@ -9,6 +9,7 @@ import com.intellij.psi.util.PsiTreeUtil import com.intellij.refactoring.RefactoringBundle import com.intellij.refactoring.move.MoveCallback import org.jetbrains.kotlin.idea.base.resources.KotlinBundle +import org.jetbrains.kotlin.idea.refactoring.move.KotlinMoveSource import org.jetbrains.kotlin.idea.refactoring.move.KotlinMoveTarget import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.* import org.jetbrains.kotlin.idea.statistics.KotlinMoveRefactoringFUSCollector.MoveRefactoringDestination @@ -57,7 +58,7 @@ internal class MoveKotlinNestedClassesModel( val delegate = MoveDeclarationsDelegate.NestedClass() val descriptor = MoveDeclarationsDescriptor( project, - MoveSource(elementsToMove), + KotlinMoveSource(elementsToMove), target, delegate, searchInCommentsAndStrings = false, diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinNestedClassesToUpperLevelModel.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinNestedClassesToUpperLevelModel.kt index 02639e28b342..db1ae4bf267c 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinNestedClassesToUpperLevelModel.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinNestedClassesToUpperLevelModel.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.idea.base.resources.KotlinBundle import org.jetbrains.kotlin.idea.base.util.module import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.refactoring.createKotlinFile +import org.jetbrains.kotlin.idea.refactoring.move.KotlinMoveSource import org.jetbrains.kotlin.idea.refactoring.move.KotlinMoveTarget import org.jetbrains.kotlin.idea.refactoring.move.getTargetPackageFqName import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.* @@ -195,7 +196,7 @@ internal abstract class MoveKotlinNestedClassesToUpperLevelModel( val delegate = MoveDeclarationsDelegate.NestedClass(className, outerInstanceParameterName) val moveDescriptor = MoveDeclarationsDescriptor( project, - MoveSource(innerClass), + KotlinMoveSource(innerClass), moveTarget.first, delegate, searchInComments, diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinTopLevelDeclarationsModel.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinTopLevelDeclarationsModel.kt index 7f4259f70ac0..cd70020033ed 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinTopLevelDeclarationsModel.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/MoveKotlinTopLevelDeclarationsModel.kt @@ -311,7 +311,7 @@ internal class MoveKotlinTopLevelDeclarationsModel( val options = MoveDeclarationsDescriptor( project, - MoveSource(elementsWithMPPIfNeeded), + KotlinMoveSource(elementsWithMPPIfNeeded), target, MoveDeclarationsDelegate.TopLevel, isSearchInComments, diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt index 3339738f28e6..01fd2ea78ba0 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.idea.refactoring.move.* import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveDeclarationsDelegate import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveDeclarationsDescriptor import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveKotlinDeclarationsProcessor -import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveSource import org.jetbrains.kotlin.idea.roots.isOutsideKotlinAwareSourceRoot import org.jetbrains.kotlin.psi.KtFile @@ -85,7 +84,7 @@ class MoveKotlinFileHandler : MoveFileHandler() { return MoveKotlinDeclarationsProcessor( MoveDeclarationsDescriptor( project = project, - moveSource = MoveSource(psiFile), + moveSource = KotlinMoveSource(psiFile), moveTarget = moveTarget, delegate = MoveDeclarationsDelegate.TopLevel, allElementsToMove = psiFile.allElementsToMove, diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/move/AbstractMoveTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/move/AbstractMoveTest.kt index b6eb58f4b911..104da7d15fdf 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/move/AbstractMoveTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/move/AbstractMoveTest.kt @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.idea.refactoring.move.moveClassesOrPackages.KotlinAw import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveDeclarationsDelegate import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveDeclarationsDescriptor import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveKotlinDeclarationsProcessor -import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveSource import org.jetbrains.kotlin.idea.refactoring.move.moveMethod.MoveKotlinMethodProcessor import org.jetbrains.kotlin.idea.refactoring.runRefactoringTest import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex @@ -241,7 +240,7 @@ enum class MoveAction : AbstractMultifileRefactoringTest.RefactoringAction { ) } - val descriptor = MoveDeclarationsDescriptor(project, MoveSource(elementsToMove), moveTarget, MoveDeclarationsDelegate.TopLevel) + val descriptor = MoveDeclarationsDescriptor(project, KotlinMoveSource(elementsToMove), moveTarget, MoveDeclarationsDelegate.TopLevel) MoveKotlinDeclarationsProcessor(descriptor).run() } }, @@ -303,7 +302,7 @@ enum class MoveAction : AbstractMultifileRefactoringTest.RefactoringAction { createKotlinFile(fileName, targetDir, targetPackageFqName.asString()) } } - val descriptor = MoveDeclarationsDescriptor(project, MoveSource(elementToMove), moveTarget, delegate) + val descriptor = MoveDeclarationsDescriptor(project, KotlinMoveSource(elementToMove), moveTarget, delegate) MoveKotlinDeclarationsProcessor(descriptor).run() } }, diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/move/KotlinMoveSource.kt b/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/move/KotlinMoveSource.kt new file mode 100644 index 000000000000..30b66203b85a --- /dev/null +++ b/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/move/KotlinMoveSource.kt @@ -0,0 +1,21 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.refactoring.move + +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtNamedDeclaration + +fun KotlinMoveSource(declaration: KtNamedDeclaration) = KotlinMoveSource.Elements(listOf(declaration)) + +fun KotlinMoveSource(declarations: Collection) = KotlinMoveSource.Elements(declarations) + +fun KotlinMoveSource(file: KtFile) = KotlinMoveSource.File(file) + +sealed interface KotlinMoveSource { + val elementsToMove: Collection + + class Elements(override val elementsToMove: Collection) : KotlinMoveSource + + class File(val file: KtFile) : KotlinMoveSource { + override val elementsToMove: Collection get() = file.declarations.filterIsInstance() + } +} \ No newline at end of file