Extract Interface/Superclass: Disable "Make abstract" for inline/external/lateinit members

#KT-15602 Fixed
This commit is contained in:
Alexey Sedunov
2017-01-10 17:58:00 +03:00
parent edf5d7da10
commit e67d10c028
6 changed files with 17 additions and 0 deletions
+1
View File
@@ -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
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
@@ -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
}
}