From 6461c1b4f1f06f3dbd0c01c927d82800e89dadd1 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Mon, 25 May 2020 18:13:24 +0300 Subject: [PATCH] Add "Remove annotation" quickfix for empty `@Throws` --- .../jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt | 2 ++ .../addCancellationException3/native/test.kt | 1 + .../addCancellationException4/native/test.kt | 1 + .../removeEmptyThrows/native/kotlin.kt | 7 +++++++ .../fixNativeThrowsErrors/removeEmptyThrows/native/test.kt | 4 ++++ .../removeEmptyThrows/native/test.kt.after | 3 +++ .../idea/quickfix/QuickFixMultiModuleTestGenerated.java | 5 +++++ 7 files changed, 23 insertions(+) create mode 100644 idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/kotlin.kt create mode 100644 idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/test.kt create mode 100644 idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/test.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index 55c338a1994..f01b07c2d96 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.* import org.jetbrains.kotlin.resolve.konan.diagnostics.ErrorsNative.MISSING_EXCEPTION_IN_THROWS_ON_SUSPEND +import org.jetbrains.kotlin.resolve.konan.diagnostics.ErrorsNative.THROWS_LIST_EMPTY class QuickFixRegistrar : QuickFixContributor { override fun registerQuickFixes(quickFixes: QuickFixes) { @@ -654,5 +655,6 @@ class QuickFixRegistrar : QuickFixContributor { CONFLICTING_JVM_DECLARATIONS.registerFactory(AddJvmNameAnnotationFix) MISSING_EXCEPTION_IN_THROWS_ON_SUSPEND.registerFactory(AddExceptionToThrowsFix) + THROWS_LIST_EMPTY.registerFactory(RemoveAnnotationFix) } } diff --git a/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/addCancellationException3/native/test.kt b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/addCancellationException3/native/test.kt index e54b717ccdf..27675224430 100644 --- a/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/addCancellationException3/native/test.kt +++ b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/addCancellationException3/native/test.kt @@ -2,6 +2,7 @@ // ERROR: @Throws must have non-empty class list // ACTION: Make internal // ACTION: Make private +// ACTION: Remove annotation // No compilation error => no quickfix. @Throws() diff --git a/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/addCancellationException4/native/test.kt b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/addCancellationException4/native/test.kt index 69cb7010e98..dc55047ad2b 100644 --- a/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/addCancellationException4/native/test.kt +++ b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/addCancellationException4/native/test.kt @@ -2,6 +2,7 @@ // ERROR: @Throws must have non-empty class list // ACTION: Make internal // ACTION: Make private +// ACTION: Remove annotation // No compilation error => no quickfix. @Throws diff --git a/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/kotlin.kt b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/kotlin.kt new file mode 100644 index 00000000000..2741c5635a4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/kotlin.kt @@ -0,0 +1,7 @@ +package kotlin + +import kotlin.reflect.KClass + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR) +@Retention(AnnotationRetention.SOURCE) +public annotation class Throws(vararg val exceptionClasses: KClass) diff --git a/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/test.kt b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/test.kt new file mode 100644 index 00000000000..75aca50e0dd --- /dev/null +++ b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/test.kt @@ -0,0 +1,4 @@ +// "Remove annotation" "true" + +@Throws +fun removeEmptyThrows() {} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/test.kt.after b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/test.kt.after new file mode 100644 index 00000000000..dc2f6cb518b --- /dev/null +++ b/idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/native/test.kt.after @@ -0,0 +1,3 @@ +// "Remove annotation" "true" + +fun removeEmptyThrows() {} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java index 69557005dd9..91ff87fab71 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -825,6 +825,11 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul public void testAllFilesPresentInFixNativeThrowsErrors() throws Exception { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/multiModuleQuickFix/fixNativeThrowsErrors"), Pattern.compile("^([^\\.]+)$"), null, true); } + + @TestMetadata("removeEmptyThrows") + public void testRemoveEmptyThrows() throws Exception { + runTest("idea/testData/multiModuleQuickFix/fixNativeThrowsErrors/removeEmptyThrows/"); + } } @TestMetadata("idea/testData/multiModuleQuickFix/makeOverridenMemberOpen")