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.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.containingClass
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
@@ -56,6 +57,14 @@ open class AddModifierFix(
|
|||||||
|
|
||||||
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||||
element?.addModifier(modifier)
|
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 {
|
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);
|
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")
|
@TestMetadata("nonAbstractFunctionWithNoBody.kt")
|
||||||
public void testNonAbstractFunctionWithNoBody() throws Exception {
|
public void testNonAbstractFunctionWithNoBody() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/nonAbstractFunctionWithNoBody.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/nonAbstractFunctionWithNoBody.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user