diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExperimentalMarkerDeclarationAnnotationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExperimentalMarkerDeclarationAnnotationChecker.kt index 24791060e81..4dd6766a943 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExperimentalMarkerDeclarationAnnotationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExperimentalMarkerDeclarationAnnotationChecker.kt @@ -34,7 +34,12 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs class ExperimentalMarkerDeclarationAnnotationChecker(private val module: ModuleDescriptor) : AdditionalAnnotationChecker { companion object { - private val WRONG_TARGETS_FOR_MARKER = setOf(KotlinTarget.EXPRESSION, KotlinTarget.FILE) + private val WRONG_TARGETS_FOR_MARKER = setOf( + KotlinTarget.EXPRESSION, + KotlinTarget.FILE, + KotlinTarget.TYPE, + KotlinTarget.TYPE_PARAMETER + ) } override fun checkEntries( diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.fir.kt index 80a28d3870e..6c75d289c70 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.fir.kt @@ -5,13 +5,13 @@ package api @RequiresOptIn(level = RequiresOptIn.Level.WARNING) -@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.BINARY) annotation class ExperimentalAPI @ExperimentalAPI -@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.BINARY) annotation class EAnno @@ -29,10 +29,10 @@ import api.* fun parameter(@EAnno p: String) {} @ExperimentalAPI -fun parameterType(p: @EAnno String) {} +fun parameterType(p: @EAnno String) {} @ExperimentalAPI -fun returnType(): @EAnno Unit {} +fun returnType(): @EAnno Unit {} @ExperimentalAPI @EAnno val property = "" @@ -74,10 +74,10 @@ import api.* fun parameter(@EAnno p: String) {} @OptIn(ExperimentalAPI::class) -fun parameterType(p: @EAnno String) {} +fun parameterType(p: @EAnno String) {} @OptIn(ExperimentalAPI::class) -fun returnType(): @EAnno Unit {} +fun returnType(): @EAnno Unit {} @OptIn(ExperimentalAPI::class) @EAnno val property = "" @@ -114,9 +114,9 @@ import api.* fun parameter(@EAnno p: String) {} -fun parameterType(p: @EAnno String) {} +fun parameterType(p: @EAnno String) {} -fun returnType(): @EAnno Unit {} +fun returnType(): @EAnno Unit {} @EAnno val property = "" diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.kt b/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.kt index b00898eabba..3ad625d713e 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.kt @@ -5,13 +5,13 @@ package api @RequiresOptIn(level = RequiresOptIn.Level.WARNING) -@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.BINARY) annotation class ExperimentalAPI @ExperimentalAPI -@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.BINARY) annotation class EAnno @@ -29,10 +29,10 @@ import api.* fun parameter(@EAnno p: String) {} @ExperimentalAPI -fun parameterType(p: @EAnno String) {} +fun parameterType(p: @EAnno String) {} @ExperimentalAPI -fun returnType(): @EAnno Unit {} +fun returnType(): @EAnno Unit {} @ExperimentalAPI @EAnno val property = "" @@ -74,10 +74,10 @@ import api.* fun parameter(@EAnno p: String) {} @OptIn(ExperimentalAPI::class) -fun parameterType(p: @EAnno String) {} +fun parameterType(p: @EAnno String) {} @OptIn(ExperimentalAPI::class) -fun returnType(): @EAnno Unit {} +fun returnType(): @EAnno Unit {} @OptIn(ExperimentalAPI::class) @EAnno val property = "" @@ -114,9 +114,9 @@ import api.* fun parameter(@EAnno p: String) {} -fun parameterType(p: @EAnno String) {} +fun parameterType(p: @EAnno String) {} -fun returnType(): @EAnno Unit {} +fun returnType(): @EAnno Unit {} @EAnno val property = "" diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.txt b/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.txt index b97b9d58359..1a6527aca33 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/annotation.txt @@ -2,14 +2,14 @@ package package api { - @api.ExperimentalAPI @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class EAnno : kotlin.Annotation { + @api.ExperimentalAPI @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class EAnno : kotlin.Annotation { public constructor EAnno() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } - @kotlin.RequiresOptIn(level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class ExperimentalAPI : kotlin.Annotation { + @kotlin.RequiresOptIn(level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class ExperimentalAPI : kotlin.Annotation { public constructor ExperimentalAPI() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.fir.kt index 12d364e5b30..70267d713d7 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.fir.kt @@ -6,8 +6,8 @@ package api import kotlin.annotation.AnnotationTarget.* @RequiresOptIn(level = RequiresOptIn.Level.WARNING) -@Target(CLASS, ANNOTATION_CLASS, TYPE_PARAMETER, PROPERTY, FIELD, LOCAL_VARIABLE, VALUE_PARAMETER, CONSTRUCTOR, FUNCTION, - PROPERTY_SETTER, TYPE, TYPEALIAS) +@Target(CLASS, ANNOTATION_CLASS, PROPERTY, FIELD, LOCAL_VARIABLE, VALUE_PARAMETER, CONSTRUCTOR, FUNCTION, + PROPERTY_SETTER, TYPEALIAS) @Retention(AnnotationRetention.BINARY) annotation class E1 @@ -20,6 +20,16 @@ annotation class E2 @Retention(AnnotationRetention.SOURCE) annotation class E3 +@RequiresOptIn(level = RequiresOptIn.Level.WARNING) +@Target(TYPE_PARAMETER) +@Retention(AnnotationRetention.BINARY) +annotation class E3A + +@RequiresOptIn(level = RequiresOptIn.Level.WARNING) +@Target(TYPE) +@Retention(AnnotationRetention.BINARY) +annotation class E3B + @RequiresOptIn(level = RequiresOptIn.Level.WARNING) @Target(PROPERTY_GETTER) @Retention(AnnotationRetention.BINARY) diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt index 1fa824666f7..e35df2476ed 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt @@ -6,8 +6,8 @@ package api import kotlin.annotation.AnnotationTarget.* @RequiresOptIn(level = RequiresOptIn.Level.WARNING) -@Target(CLASS, ANNOTATION_CLASS, TYPE_PARAMETER, PROPERTY, FIELD, LOCAL_VARIABLE, VALUE_PARAMETER, CONSTRUCTOR, FUNCTION, - PROPERTY_SETTER, TYPE, TYPEALIAS) +@Target(CLASS, ANNOTATION_CLASS, PROPERTY, FIELD, LOCAL_VARIABLE, VALUE_PARAMETER, CONSTRUCTOR, FUNCTION, + PROPERTY_SETTER, TYPEALIAS) @Retention(AnnotationRetention.BINARY) annotation class E1 @@ -20,6 +20,16 @@ annotation class E2 @Retention(AnnotationRetention.SOURCE) annotation class E3 +@RequiresOptIn(level = RequiresOptIn.Level.WARNING) +@Target(TYPE_PARAMETER) +@Retention(AnnotationRetention.BINARY) +annotation class E3A + +@RequiresOptIn(level = RequiresOptIn.Level.WARNING) +@Target(TYPE) +@Retention(AnnotationRetention.BINARY) +annotation class E3B + @RequiresOptIn(level = RequiresOptIn.Level.WARNING) @Target(PROPERTY_GETTER) @Retention(AnnotationRetention.BINARY) diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.txt b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.txt index f52576ff083..75b3a2a7518 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.txt @@ -64,7 +64,7 @@ package api { public open override /*1*/ fun @receiver:api.E6 kotlin.String.withReceiver(): kotlin.Unit } - @kotlin.RequiresOptIn(level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class E1 : kotlin.Annotation { + @kotlin.RequiresOptIn(level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class E1 : kotlin.Annotation { public constructor E1() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -85,6 +85,20 @@ package api { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + @kotlin.RequiresOptIn(level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class E3A : kotlin.Annotation { + public constructor E3A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + @kotlin.RequiresOptIn(level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class E3B : kotlin.Annotation { + public constructor E3B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + @kotlin.RequiresOptIn(level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class E4 : kotlin.Annotation { public constructor E4() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.fir.kt index 841aa99d113..0a3fb3f5378 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.fir.kt @@ -5,7 +5,7 @@ package api @RequiresOptIn(level = RequiresOptIn.Level.WARNING) -@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.BINARY) annotation class ExperimentalAPI diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.kt b/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.kt index 08c54ae3220..22c337d5788 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.kt @@ -5,7 +5,7 @@ package api @RequiresOptIn(level = RequiresOptIn.Level.WARNING) -@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.BINARY) annotation class ExperimentalAPI diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.txt b/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.txt index 2707a3a6fc4..39ca9fb2b65 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/topLevel.txt @@ -4,7 +4,7 @@ package api { @api.ExperimentalAPI public val property: kotlin.String = "" @api.ExperimentalAPI public fun function(): kotlin.String - @kotlin.RequiresOptIn(level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class ExperimentalAPI : kotlin.Annotation { + @kotlin.RequiresOptIn(level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS, AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class ExperimentalAPI : kotlin.Annotation { public constructor ExperimentalAPI() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int