From 2f3e3b9c9edaf34b353cdd074e25866632ff914e Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Mon, 27 Jan 2020 23:36:38 +0700 Subject: [PATCH] Create `ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection` #KT-36260 Fixed --- idea/resources/META-INF/plugin-common.xml | 10 +++++++ ...structorsOfAnnotationClassesMigration.html | 5 ++++ ...sOfAnnotationClassesMigrationInspection.kt | 28 +++++++++++++++++++ .../.inspection | 1 + .../simple.kt | 4 +++ .../simple.kt.after | 4 +++ .../LocalInspectionTestGenerated.java | 18 ++++++++++++ 7 files changed, 70 insertions(+) create mode 100644 idea/resources/inspectionDescriptions/ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration.html create mode 100644 idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection.kt create mode 100644 idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/.inspection create mode 100644 idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/simple.kt create mode 100644 idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/simple.kt.after diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml index c78624bd135..7ea49d6f0b4 100644 --- a/idea/resources/META-INF/plugin-common.xml +++ b/idea/resources/META-INF/plugin-common.xml @@ -3129,6 +3129,16 @@ language="kotlin" /> + + + + Since Kotlin 1.4, it's forbidden to use @JvmOverloads on constructors of annotation classes. + + diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection.kt new file mode 100644 index 00000000000..18abe07cb2f --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.inspections.migration + +import com.intellij.codeInspection.CleanupLocalInspectionTool +import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.idea.configuration.MigrationInfo +import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate +import org.jetbrains.kotlin.idea.quickfix.migration.MigrationFix +import org.jetbrains.kotlin.psi.KtAnnotationEntry +import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm + + +class ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection : + AbstractDiagnosticBasedMigrationInspection( + ErrorsJvm.OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR, + KtAnnotationEntry::class.java, + ), + MigrationFix, + CleanupLocalInspectionTool { + override fun isApplicable(migrationInfo: MigrationInfo): Boolean { + return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4) + } +} + diff --git a/idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/.inspection b/idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/.inspection new file mode 100644 index 00000000000..7f65a554f9b --- /dev/null +++ b/idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/.inspection @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.inspections.migration.ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection diff --git a/idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/simple.kt b/idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/simple.kt new file mode 100644 index 00000000000..db20125f829 --- /dev/null +++ b/idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/simple.kt @@ -0,0 +1,4 @@ +// LANGUAGE_VERSION: 1.4 +// WITH_RUNTIME + +annotation class A @JvmOverloads constructor(val x: Int = 1) \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/simple.kt.after b/idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/simple.kt.after new file mode 100644 index 00000000000..4d679956222 --- /dev/null +++ b/idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/simple.kt.after @@ -0,0 +1,4 @@ +// LANGUAGE_VERSION: 1.4 +// WITH_RUNTIME + +annotation class A constructor(val x: Int = 1) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 8268d0d3399..87f9bbfac85 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -6603,6 +6603,24 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { } } + @TestMetadata("idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration extends AbstractLocalInspectionTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), null, true); + } + + @TestMetadata("simple.kt") + public void testSimple() throws Exception { + runTest("idea/testData/inspectionsLocal/prohibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration/simple.kt"); + } + } + @TestMetadata("idea/testData/inspectionsLocal/prohibitTypeParametersForLocalVariablesMigration") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)