[FIR] Support several annotation argument diagnostics

This commit is contained in:
Лихолетов Михаил
2020-09-13 15:44:09 +03:00
committed by Mikhail Glukhikh
parent 0c13d3197c
commit cfc1ebb4be
50 changed files with 580 additions and 219 deletions
@@ -1,4 +0,0 @@
// Functions can be recursively annotated
annotation class ann(val x: Int)
@ann(bar()) fun foo() = 1
@ann(foo()) fun bar() = 2
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// Functions can be recursively annotated
annotation class ann(val x: Int)
@ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>bar()<!>) fun foo() = 1
@@ -1,3 +0,0 @@
// Function parameter CAN be recursively annotated
annotation class ann(val x: Int)
fun foo(@ann(foo(1)) x: Int): Int = x
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// Function parameter CAN be recursively annotated
annotation class ann(val x: Int)
fun foo(@ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>foo(1)<!>) x: Int): Int = x
@@ -1,3 +0,0 @@
// Functions can be recursively annotated
annotation class ann(val x: Int)
@ann(foo()) fun foo() = 1
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// Functions can be recursively annotated
annotation class ann(val x: Int)
@ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>foo()<!>) fun foo() = 1
@@ -1,5 +0,0 @@
// Properties can be recursively annotated
annotation class ann(val x: Int)
class My {
@ann(x) val x: Int = 1
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// Properties can be recursively annotated
annotation class ann(val x: Int)
class My {
@@ -2,5 +2,5 @@ annotation class Ann(vararg val i: Boolean)
fun foo() {
val bool1 = true
@Ann(bool1) val a = bool1
@Ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>bool1<!>) val a = bool1
}
@@ -1,16 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
annotation class Ann(vararg val i: Boolean)
fun foo() {
val a1 = 1 > 2
val a2 = 1 == 2
val a3 = a1 == a2
val a4 = a1 > a2
@Ann(
a1,
a2,
a3,
a1 > a2,
a1 == a2
) val b = 1
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE
annotation class Ann(vararg val i: Boolean)
fun foo() {
@@ -2,7 +2,7 @@
annotation class AnnE(val i: MyEnum)
@AnnE(e)
@AnnE(<!ANNOTATION_ARGUMENT_MUST_BE_ENUM_CONST!>e<!>)
class Test
val e: MyEnum = MyEnum.A
@@ -2,7 +2,7 @@
annotation class AnnE(val i: MyEnum)
@AnnE(e)
@AnnE(<!ANNOTATION_ARGUMENT_MUST_BE_ENUM_CONST!>e<!>)
class Test
val e: MyEnum = MyEnum.A
@@ -14,12 +14,12 @@ public class Test {
annotation class Ann(vararg val i: Int)
@Ann(
Test.i1,
<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>Test.i1<!>,
Test.i2,
Test.i3,
Test.i4,
Test.i5,
Test.i6,
Test().i7
<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>Test.i5<!>,
<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>Test.i6<!>,
<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>Test().i7<!>
)
class A
@@ -1,18 +0,0 @@
annotation class Ann(vararg val i: Int)
@Ann(
i1,
i2,
i3,
i4,
i5,
i6
)
class Test
var i1 = 1 // var
const val i2 = 1 // val
val i3 = i1 // val with var in initializer
const val i4 = i2 // val with val in initializer
var i5 = i1 // var with var in initializer
var i6 = i2 // var with val in initializer
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
annotation class Ann(vararg val i: Int)
@Ann(
@@ -1,18 +0,0 @@
annotation class AnnE(val i: String)
enum class MyEnum {
A
}
@AnnE("1" + MyEnum.A)
class Test
@AnnE("1" + MyEnum::class)
class Test2
@AnnE("1" + AnnE("23"))
class Test3
@AnnE("1" + arrayOf("23", "34"))
class Test4
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
annotation class AnnE(val i: String)
enum class MyEnum {
@@ -1,28 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
annotation class Ann(vararg val i: String)
const val topLevel = "topLevel"
fun foo() {
val a1 = "a"
val a2 = "b"
val a3 = a1 + a2
val a4 = 1
val a5 = 1.0
@Ann(
a1,
a2,
a3,
"$topLevel",
"$a1",
"$a1 $topLevel",
"$a4",
"$a5",
a1 + a2,
"a" + a2,
"a" + topLevel,
"a" + a4
) val b = 1
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE
annotation class Ann(vararg val i: String)