[FIR] Resolve annotations as calls

This commit is contained in:
Dmitriy Novozhilov
2020-07-23 17:47:38 +03:00
committed by Mikhail Glukhikh
parent bc1fa8ed7f
commit 721b9b4d8c
99 changed files with 529 additions and 232 deletions
@@ -1,6 +1,6 @@
// !WITH_NEW_INFERENCE
import java.util.ArrayList
@ArrayList<Int>(1, 1) fun b() {}
@<!UNRESOLVED_REFERENCE!>Xoo<!>(<!UNRESOLVED_REFERENCE!>x<!>) fun c() {}
@java.lang.Deprecated(x) fun a() {}
<!UNRESOLVED_REFERENCE!>@ArrayList<Int>(1, 1)<!> fun b() {}
<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>Xoo<!>(<!UNRESOLVED_REFERENCE!>x<!>)<!> fun c() {}
<!INAPPLICABLE_CANDIDATE!>@java.lang.Deprecated(<!UNRESOLVED_REFERENCE!>x<!>)<!> fun a() {}
@@ -1,10 +1,10 @@
annotation class A1
annotation class A2(val some: Int = 12)
class TopLevelClass<@A1 @A2(3) @A2 @A1(12) @A2("Test") T> {
class InnerClass<@A1 @A2(3) @A2 @A1(12) @A2("Test") T> {
class TopLevelClass<@A1 @A2(3) @A2 <!INAPPLICABLE_CANDIDATE!>@A1(12)<!> <!INAPPLICABLE_CANDIDATE!>@A2("Test")<!> T> {
class InnerClass<@A1 @A2(3) @A2 <!INAPPLICABLE_CANDIDATE!>@A1(12)<!> <!INAPPLICABLE_CANDIDATE!>@A2("Test")<!> T> {
fun test() {
class InFun<@A1 @A2(3) @A2 @A1(12) @A2("Test") T>
class InFun<@A1 @A2(3) @A2 <!INAPPLICABLE_CANDIDATE!>@A1(12)<!> <!INAPPLICABLE_CANDIDATE!>@A2("Test")<!> T>
}
}
}
}
@@ -1,12 +1,12 @@
annotation class A1
annotation class A2(val some: Int = 12)
fun <@A1 @A2(3) @A2 @A1(12) @A2("Test") T> topFun() = 12
fun <@A1 @A2(3) @A2 <!INAPPLICABLE_CANDIDATE!>@A1(12)<!> <!INAPPLICABLE_CANDIDATE!>@A2("Test")<!> T> topFun() = 12
class SomeClass {
fun <@A1 @A2(3) @A2 @A1(12) @A2("Test") T> method() = 12
fun <@A1 @A2(3) @A2 <!INAPPLICABLE_CANDIDATE!>@A1(12)<!> <!INAPPLICABLE_CANDIDATE!>@A2("Test")<!> T> method() = 12
fun foo() {
fun <@A1 @A2(3) @A2 @A1(12) @A2("Test") T> innerFun() = 12
fun <@A1 @A2(3) @A2 <!INAPPLICABLE_CANDIDATE!>@A1(12)<!> <!INAPPLICABLE_CANDIDATE!>@A2("Test")<!> T> innerFun() = 12
}
}
}
@@ -6,7 +6,7 @@ annotation class annotation
package test
@test.annotation class annotation
<!UNRESOLVED_REFERENCE!>@test.annotation<!> class annotation
// FILE: other/c.kt
@@ -14,6 +14,6 @@ package other
annotation class My
@test.annotation class Your
<!UNRESOLVED_REFERENCE!>@test.annotation<!> class Your
@My class Our
@My class Our
@@ -3,12 +3,12 @@
annotation class A1
annotation class A2(val some: Int = 12)
val <@A1 @A2(3) @A2 @A1(12) @A2("Test") T> T.topProp: Int get() = 12
val <@A1 @A2(3) @A2 <!INAPPLICABLE_CANDIDATE!>@A1(12)<!> <!INAPPLICABLE_CANDIDATE!>@A2("Test")<!> T> T.topProp: Int get() = 12
class SomeClass {
val <@A1 @A2(3) @A2 @A1(12) @A2("Test") T> T.field: Int get() = 12
val <@A1 @A2(3) @A2 <!INAPPLICABLE_CANDIDATE!>@A1(12)<!> <!INAPPLICABLE_CANDIDATE!>@A2("Test")<!> T> T.field: Int get() = 12
fun foo() {
val <@A1 @A2(3) @A2 @A1(12) @A2("Test") T> localVal = 12
}
}
}
@@ -3,7 +3,7 @@ annotation class my1(val i : Int)
annotation class my2(val i : Int = 0)
@my fun foo() {}
@my1 fun foo2() {}
<!INAPPLICABLE_CANDIDATE!>@my1<!> fun foo2() {}
@my1(2) fun foo3() {}
@my2() fun foo4() {}
@my2 fun foo41() {}
@@ -1,3 +1,3 @@
class Foo
@Foo class Bar
<!UNRESOLVED_REFERENCE!>@Foo<!> class Bar
@@ -1,2 +1,2 @@
// Class constructor parameter CAN be recursively annotated
class RecursivelyAnnotated(@RecursivelyAnnotated(1) val x: Int)
class RecursivelyAnnotated(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>@RecursivelyAnnotated(1)<!> val x: Int)
@@ -1,8 +1,8 @@
package test
@BadAnnotation(1)
<!INAPPLICABLE_CANDIDATE!>@BadAnnotation(1)<!>
object SomeObject
val some = SomeObject
annotation class BadAnnotation(val s: String)
annotation class BadAnnotation(val s: String)
@@ -11,5 +11,5 @@ enum class MyEnum {
A
}
@AnnE(Test())
class Test2
<!INAPPLICABLE_CANDIDATE!>@AnnE(Test())<!>
class Test2
@@ -11,5 +11,5 @@ enum class MyEnum {
A
}
@AnnE(Test())
class Test2
<!INAPPLICABLE_CANDIDATE!>@AnnE(Test())<!>
class Test2
@@ -13,7 +13,7 @@ fun foo() {
return@l1 103
}
bar @Ann("") {
bar <!INAPPLICABLE_CANDIDATE!>@Ann("")<!> {
104
}
}
@@ -8,7 +8,7 @@ annotation class Ann(val x: Int = 6)
@Ann(1) @Ann(2) @Ann(3) private class A @Ann constructor() {
@Ann(x = 5) fun foo() {
1 + @Ann(1) 1 * @Ann("") 6
1 + @Ann(1) 1 * <!INAPPLICABLE_CANDIDATE!>@Ann("")<!> 6
@Ann fun local() {}
}
@@ -2,9 +2,9 @@
import java.lang.annotation.Repeatable
@java.lang.annotation.Repeatable(Annotations::class) annotation class RepAnn
<!INAPPLICABLE_CANDIDATE!>@java.lang.annotation.Repeatable(Annotations::class)<!> annotation class RepAnn
@Repeatable(OtherAnnotations::class) annotation class OtherAnn
<!INAPPLICABLE_CANDIDATE!>@Repeatable(OtherAnnotations::class)<!> annotation class OtherAnn
annotation class Annotations(vararg val value: RepAnn)
@@ -3,36 +3,36 @@ package test
import kotlin.internal.RequireKotlin
@RequireKotlin("")
<!HIDDEN!>@RequireKotlin("")<!>
fun f01() {}
@RequireKotlin("x")
<!HIDDEN!>@RequireKotlin("x")<!>
fun f02() {}
@RequireKotlin("1")
<!HIDDEN!>@RequireKotlin("1")<!>
fun f03() {}
@RequireKotlin("1.0-beta")
<!HIDDEN!>@RequireKotlin("1.0-beta")<!>
fun f04() {}
@RequireKotlin("1.1.0-dev-1111")
<!HIDDEN!>@RequireKotlin("1.1.0-dev-1111")<!>
fun f05() {}
@RequireKotlin("1.5.3.7")
<!HIDDEN!>@RequireKotlin("1.5.3.7")<!>
fun f06() {}
@RequireKotlin("1..0")
<!HIDDEN!>@RequireKotlin("1..0")<!>
fun f07() {}
@RequireKotlin(" 1.0")
<!HIDDEN!>@RequireKotlin(" 1.0")<!>
fun f08() {}
@RequireKotlin("1.1")
<!HIDDEN!>@RequireKotlin("1.1")<!>
fun ok1() {}
@RequireKotlin("1.1.0")
<!HIDDEN!>@RequireKotlin("1.1.0")<!>
fun ok2() {}
@RequireKotlin("0.0.0")
<!HIDDEN!>@RequireKotlin("0.0.0")<!>
fun ok3() {}
@@ -1,10 +1,10 @@
// !WITH_NEW_INFERENCE
fun foo(@<!UNRESOLVED_REFERENCE!>varargs<!> f : Int) {}
fun foo(<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>varargs<!> f : Int) {}
var bar : Int = 1
set(@<!UNRESOLVED_REFERENCE!>varargs<!> v) {}
set(<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>varargs<!> v) {}
val x : (Int) -> Int = {@<!UNRESOLVED_REFERENCE!>varargs<!> x <!SYNTAX!>: Int -> x<!>}
val x : (Int) -> Int = {<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>varargs<!> x <!SYNTAX!>: Int -> x<!>}
class Hello(@<!UNRESOLVED_REFERENCE!>varargs<!> args: Any) {
}
class Hello(<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>varargs<!> args: Any) {
}
@@ -1,9 +1,9 @@
class Foo<T> {
@T
<!UNRESOLVED_REFERENCE!>@T<!>
fun foo() = 0
}
class Bar<T : Annotation> {
@T
<!UNRESOLVED_REFERENCE!>@T<!>
fun foo() = 0
}
}
@@ -1,5 +1,5 @@
@<!UNRESOLVED_REFERENCE!>Ann<!> class A
@<!UNRESOLVED_REFERENCE!>Ann<!> class B
@<!UNRESOLVED_REFERENCE!>Ann<!>(1) class C
@<!UNRESOLVED_REFERENCE!>kotlin.Ann<!>(1) class D
@<!UNRESOLVED_REFERENCE!>kotlin.annotation.Ann<!>(1) class E
<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>Ann<!> class A
<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>Ann<!> class B
<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>Ann<!>(1)<!> class C
<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>kotlin.Ann<!>(1)<!> class D
<!UNRESOLVED_REFERENCE!>@<!UNRESOLVED_REFERENCE!>kotlin.annotation.Ann<!>(1)<!> class E