From bf5b5599239db25d5513788651077788040987c3 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 11 Apr 2019 14:09:17 +0900 Subject: [PATCH] Add function supertype: make abstract function in sealed class #KT-30769 Fixed --- .../kotlin/idea/quickfix/AddFunctionToSupertypeFix.kt | 6 +++++- .../override/nothingToOverride/addFunctionSealedClass.kt | 6 ++++++ .../nothingToOverride/addFunctionSealedClass.kt.after | 7 +++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 5 +++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 idea/testData/quickfix/override/nothingToOverride/addFunctionSealedClass.kt create mode 100644 idea/testData/quickfix/override/nothingToOverride/addFunctionSealedClass.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionToSupertypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionToSupertypeFix.kt index 0802daa26b5..e7b176af309 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionToSupertypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionToSupertypeFix.kt @@ -196,7 +196,11 @@ class AddFunctionToSupertypeFix private constructor( ): FunctionDescriptor { // TODO: support for generics. - val modality = if (typeDescriptor.kind == ClassKind.INTERFACE) Modality.ABSTRACT else typeDescriptor.modality + val modality = if (typeDescriptor.kind == ClassKind.INTERFACE || typeDescriptor.modality == Modality.SEALED) { + Modality.ABSTRACT + } else { + typeDescriptor.modality + } return functionDescriptor.copy( typeDescriptor, diff --git a/idea/testData/quickfix/override/nothingToOverride/addFunctionSealedClass.kt b/idea/testData/quickfix/override/nothingToOverride/addFunctionSealedClass.kt new file mode 100644 index 00000000000..8f580c92b40 --- /dev/null +++ b/idea/testData/quickfix/override/nothingToOverride/addFunctionSealedClass.kt @@ -0,0 +1,6 @@ +// "Add 'abstract fun f()' to 'A'" "true" +sealed class A { +} +class B : A() { + override fun f() {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/override/nothingToOverride/addFunctionSealedClass.kt.after b/idea/testData/quickfix/override/nothingToOverride/addFunctionSealedClass.kt.after new file mode 100644 index 00000000000..e9eded6d9d7 --- /dev/null +++ b/idea/testData/quickfix/override/nothingToOverride/addFunctionSealedClass.kt.after @@ -0,0 +1,7 @@ +// "Add 'abstract fun f()' to 'A'" "true" +sealed class A { + abstract fun f() +} +class B : A() { + override fun f() {} +} \ 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 579d5b03872..59ed4525e41 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -9286,6 +9286,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/override/nothingToOverride/addFunctionNonUnitReturnType.kt"); } + @TestMetadata("addFunctionSealedClass.kt") + public void testAddFunctionSealedClass() throws Exception { + runTest("idea/testData/quickfix/override/nothingToOverride/addFunctionSealedClass.kt"); + } + @TestMetadata("addFunctionTrait.kt") public void testAddFunctionTrait() throws Exception { runTest("idea/testData/quickfix/override/nothingToOverride/addFunctionTrait.kt");