#KT-29622: Support sealed classes with nested impls move

This commit is contained in:
Vadim Brilyantov
2019-05-08 17:20:14 +03:00
committed by Igor Yakovlev
parent a8e0dfabc7
commit a16551557c
@@ -22,14 +22,18 @@ import org.jetbrains.kotlin.idea.core.moveCaret
import org.jetbrains.kotlin.idea.intentions.SelfTargetingRangeIntention
import org.jetbrains.kotlin.idea.refactoring.createKotlinFile
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.MoveKotlinTopLevelDeclarationsDialog
import org.jetbrains.kotlin.ir.util.startOffset
import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtObjectDeclaration
import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
import org.jetbrains.kotlin.resolve.source.getPsi
private const val TIMEOUT_FOR_IMPORT_OPTIMIZING_MS: Long = 700L
@@ -43,7 +47,10 @@ class ExtractDeclarationFromCurrentFileIntention :
if (element.containingKtFile.declarations.size == 1) return null
val descriptor = element.resolveToDescriptorIfAny() ?: return null
if (descriptor.sealedSubclasses.isNotEmpty()) return null
if (descriptor.sealedSubclasses
.mapNotNull { it.source.getPsi() }
.any { !element.isAncestor(it) }
) return null
if (descriptor.getSuperClassNotAny()?.modality == Modality.SEALED) return null
val keyword = when (element) {