From 89ba7a7ae8a29704b5f5064d25fcff5507450b42 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Sat, 17 Nov 2018 20:55:25 +0900 Subject: [PATCH] Make abstract: do not suggest for inline classes #KT-28268 Fixed --- .../jetbrains/kotlin/idea/quickfix/AddModifierFix.kt | 5 +++++ .../quickfix/abstract/makeInlineClassAbstract.kt | 12 ++++++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 5 +++++ 3 files changed, 22 insertions(+) create mode 100644 idea/testData/quickfix/abstract/makeInlineClassAbstract.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt index ee2eb097b63..da4eda46479 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.idea.inspections.KotlinUniversalQuickFix import org.jetbrains.kotlin.idea.refactoring.canRefactor import org.jetbrains.kotlin.idea.util.runOnExpectAndAllActuals import org.jetbrains.kotlin.lexer.KtModifierKeywordToken +import org.jetbrains.kotlin.lexer.KtToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.psi.* @@ -130,6 +131,10 @@ open class AddModifierFix( if (parentClassOrObject is KtObjectDeclaration) return null if (parentClassOrObject is KtEnumEntry) return null } + if (modifier == ABSTRACT_KEYWORD + && modifierListOwner is KtClass + && modifierListOwner.hasModifier(KtTokens.INLINE_KEYWORD) + ) return null } INNER_KEYWORD -> { if (modifierListOwner is KtObjectDeclaration) return null diff --git a/idea/testData/quickfix/abstract/makeInlineClassAbstract.kt b/idea/testData/quickfix/abstract/makeInlineClassAbstract.kt new file mode 100644 index 00000000000..2b982b3658f --- /dev/null +++ b/idea/testData/quickfix/abstract/makeInlineClassAbstract.kt @@ -0,0 +1,12 @@ +// "Make 'A' abstract" "false" +// ERROR: Class 'A' is not abstract and does not implement abstract member public abstract fun foo(): String defined in I +// ERROR: Primary constructor is required for inline class +// ACTION: Create test +// ACTION: Implement members +// ACTION: Move 'A' to separate file +// ACTION: Rename file to A.kt +interface I { + fun foo(): String +} + +inline class A : I \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 8ab2a9cd039..fcef2b40dc1 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -136,6 +136,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/abstract/makeEnumEntryAbstract.kt"); } + @TestMetadata("makeInlineClassAbstract.kt") + public void testMakeInlineClassAbstract() throws Exception { + runTest("idea/testData/quickfix/abstract/makeInlineClassAbstract.kt"); + } + @TestMetadata("makeObjectMemberAbstract.kt") public void testMakeObjectMemberAbstract() throws Exception { runTest("idea/testData/quickfix/abstract/makeObjectMemberAbstract.kt");