[FIR] add more tests on annotations for local declarations

^KT-63842
This commit is contained in:
Dmitrii Gridin
2023-11-27 18:49:24 +01:00
committed by Space Team
parent 98e12b0d7b
commit fcb3f003dc
53 changed files with 4021 additions and 0 deletions
@@ -0,0 +1,15 @@
@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.TYPE_PARAMETER)
annotation class Anno(val position: String)
open class A<T>
fun foo() {
val localProp = 1
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"class $localProp"<!>)
class OriginalClass<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"type param $localProp"<!>) T : @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"bound $localProp"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested bound $localProp"<!>) Int>> : @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"super type $localProp"<!>) A<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested super type $localProp"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested nested super type $localProp"<!>) Int>>() {
val prop = 0
@Anno("class $<!UNRESOLVED_REFERENCE!>prop<!>")
<!NESTED_CLASS_NOT_ALLOWED!>class InnerClass<!><@Anno("type param $<!UNRESOLVED_REFERENCE!>prop<!>") T : @Anno("bound $<!UNRESOLVED_REFERENCE!>prop<!>") List<@Anno("nested bound $<!UNRESOLVED_REFERENCE!>prop<!>") Int>> : @Anno("super type $<!UNRESOLVED_REFERENCE!>prop<!>") A<@Anno("nested super type $<!UNRESOLVED_REFERENCE!>prop<!>") List<@Anno("nested nested super type $<!UNRESOLVED_REFERENCE!>prop<!>") Int>>()
}
}
@@ -0,0 +1,15 @@
@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.TYPE_PARAMETER)
annotation class Anno(val position: String)
open class A<T>
fun foo() {
val localProp = 1
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"class $localProp"<!>)
class OriginalClass<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"type param $localProp"<!>) T : @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"bound $localProp"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested bound $localProp"<!>) Int>> : @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"super type $localProp"<!>) A<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested super type $localProp"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested nested super type $localProp"<!>) Int>>() {
val prop = 0
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"class $<!UNRESOLVED_REFERENCE!>prop<!>"<!>)
<!NESTED_CLASS_NOT_ALLOWED!>class InnerClass<!><@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"type param $<!UNRESOLVED_REFERENCE!>prop<!>"<!>) T : @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"bound $<!UNRESOLVED_REFERENCE!>prop<!>"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested bound $<!UNRESOLVED_REFERENCE!>prop<!>"<!>) Int>> : @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"super type $<!UNRESOLVED_REFERENCE!>prop<!>"<!>) A<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested super type $<!UNRESOLVED_REFERENCE!>prop<!>"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested nested super type $<!UNRESOLVED_REFERENCE!>prop<!>"<!>) Int>>()
}
}
@@ -0,0 +1,9 @@
annotation class Anno(val position: String)
fun foo() {
class OriginalClass {
val prop = 0
@Anno("dangling $<!UNRESOLVED_REFERENCE!>prop<!>")<!SYNTAX!><!>
}
}
@@ -0,0 +1,9 @@
annotation class Anno(val position: String)
fun foo() {
class OriginalClass {
val prop = 0
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"dangling $prop"<!>)<!SYNTAX!><!>
}
}
@@ -0,0 +1,11 @@
annotation class Anno(val position: String)
fun foo() {
class MyClass {
val prop = 0
<!WRONG_ANNOTATION_TARGET!>@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"init $prop"<!>)<!> init {
}
}
}
@@ -0,0 +1,11 @@
annotation class Anno(val position: String)
fun foo() {
class MyClass {
val prop = 0
<!WRONG_ANNOTATION_TARGET!>@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"init $prop"<!>)<!> init {
}
}
}
@@ -0,0 +1,11 @@
@Target(AnnotationTarget.TYPE, AnnotationTarget.TYPEALIAS, AnnotationTarget.TYPE_PARAMETER)
annotation class Anno(val position: String)
fun foo() {
class OriginalClass<T> {
val prop = 0
<!TOPLEVEL_TYPEALIASES_ONLY!>@Anno("alias $<!UNRESOLVED_REFERENCE!>prop<!>")
typealias NestedTypeAlias <@Anno("type param $<!UNRESOLVED_REFERENCE!>prop<!>") A : <!BOUND_ON_TYPE_ALIAS_PARAMETER_NOT_ALLOWED!>@Anno("bound $<!UNRESOLVED_REFERENCE!>prop<!>") Number<!>> = @Anno("type $<!UNRESOLVED_REFERENCE!>prop<!>") OriginalClass<A><!>
}
}
@@ -0,0 +1,11 @@
@Target(AnnotationTarget.TYPE, AnnotationTarget.TYPEALIAS, AnnotationTarget.TYPE_PARAMETER)
annotation class Anno(val position: String)
fun foo() {
class OriginalClass<T> {
val prop = 0
<!TOPLEVEL_TYPEALIASES_ONLY!>@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"alias $prop"<!>)
typealias NestedTypeAlias <@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"type param $prop"<!>) A : <!BOUND_ON_TYPE_ALIAS_PARAMETER_NOT_ALLOWED!>@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"bound $prop"<!>) Number<!>> = @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"type $prop"<!>) OriginalClass<A><!>
}
}
@@ -0,0 +1,15 @@
// WITH_STDLIB
@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.PROPERTY)
annotation class Anno(val position: String)
fun foo() {
class OriginalClass {
val prop = 0
@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"function $prop"<!>)
fun <@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"type param $prop"<!>) F : @Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"bound $prop"<!>) List<@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"nested bound $prop"<!>) List<@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"nested nested bound $prop"<!>) String>>> @receiver:Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"receiver annotation: $prop"<!>) @Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"receiver type $prop"<!>) Collection<@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"nested receiver type $prop"<!>) List<@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"nested nested receiver type $prop"<!>)String>>.explicitType(@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"parameter annotation $prop"<!>) param: @Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"parameter type $prop"<!>) ListIterator<@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"nested parameter type $prop"<!>) List<@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"nested nested parameter type $prop"<!>)String>>): @Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"explicitType return type $prop"<!>) List<@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"explicitType nested return type $prop"<!>) List<@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"explicitType nested nested return type $prop"<!>) Int>> = emptyList()
@Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"property $prop"<!>)
val <@Anno("type param $<!UNRESOLVED_REFERENCE!>prop<!>") F : @Anno("bound $<!UNRESOLVED_REFERENCE!>prop<!>") Number> @receiver:Anno("receiver annotation: $<!UNRESOLVED_REFERENCE!>prop<!>") @Anno("receiver type $<!UNRESOLVED_REFERENCE!>prop<!>") F.explicitType: @Anno(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>"bound $prop"<!>) Int get() = 1
}
}
@@ -0,0 +1,15 @@
// WITH_STDLIB
@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.PROPERTY)
annotation class Anno(val position: String)
fun foo() {
class OriginalClass {
val prop = 0
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"function $prop"<!>)
fun <@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"type param $prop"<!>) F : @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"bound $prop"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested bound $prop"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested nested bound $prop"<!>) String>>> @receiver:Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"receiver annotation: $prop"<!>) <!REPEATED_ANNOTATION!>@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"receiver type $prop"<!>)<!> Collection<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested receiver type $prop"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested nested receiver type $prop"<!>)String>>.explicitType(@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"parameter annotation $prop"<!>) param: @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"parameter type $prop"<!>) ListIterator<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested parameter type $prop"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"nested nested parameter type $prop"<!>)String>>): @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"explicitType return type $prop"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"explicitType nested return type $prop"<!>) List<@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"explicitType nested nested return type $prop"<!>) Int>> = emptyList()
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"property $prop"<!>)
val <@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"type param $prop"<!>) F : @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"bound $prop"<!>) Number> @receiver:Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"receiver annotation: $prop"<!>) <!REPEATED_ANNOTATION!>@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"receiver type $prop"<!>)<!> F.explicitType: @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"bound $prop"<!>) Int get() = 1
}
}