From d5e406563b6785a522ba33287eaeb0818c8c08cd Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Mon, 15 Aug 2022 12:52:32 +0200 Subject: [PATCH] [kotlin][inspection] fix SOE from UnnecessaryOptInAnnotationInspection ^KTIJ-22084 Fixed GitOrigin-RevId: b5c605bb7cc5ba1420e96f329632545ba84816d1 --- .../UnnecessaryOptInAnnotationInspection.kt | 7 ++++++- .../inspections/LocalInspectionTestGenerated.java | 5 +++++ .../unnecessaryOptInAnnotation/recursive.kt | 14 ++++++++++++++ .../unnecessaryOptInAnnotation/recursive.kt.after | 13 +++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/unnecessaryOptInAnnotation/recursive.kt create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/unnecessaryOptInAnnotation/recursive.kt.after diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/UnnecessaryOptInAnnotationInspection.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/UnnecessaryOptInAnnotationInspection.kt index 87f787f1588d..0fa7072d2bdc 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/UnnecessaryOptInAnnotationInspection.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/UnnecessaryOptInAnnotationInspection.kt @@ -236,7 +236,12 @@ private class MarkerCollector(private val resolutionFacade: ResolutionFacade) { * @param moduleApiVersion the API version of the current module to check `@WasExperimental` annotations */ private fun KotlinType.collectMarkers(moduleApiVersion: ApiVersion) { - arguments.forEach { it.type.collectMarkers(moduleApiVersion) } + arguments.forEach { + if (!it.isStarProjection) { + it.type.collectMarkers(moduleApiVersion) + } + } + val descriptor = this.constructor.declarationDescriptor ?: return descriptor.collectMarkers(moduleApiVersion) } diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index fbffc5368646..89243014176e 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -15414,6 +15414,11 @@ public abstract class LocalInspectionTestGenerated extends AbstractLocalInspecti runTest("testData/inspectionsLocal/unnecessaryOptInAnnotation/noArguments.kt"); } + @TestMetadata("recursive.kt") + public void testRecursive() throws Exception { + runTest("testData/inspectionsLocal/unnecessaryOptInAnnotation/recursive.kt"); + } + @TestMetadata("redundantClassTwoMarkers.kt") public void testRedundantClassTwoMarkers() throws Exception { runTest("testData/inspectionsLocal/unnecessaryOptInAnnotation/redundantClassTwoMarkers.kt"); diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/unnecessaryOptInAnnotation/recursive.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unnecessaryOptInAnnotation/recursive.kt new file mode 100644 index 000000000000..286452abf5c0 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unnecessaryOptInAnnotation/recursive.kt @@ -0,0 +1,14 @@ +// WITH_STDLIB +// COMPILER_ARGUMENTS: -Xopt-in=kotlin.RequiresOptIn + +@RequiresOptIn +annotation class Marker + +lateinit var variable: RecType<*> + +@OptIn(Marker::class) +fun t() { + variable +} + +interface RecType> diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/unnecessaryOptInAnnotation/recursive.kt.after b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unnecessaryOptInAnnotation/recursive.kt.after new file mode 100644 index 000000000000..6259668fc3d7 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unnecessaryOptInAnnotation/recursive.kt.after @@ -0,0 +1,13 @@ +// WITH_STDLIB +// COMPILER_ARGUMENTS: -Xopt-in=kotlin.RequiresOptIn + +@RequiresOptIn +annotation class Marker + +lateinit var variable: RecType<*> + +fun t() { + variable +} + +interface RecType>