From 06ba143afea71f732554bce9d4b9367bb29ed255 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Fri, 9 Apr 2021 19:34:45 -0700 Subject: [PATCH] FIR IDE: quickfix to make class abstract if member not implemented --- .../kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt | 8 ++++++++ .../idea/quickfix/HighLevelQuickFixTestGenerated.java | 10 ++++++++++ .../modifiers/abstractClassMemberNotImplemented.kt | 7 +++++++ .../abstractClassMemberNotImplemented.kt.after | 7 +++++++ .../quickfix/modifiers/abstractMemberNotImplemented.kt | 3 +++ .../modifiers/abstractMemberNotImplemented.kt.after | 3 +++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 10 ++++++++++ 7 files changed, 48 insertions(+) create mode 100644 idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt create mode 100644 idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt.after create mode 100644 idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt create mode 100644 idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt.after diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt index ac9c6f3285d..bccc0933a66 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt @@ -54,6 +54,14 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { RemoveModifierFix.removeNonRedundantModifier, ChangeVariableMutabilityFix.CONST_VAL_FACTORY ) + registerPsiQuickFixes( + KtFirDiagnostic.AbstractMemberNotImplemented::class, + AddModifierFix.addAbstractModifier + ) + registerPsiQuickFixes( + KtFirDiagnostic.AbstractClassMemberNotImplemented::class, + AddModifierFix.addAbstractModifier + ) } private val propertyInitialization = KtQuickFixesListBuilder.registerPsiQuickFix { diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java index 9292515229d..da6d6dae053 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java @@ -436,6 +436,16 @@ public class HighLevelQuickFixTestGenerated extends AbstractHighLevelQuickFixTes KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); } + @TestMetadata("abstractClassMemberNotImplemented.kt") + public void testAbstractClassMemberNotImplemented() throws Exception { + runTest("idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt"); + } + + @TestMetadata("abstractMemberNotImplemented.kt") + public void testAbstractMemberNotImplemented() throws Exception { + runTest("idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt"); + } + @TestMetadata("abstractModifierInEnum.kt") public void testAbstractModifierInEnum() throws Exception { runTest("idea/testData/quickfix/modifiers/abstractModifierInEnum.kt"); diff --git a/idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt b/idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt new file mode 100644 index 00000000000..064c156ec80 --- /dev/null +++ b/idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt @@ -0,0 +1,7 @@ +// "Make 'Foo' 'abstract'" "true" + +abstract class Bar { + abstract val i: Int +} + +class Foo : Bar() {} \ No newline at end of file diff --git a/idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt.after b/idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt.after new file mode 100644 index 00000000000..251e19a8fc0 --- /dev/null +++ b/idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt.after @@ -0,0 +1,7 @@ +// "Make 'Foo' 'abstract'" "true" + +abstract class Bar { + abstract val i: Int +} + +abstract class Foo : Bar() {} \ No newline at end of file diff --git a/idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt b/idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt new file mode 100644 index 00000000000..541261e85b4 --- /dev/null +++ b/idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt @@ -0,0 +1,3 @@ +// "Make 'Foo' 'abstract'" "true" + +class Foo : List {} \ No newline at end of file diff --git a/idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt.after b/idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt.after new file mode 100644 index 00000000000..a20ab0ceb99 --- /dev/null +++ b/idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt.after @@ -0,0 +1,3 @@ +// "Make 'Foo' 'abstract'" "true" + +abstract class Foo : List {} \ 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 bc40f126c50..c3a46c8e632 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -9119,6 +9119,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); } + @TestMetadata("abstractClassMemberNotImplemented.kt") + public void testAbstractClassMemberNotImplemented() throws Exception { + runTest("idea/testData/quickfix/modifiers/abstractClassMemberNotImplemented.kt"); + } + + @TestMetadata("abstractMemberNotImplemented.kt") + public void testAbstractMemberNotImplemented() throws Exception { + runTest("idea/testData/quickfix/modifiers/abstractMemberNotImplemented.kt"); + } + @TestMetadata("abstractModifierInEnum.kt") public void testAbstractModifierInEnum() throws Exception { runTest("idea/testData/quickfix/modifiers/abstractModifierInEnum.kt");