"Make abstract" is no longer applicable to object / enum entry members #KT-3797 Fixed
This commit is contained in:
@@ -30,6 +30,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.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
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
@@ -85,7 +86,15 @@ open class AddModifierFix(
|
|||||||
public override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
public override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
||||||
val modifierListOwner = QuickFixUtil.getParentElementOfType(diagnostic, modifierOwnerClass) ?: return null
|
val modifierListOwner = QuickFixUtil.getParentElementOfType(diagnostic, modifierOwnerClass) ?: return null
|
||||||
|
|
||||||
if (modifier == KtTokens.ABSTRACT_KEYWORD && modifierListOwner is KtObjectDeclaration) return null
|
if (modifier == KtTokens.ABSTRACT_KEYWORD) {
|
||||||
|
if (modifierListOwner is KtObjectDeclaration) return null
|
||||||
|
if (modifierListOwner is KtEnumEntry) return null
|
||||||
|
if (modifierListOwner is KtDeclaration && modifierListOwner !is KtClass) {
|
||||||
|
val parentClassOrObject = modifierListOwner.containingClassOrObject ?: return null
|
||||||
|
if (parentClassOrObject is KtObjectDeclaration) return null
|
||||||
|
if (parentClassOrObject is KtEnumEntry) return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return AddModifierFix(modifierListOwner, modifier)
|
return AddModifierFix(modifierListOwner, modifier)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// "Make 'A' abstract" "false"
|
||||||
|
// ACTION: Implement members
|
||||||
|
// ERROR: Class 'A' must be declared abstract or implement abstract member public abstract fun foo(): Unit defined in E
|
||||||
|
|
||||||
|
enum class E {
|
||||||
|
<caret>A;
|
||||||
|
|
||||||
|
abstract fun foo()
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// "Make 'foo' abstract" "false"
|
||||||
|
// ACTION: Add function body
|
||||||
|
// ACTION: Make internal
|
||||||
|
// ACTION: Make private
|
||||||
|
// ERROR: Function 'foo' without a body must be abstract
|
||||||
|
|
||||||
|
|
||||||
|
object O {
|
||||||
|
<caret>fun foo()
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// "Make 'foo' abstract" "false"
|
||||||
|
// ACTION: Add function body
|
||||||
|
// ACTION: Create test
|
||||||
|
// ACTION: Make internal
|
||||||
|
// ACTION: Make private
|
||||||
|
// ERROR: Function 'foo' must have a body
|
||||||
|
|
||||||
|
<caret>fun foo()
|
||||||
@@ -151,6 +151,24 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/abstract"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/abstract"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("makeEnumEntryAbstract.kt")
|
||||||
|
public void testMakeEnumEntryAbstract() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/makeEnumEntryAbstract.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("makeObjectMemberAbstract.kt")
|
||||||
|
public void testMakeObjectMemberAbstract() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/makeObjectMemberAbstract.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("makeTopLevelAbstract.kt")
|
||||||
|
public void testMakeTopLevelAbstract() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/makeTopLevelAbstract.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("manyImpl.kt")
|
@TestMetadata("manyImpl.kt")
|
||||||
public void testManyImpl() throws Exception {
|
public void testManyImpl() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/manyImpl.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/abstract/manyImpl.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user