diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 70ecf49fc21..0f011eedb45 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -2136,6 +2136,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/annotations/typeUse/kt46173.kt"); } + @Test + @TestMetadata("kt47772.kt") + public void testKt47772() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.kt"); + } + @Test @TestMetadata("kt8325.kt") public void testKt8325() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index d82cb5f1fd4..57abab6d025 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -2136,6 +2136,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/annotations/typeUse/kt46173.kt"); } + @Test + @TestMetadata("kt47772.kt") + public void testKt47772() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.kt"); + } + @Test @TestMetadata("kt8325.kt") public void testKt8325() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt index 785d3ead555..90edae59e18 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt @@ -101,6 +101,12 @@ class AnnotationChecker( fun checkExpression(expression: KtExpression, trace: BindingTrace) { checkEntries(expression.getAnnotationEntries(), getActualTargetList(expression, null, trace.bindingContext), trace) + if (expression is KtCallElement && languageVersionSettings.supportsFeature(ProperCheckAnnotationsTargetInTypeUsePositions)) { + val typeArguments = expression.typeArguments.mapNotNull { it.typeReference } + for (typeArgument in typeArguments) { + checkEntries(typeArgument.annotationEntries, getActualTargetList(typeArgument, null, trace.bindingContext), trace) + } + } if (expression is KtLambdaExpression) { for (parameter in expression.valueParameters) { parameter.typeReference?.let { check(it, trace) } diff --git a/compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.kt b/compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.kt new file mode 100644 index 00000000000..d3eb0453eca --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.kt @@ -0,0 +1,19 @@ +// FIR_IDENTICAL +// LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions +// ISSUE: KT-47772 + +@Target(AnnotationTarget.CLASS) +annotation class Bad + +@Target(AnnotationTarget.TYPE) +annotation class Good + +fun materialize(): K? = null + +fun test_error() { + materialize<@Bad String>() +} + +fun test_ok() { + materialize<@Good String>() +} diff --git a/compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.txt b/compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.txt new file mode 100644 index 00000000000..d422ce32c9f --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.txt @@ -0,0 +1,19 @@ +package + +public fun materialize(): K? +public fun test_error(): kotlin.Unit +public fun test_ok(): kotlin.Unit + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) public final annotation class Bad : kotlin.Annotation { + public constructor Bad() + 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.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Good : kotlin.Annotation { + public constructor Good() + 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 +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index cdb87917327..9795a86529b 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -2142,6 +2142,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/annotations/typeUse/kt46173.kt"); } + @Test + @TestMetadata("kt47772.kt") + public void testKt47772() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.kt"); + } + @Test @TestMetadata("kt8325.kt") public void testKt8325() throws Exception { diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 49353d641d3..db6e52a0109 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -2136,6 +2136,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/annotations/typeUse/kt46173.kt"); } + @Test + @TestMetadata("kt47772.kt") + public void testKt47772() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/typeUse/kt47772.kt"); + } + @Test @TestMetadata("kt8325.kt") public void testKt8325() throws Exception {