Resolve annotations on type parameters of functions and properties

This commit is contained in:
Svetlana Isakova
2015-10-16 15:14:16 +03:00
parent 9b440345a1
commit 082469aee4
10 changed files with 118 additions and 19 deletions
@@ -0,0 +1,38 @@
//!DIAGNOSTICS: -UNUSED_PARAMETER
@Target(AnnotationTarget.TYPE_PARAMETER)
annotation class A
@Target(AnnotationTarget.TYPE_PARAMETER)
annotation class B(val i: Int = 12)
fun <@A @B(3) T> topFun() = 12
class Class1 {
fun <@A @B(3)T> method() = 12
fun foo() {
fun <@A @B(3) T> innerFun() = 12
}
}
val <@A @B(3) T> T.topProp: Int get() = 12
class Class2 {
val <@A @B(3) T> T.field: Int get() = 12
}
<!WRONG_ANNOTATION_TARGET!>@A<!> fun foo() {}
<!WRONG_ANNOTATION_TARGET!>@A<!> class D
fun foo(i: <!WRONG_ANNOTATION_TARGET!>@A<!> Int) {
<!WRONG_ANNOTATION_TARGET!>@A<!> val <!NAME_SHADOWING, UNUSED_VARIABLE!>i<!> = 1
}
fun <T> test(t: <!WRONG_ANNOTATION_TARGET!>@A<!> T): T = t
@Target(AnnotationTarget.TYPE)
internal annotation class C
fun <<!WRONG_ANNOTATION_TARGET!>@C<!> T> test2(t: T): T = t
@@ -0,0 +1,54 @@
package
public val </*0*/ T> T.topProp: kotlin.Int
@A() public fun foo(): kotlin.Unit
public fun foo(/*0*/ i: @A() kotlin.Int): kotlin.Unit
public fun </*0*/ T> test(/*0*/ t: @A() T): T
public fun </*0*/ T> test2(/*0*/ t: T): T
public fun </*0*/ T> topFun(): kotlin.Int
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE_PARAMETER}) @kotlin.annotation.annotation() public final class A : kotlin.Annotation {
public constructor A()
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_PARAMETER}) @kotlin.annotation.annotation() public final class B : kotlin.Annotation {
public constructor B(/*0*/ i: kotlin.Int = ...)
public final val i: kotlin.Int
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}) @kotlin.annotation.annotation() internal final class C : kotlin.Annotation {
public constructor C()
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
}
public final class Class1 {
public constructor Class1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final fun </*0*/ T> method(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Class2 {
public constructor Class2()
public final val </*0*/ T> T.field: kotlin.Int
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
}
@A() public final class D {
public constructor D()
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
}