Make abstract both member and class while applying "Make abstract"
So #KT-12613 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
0a9e0ddba9
commit
dbaec43e4d
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.containingClass
|
||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
@@ -56,6 +57,14 @@ open class AddModifierFix(
|
||||
|
||||
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||
element?.addModifier(modifier)
|
||||
|
||||
if (modifier == KtTokens.ABSTRACT_KEYWORD && (element is KtProperty || element is KtNamedFunction)) {
|
||||
element?.containingClass()?.run {
|
||||
if (!hasModifier(KtTokens.ABSTRACT_KEYWORD) && !hasModifier(KtTokens.SEALED_KEYWORD)) {
|
||||
addModifier(KtTokens.ABSTRACT_KEYWORD)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean {
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
// "Make 'i' abstract" "true"
|
||||
class A() {
|
||||
var <caret>i : Int
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
// "Make 'i' abstract" "true"
|
||||
abstract class A() {
|
||||
abstract var <caret>i : Int
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// "Make 'i' abstract" "true"
|
||||
open class A() {
|
||||
var <caret>i : Int
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
// "Make 'i' abstract" "true"
|
||||
abstract class A() {
|
||||
abstract var <caret>i : Int
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// "Make 'i' abstract" "true"
|
||||
sealed class A() {
|
||||
fun <caret>i() : Int
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
// "Make 'i' abstract" "true"
|
||||
sealed class A() {
|
||||
abstract fun <caret>i() : Int
|
||||
}
|
||||
@@ -182,6 +182,24 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("mustBeInitializedOrBeAbstractInFinalClass.kt")
|
||||
public void testMustBeInitializedOrBeAbstractInFinalClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/mustBeInitializedOrBeAbstractInFinalClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("mustBeInitializedOrBeAbstractInOpenClass.kt")
|
||||
public void testMustBeInitializedOrBeAbstractInOpenClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/mustBeInitializedOrBeAbstractInOpenClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("mustBeInitializedOrBeAbstractInSealedClass.kt")
|
||||
public void testMustBeInitializedOrBeAbstractInSealedClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/mustBeInitializedOrBeAbstractInSealedClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("nonAbstractFunctionWithNoBody.kt")
|
||||
public void testNonAbstractFunctionWithNoBody() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/nonAbstractFunctionWithNoBody.kt");
|
||||
|
||||
Reference in New Issue
Block a user