[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
@@ -0,0 +1,9 @@
annotation class Ann(val x: Int, val y: String, val z: String = "z")
@Ann(y = "y", x = 10)
class A
annotation class AnnVarargs(val x: Int, vararg val y: String, val z: Int)
<!INAPPLICABLE_CANDIDATE!>@AnnVarargs(1, "a", "b", "c", 2)<!>
class B
@@ -0,0 +1,43 @@
FILE: argumentsOfAnnotations.kt
public final annotation class Ann : R|kotlin/Annotation| {
public constructor(x: R|kotlin/Int|, y: R|kotlin/String|, z: R|kotlin/String| = String(z)): R|Ann| {
super<R|kotlin/Any|>()
}
public final val x: R|kotlin/Int| = R|<local>/x|
public get(): R|kotlin/Int|
public final val y: R|kotlin/String| = R|<local>/y|
public get(): R|kotlin/String|
public final val z: R|kotlin/String| = R|<local>/z|
public get(): R|kotlin/String|
}
@R|Ann|(y = String(y), x = Int(10)) public final class A : R|kotlin/Any| {
public constructor(): R|A| {
super<R|kotlin/Any|>()
}
}
public final annotation class AnnVarargs : R|kotlin/Annotation| {
public constructor(x: R|kotlin/Int|, vararg y: R|kotlin/Array<out kotlin/String>|, z: R|kotlin/Int|): R|AnnVarargs| {
super<R|kotlin/Any|>()
}
public final val x: R|kotlin/Int| = R|<local>/x|
public get(): R|kotlin/Int|
public final val y: R|kotlin/Array<out kotlin/String>| = R|<local>/y|
public get(): R|kotlin/Array<out kotlin/String>|
public final val z: R|kotlin/Int| = R|<local>/z|
public get(): R|kotlin/Int|
}
@R|AnnVarargs|(Int(1), String(a), String(b), String(c), Int(2)) public final class B : R|kotlin/Any| {
public constructor(): R|B| {
super<R|kotlin/Any|>()
}
}
@@ -0,0 +1,15 @@
// FILE: Ann.java
public @interface Ann {
String s();
int x();
int y() default 1;
}
// FILE: main.kt
@Ann(x = 10, s = "")
<!INAPPLICABLE_CANDIDATE!>@Ann(10, "")<!>
@Ann(x = 10, s = "", y = 10)
class A
@@ -0,0 +1,7 @@
FILE: main.kt
@R|Ann|(x = Int(10), s = String()) @R|Ann|(Int(10), String()) @R|Ann|(x = Int(10), s = String(), y = Int(10)) public final class A : R|kotlin/Any| {
public constructor(): R|A| {
super<R|kotlin/Any|>()
}
}
@@ -43,6 +43,6 @@ annotation class Ann(val x: Byte)
@Ann(10)
fun test_6() {
@Ann(300)
<!INAPPLICABLE_CANDIDATE!>@Ann(300)<!>
val x = ""
}
@@ -61,6 +61,6 @@ FILE: integerLiteralTypes.kt
public get(): R|kotlin/Byte|
}
@R|Ann|(Int(10)) public final fun test_6(): R|kotlin/Unit| {
@R|Ann|(Byte(10)) public final fun test_6(): R|kotlin/Unit| {
@R|Ann|(Int(300)) lval x: R|kotlin/String| = String()
}
@@ -0,0 +1,16 @@
// FILE: Ann.java
public @interface Ann {
String[] value();
}
// FILE: main.kt
@Ann("a", "b")
fun test_1() {}
<!INAPPLICABLE_CANDIDATE!>@Ann(arrayOf("a", "b"))<!>
fun test_2() {}
@Ann(*arrayOf("a", "b"))
fun test_3() {}
@@ -0,0 +1,7 @@
FILE: main.kt
@R|Ann|(vararg(String(a), String(b))) public final fun test_1(): R|kotlin/Unit| {
}
@R|Ann|(R|kotlin/arrayOf|<R|kotlin/String|>(vararg(String(a), String(b)))) public final fun test_2(): R|kotlin/Unit| {
}
@R|Ann|(vararg(*R|kotlin/arrayOf|<R|kotlin/String|>(vararg(String(a), String(b))))) public final fun test_3(): R|kotlin/Unit| {
}