Add constructor parameter for compileTimeConstant (can be used in annotation)

This commit is contained in:
Natalia Ukhorskaya
2014-01-23 15:40:11 +04:00
parent fd3f852a93
commit 3f429116e5
37 changed files with 276 additions and 175 deletions
@@ -0,0 +1,6 @@
annotation class Ann(vararg val i: Boolean)
fun foo() {
val bool1 = true
[Ann(<!ANNOTATION_PARAMETER_MUST_BE_CONST!>bool1<!>)] val <!UNUSED_VARIABLE!>a<!> = bool1
}
@@ -0,0 +1,16 @@
// !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(
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>a1<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>a2<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>a3<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>a1 > a2<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>a1 == a2<!>
)] val b = 1
}
@@ -0,0 +1,25 @@
// FILE: Test.java
public class Test {
public static int i1 = 1;
public static final int i2 = 1;
public static final int i3 = i1;
public static final int i4 = i2;
public static int i5 = i1;
public static int i6 = i2;
public final int i7 = 1;
}
// FILE: a.kt
annotation class Ann(vararg val i: Int)
Ann(
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>Test.i1<!>,
Test.i2,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>Test.i3<!>,
Test.i4,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>Test.i5<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>Test.i6<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>Test().i7<!>
)
class A
@@ -0,0 +1,18 @@
annotation class Ann(vararg val i: Int)
Ann(
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>i1<!>,
i2,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>i3<!>,
i4,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>i5<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>i6<!>
)
class Test
var i1 = 1 // var
val i2 = 1 // val
val i3 = i1 // val with var in initializer
val i4 = i2 // val with val in initializer
var i5 = i1 // var with var in initializer
var i6 = i2 // var with val in initializer
@@ -0,0 +1,28 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
annotation class Ann(vararg val i: String)
val topLevel = "topLevel"
fun foo() {
val a1 = "a"
val a2 = "b"
val a3 = a1 + a2
val a4 = 1
val a5 = 1.0
[Ann(
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>a1<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>a2<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>a3<!>,
"$topLevel",
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>"$a1"<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>"$a1 $topLevel"<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>"$a4"<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>"$a5"<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>a1 + a2<!>,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>"a" + a2<!>,
"a" + topLevel,
<!ANNOTATION_PARAMETER_MUST_BE_CONST!>"a" + a4<!>
)] val b = 1
}
@@ -0,0 +1,14 @@
// FILE: Test.java
public class Test {
public static int i1 = Integer.MAX_VALUE;
public static final int i2 = Integer.MAX_VALUE;
public final int i3 = Integer.MAX_VALUE;
public int i4 = Integer.MAX_VALUE;
}
// FILE: A.kt
val a1: Int = Test.i1 + 1
val a2: Int = <!INTEGER_OVERFLOW!>Test.i2 + 1<!>
val a3: Int = <!INTEGER_OVERFLOW!>Test().i3 + 1<!>
val a4: Int = Test().i4 + 1