diff --git a/ChangeLog.md b/ChangeLog.md index c92f6232dfe..104cc28ac9b 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -471,6 +471,7 @@ These artifacts include extensions for the types available in the latter JDKs, s - Project View: Fix presentation of Kotlin files and their members when @JvmName having the same name as the file itself - [`KT-15611`](https://youtrack.jetbrains.com/issue/KT-15611) Extract Interface/Superclass: Disable const-properties - Pull Up: Fix pull-up from object to superclass +- [`KT-15602`](https://youtrack.jetbrains.com/issue/KT-15602) Extract Interface/Superclass: Disable "Make abstract" for inline/external/lateinit members #### Intention actions, inspections and quickfixes diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractInterfaceDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractInterfaceDialog.kt index 4b930d273a8..5dea340e831 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractInterfaceDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractInterfaceDialog.kt @@ -55,6 +55,7 @@ class KotlinExtractInterfaceDialog( getInterfaceContainmentVerifier { selectedMembers } ) { override fun isAbstractEnabled(memberInfo: KotlinMemberInfo): Boolean { + if (!super.isAbstractEnabled(memberInfo)) return false val member = memberInfo.member return member is KtNamedFunction || (member is KtProperty && !member.mustBeAbstractInInterface()) || member is KtParameter } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperDialogBase.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperDialogBase.kt index 5ae65d45af6..e430b9db91f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperDialogBase.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperDialogBase.kt @@ -71,6 +71,13 @@ abstract class KotlinExtractSuperDialogBase( return !declaration.hasModifier(KtTokens.CONST_KEYWORD) } + override fun isAbstractEnabled(memberInfo: KotlinMemberInfo): Boolean { + val member = memberInfo.member + return !(member.hasModifier(KtTokens.INLINE_KEYWORD) || + member.hasModifier(KtTokens.EXTERNAL_KEYWORD) || + member.hasModifier(KtTokens.LATEINIT_KEYWORD)) + } + override fun isFixedAbstract(memberInfo: KotlinMemberInfo?) = true } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperclassDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperclassDialog.kt index fad8f3cb047..c08f0902e26 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperclassDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperclassDialog.kt @@ -51,6 +51,7 @@ class KotlinExtractSuperclassDialog( getInterfaceContainmentVerifier { selectedMembers } ) { override fun isAbstractEnabled(memberInfo: KotlinMemberInfo): Boolean { + if (!super.isAbstractEnabled(memberInfo)) return false val member = memberInfo.member return member is KtNamedFunction || member is KtProperty || member is KtParameter } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt index b1ede3e3c7c..4b64c1d909a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt @@ -74,6 +74,9 @@ class KotlinPullUpDialog( if (superClass !is KtClass) return false val member = memberInfo.member + if (member.hasModifier(KtTokens.INLINE_KEYWORD) || + member.hasModifier(KtTokens.EXTERNAL_KEYWORD) || + member.hasModifier(KtTokens.LATEINIT_KEYWORD)) return false if (member.isCompanionMemberOf(sourceClass)) return false if (!superClass.isInterface()) return true diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/pushDown/KotlinPushDownDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/pushDown/KotlinPushDownDialog.kt index 242d4b60018..8dfb7d5fa8e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/pushDown/KotlinPushDownDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/pushDown/KotlinPushDownDialog.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinMemberInfo import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinMemberSelectionPanel import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinUsesDependencyMemberInfoModel import org.jetbrains.kotlin.idea.refactoring.memberInfo.qualifiedClassNameForRendering +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtNamedFunction @@ -89,6 +90,9 @@ class KotlinPushDownDialog( override fun isAbstractEnabled(memberInfo: KotlinMemberInfo): Boolean { val member = memberInfo.member + if (member.hasModifier(KtTokens.INLINE_KEYWORD) || + member.hasModifier(KtTokens.EXTERNAL_KEYWORD) || + member.hasModifier(KtTokens.LATEINIT_KEYWORD)) return false return member is KtNamedFunction || member is KtProperty } }