From b401d46ae47b01a1afc4118ad124ffef5903615e Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Thu, 15 Oct 2015 16:37:43 +0300 Subject: [PATCH] Check annotations on type arguments --- .../org/jetbrains/kotlin/resolve/AnnotationChecker.kt | 3 +++ .../tests/annotations/annotationsOnNullableTypes.kt | 2 +- .../tests/annotations/extensionFunctionType.kt | 1 + .../tests/annotations/extensionFunctionType.txt | 2 +- .../tests/annotations/options/targets/typeargs.kt | 9 +++++++-- .../tests/annotations/options/targets/typeargs.txt | 8 ++++++++ 6 files changed, 21 insertions(+), 4 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt index 7c89f336b78..8d96efcd7a1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt @@ -42,6 +42,9 @@ public class AnnotationChecker(private val additionalCheckers: Iterable@c Int?) {} -fun foo3(l: List<@c Int?>) {} +fun foo3(l: List<@c Int?>) {} fun @c Int?.bar3() {} diff --git a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt index 3d0e6230392..563a3e5e867 100644 --- a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt +++ b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt @@ -1,5 +1,6 @@ // This test checks that annotations on extension function types are preserved. See the corresponding .txt file +@Target(AnnotationTarget.TYPE) annotation class ann interface Some { diff --git a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt index 760eaf6804a..86e30fee234 100644 --- a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt +++ b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt @@ -10,7 +10,7 @@ public interface Some { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -@kotlin.annotation.annotation() public final class ann : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.annotation() public final class ann : kotlin.Annotation { public constructor ann() 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/tests/annotations/options/targets/typeargs.kt b/compiler/testData/diagnostics/tests/annotations/options/targets/typeargs.kt index ba58167ad7c..fff0fa6333f 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/typeargs.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/targets/typeargs.kt @@ -1,5 +1,10 @@ annotation class base -val x: List<@base String>? = null +val x: List<@base String>? = null -val y: List<@[base] String>? = null \ No newline at end of file +val y: List<@[base] String>? = null + +@Target(AnnotationTarget.TYPE) +annotation class typeAnn + +fun foo(list: List<@typeAnn Int>) = list \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/typeargs.txt b/compiler/testData/diagnostics/tests/annotations/options/targets/typeargs.txt index 6b709622e96..314c1130ba0 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/typeargs.txt +++ b/compiler/testData/diagnostics/tests/annotations/options/targets/typeargs.txt @@ -2,6 +2,7 @@ package public val x: kotlin.List<@base() kotlin.String>? = null public val y: kotlin.List<@base() kotlin.String>? = null +public fun foo(/*0*/ list: kotlin.List<@typeAnn() kotlin.Int>): kotlin.List<@typeAnn() kotlin.Int> @kotlin.annotation.annotation() public final class base : kotlin.Annotation { public constructor base() @@ -9,3 +10,10 @@ public val y: kotlin.List<@base() kotlin.String>? = null 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}) @kotlin.annotation.annotation() public final class typeAnn : kotlin.Annotation { + public constructor typeAnn() + 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 +}