KT-44431 Quickfix to move to sealed: refactoring
Sealed super class directory is now calculated in a more straightforward way.
This commit is contained in:
@@ -10,22 +10,21 @@ import com.intellij.openapi.actionSystem.impl.SimpleDataContext
|
|||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.ProjectFileIndex
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiDirectory
|
import com.intellij.psi.PsiDirectory
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFileSystemItem
|
import com.intellij.psi.PsiFileSystemItem
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
|
||||||
import com.intellij.psi.util.parentOfType
|
import com.intellij.psi.util.parentOfType
|
||||||
import com.intellij.refactoring.PackageWrapper
|
import com.intellij.refactoring.PackageWrapper
|
||||||
import com.intellij.refactoring.move.MoveCallback
|
import com.intellij.refactoring.move.MoveCallback
|
||||||
import com.intellij.refactoring.move.MoveHandler
|
import com.intellij.refactoring.move.MoveHandler
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.containingPackage
|
|
||||||
import org.jetbrains.kotlin.descriptors.isSealed
|
import org.jetbrains.kotlin.descriptors.isSealed
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import org.jetbrains.kotlin.idea.KotlinBundle
|
import org.jetbrains.kotlin.idea.KotlinBundle
|
||||||
import org.jetbrains.kotlin.idea.actions.internal.refactoringTesting.cases.*
|
import org.jetbrains.kotlin.idea.actions.internal.refactoringTesting.cases.FailedToRunCaseException
|
||||||
|
import org.jetbrains.kotlin.idea.actions.internal.refactoringTesting.cases.randomBoolean
|
||||||
|
import org.jetbrains.kotlin.idea.actions.internal.refactoringTesting.cases.randomDirectoryPathMutator
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
import org.jetbrains.kotlin.idea.refactoring.move.getTargetPackageFqName
|
import org.jetbrains.kotlin.idea.refactoring.move.getTargetPackageFqName
|
||||||
import org.jetbrains.kotlin.idea.refactoring.move.guessNewFileName
|
import org.jetbrains.kotlin.idea.refactoring.move.guessNewFileName
|
||||||
@@ -36,13 +35,11 @@ import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.MoveKotlin
|
|||||||
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.MoveKotlinTopLevelDeclarationsModel
|
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.MoveKotlinTopLevelDeclarationsModel
|
||||||
import org.jetbrains.kotlin.idea.references.resolveMainReferenceToDescriptors
|
import org.jetbrains.kotlin.idea.references.resolveMainReferenceToDescriptors
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeCommand
|
import org.jetbrains.kotlin.idea.util.application.executeCommand
|
||||||
import org.jetbrains.kotlin.idea.util.projectStructure.module
|
import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
|
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperInterfaces
|
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperInterfaces
|
||||||
import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
||||||
|
|
||||||
class MoveToSealedMatchingPackageFix(element: KtTypeReference) : KotlinQuickFixAction<KtTypeReference>(element) {
|
class MoveToSealedMatchingPackageFix(element: KtTypeReference) : KotlinQuickFixAction<KtTypeReference>(element) {
|
||||||
@@ -71,16 +68,7 @@ class MoveToSealedMatchingPackageFix(element: KtTypeReference) : KotlinQuickFixA
|
|||||||
val ktUserType = typeElement as? KtUserType ?: return null
|
val ktUserType = typeElement as? KtUserType ?: return null
|
||||||
val ktNameReferenceExpression = ktUserType.referenceExpression as? KtNameReferenceExpression ?: return null
|
val ktNameReferenceExpression = ktUserType.referenceExpression as? KtNameReferenceExpression ?: return null
|
||||||
val declDescriptor = ktNameReferenceExpression.resolveMainReferenceToDescriptors().singleOrNull() ?: return null
|
val declDescriptor = ktNameReferenceExpression.resolveMainReferenceToDescriptors().singleOrNull() ?: return null
|
||||||
|
return declDescriptor.containingDeclaration?.findPsi()?.containingFile?.containingDirectory
|
||||||
val packageName = declDescriptor.containingPackage()?.asString() ?: return null
|
|
||||||
|
|
||||||
val projectFileIndex = ProjectFileIndex.getInstance(project)
|
|
||||||
val ktClassInQuestion = DescriptorToSourceUtils.getSourceFromDescriptor(declDescriptor) as? KtClass ?: return null
|
|
||||||
val module = projectFileIndex.getModuleForFile(ktClassInQuestion.containingFile.virtualFile) ?: return null
|
|
||||||
val psiPackage =
|
|
||||||
KotlinJavaPsiFacade.getInstance(project).findPackage(packageName, GlobalSearchScope.moduleScope(module)) ?: return null
|
|
||||||
|
|
||||||
return psiPackage.directories.find { it.module == module }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun startInWriteAction(): Boolean {
|
override fun startInWriteAction(): Boolean {
|
||||||
|
|||||||
Reference in New Issue
Block a user