From 6fb943765d449313a523d0e5631ed7c3121a3a49 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 10 Jan 2017 15:59:16 +0300 Subject: [PATCH] Extract Interface/Superclass: Disable const-properties #KT-15611 Fixed --- ChangeLog.md | 1 + .../extractClass/ui/KotlinExtractSuperDialogBase.kt | 6 ++++++ .../kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt | 3 +++ 3 files changed, 10 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index 29b37a23b10..173d1b8331d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -469,6 +469,7 @@ These artifacts include extensions for the types available in the latter JDKs, s ### IDE - 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 #### Intention actions, inspections and quickfixes 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 4ff7c72cf26..5ae65d45af6 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 @@ -37,6 +37,7 @@ import org.jetbrains.kotlin.idea.refactoring.introduce.extractClass.ExtractSuper import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinMemberInfo import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinMemberSelectionPanel import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinUsesAndInterfacesDependencyMemberInfoModel +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtNamedDeclaration import java.awt.BorderLayout @@ -65,6 +66,11 @@ abstract class KotlinExtractSuperDialogBase( val memberInfos: List, interfaceContainmentVerifier: (KtNamedDeclaration) -> Boolean ) : KotlinUsesAndInterfacesDependencyMemberInfoModel(originalClass, null, false, interfaceContainmentVerifier) { + override fun isMemberEnabled(member: KotlinMemberInfo): Boolean { + val declaration = member.member ?: return false + return !declaration.hasModifier(KtTokens.CONST_KEYWORD) + } + override fun isFixedAbstract(memberInfo: KotlinMemberInfo?) = true } 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 34023ee270f..b1ede3e3c7c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.idea.refactoring.isCompanionMemberOf import org.jetbrains.kotlin.idea.refactoring.isInterfaceClass import org.jetbrains.kotlin.idea.refactoring.memberInfo.* +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* class KotlinPullUpDialog( @@ -91,6 +92,8 @@ class KotlinPullUpDialog( val superClass = superClass ?: return false val member = memberInfo.member + if (member.hasModifier(KtTokens.CONST_KEYWORD)) return false + if (superClass is PsiClass) { if (!member.canMoveMemberToJavaClass(superClass)) return false if (member.isCompanionMemberOf(sourceClass)) return false