Index: compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java |
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java b/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java |
index eada1dc43ca7240265f9f00b1564682e25a171f0..00f462c0c001f8f5a8a991e9354f0df8a5e074d2 100644 |
--- a/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java |
+++ b/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java |
@@ -6,32 +6,18 @@ package com.google.dart.compiler.resolver; |
import com.google.common.base.Joiner; |
+ |
+ |
/** |
* Tests the code in {@link CompileTimeConstantVisitor} |
*/ |
-public class CompileTimeConstantTest extends ResolverTestCase{ |
- |
- // TODO(zundel) This test should pass, but the compiler doesn't currently |
- // recursively resolve types in CompileTimeConstVisitor |
- public void disabledTestForwardLookupExpressions() { |
- resolveAndTest(Joiner.on("\n").join( |
- "class Object {}", |
- "class A {", |
- " static final value1 = value2 * 2;", |
- " static final value2 = value3 * 4;", |
- " static final value3 = 8;", |
- "}")); |
- } |
+public class CompileTimeConstantTest extends ResolverTestCase { |
- public void testConstantBinaryExpression() { |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantBinaryExpression1() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class A {", |
" static final INT_LIT = 5;", |
- " static final INT_LIT_REF = INT_LIT;", |
- " static final DOUBLE_LIT = 1.5;", |
- " static final BOOL_LIT = true;", |
- " static final STRING_LIT = \"Hello\";", |
" static final BOP1_0 = INT_LIT + 1;", |
" static final BOP1_1 = 1 + INT_LIT;", |
" static final BOP1_2 = INT_LIT - 1;", |
@@ -40,6 +26,87 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final BOP1_5 = 1 * INT_LIT;", |
" static final BOP1_6 = INT_LIT / 1;", |
" static final BOP1_7 = 1 / INT_LIT;", |
+ "}")); |
+ } |
+ |
+ public void testConstantBinaryExpression10() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final INT_LIT = 5;", |
+ " static final INT_LIT_REF = INT_LIT;", |
+ " static final DOUBLE_LIT = 1.5;", |
+ " static final BOOL_LIT = true;", |
+ " // Multiple binary expresions", |
+ " static final BOP1 = 1 * INT_LIT / 3 + INT_LIT + 9;", |
+ " // Parenthized expression", |
+ " static final BOP2 = ( 1 > 2 );", |
+ " static final BOP3 = (1 * 2) + 3;", |
+ " static final BOP4 = 3 + (1 * 2);", |
+ "}")); |
+ } |
+ |
+ public void testConstantBinaryExpression11() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final INT_LIT = 5;", |
+ " static final DOUBLE_LIT = 1.5;", |
+ " const A();", |
+ " static final OBJECT_LIT = const A();", |
+ " // Multiple binary expresions", |
+ " static final BOP1_0 = 0 + 1 + OBJECT_LIT;", |
+ " static final BOP1_1 = 0 + OBJECT_LIT + 1;", |
+ " static final BOP1_2 = OBJECT_LIT + 3 + 9;", |
+ "}"), |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER); |
+ } |
+ |
+ public void testConstantBinaryExpression12() { |
+ // Multiple binary expressions |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final INT_LIT = 5;", |
+ " static final DOUBLE_LIT = 1.5;", |
+ " const A();", |
+ " static final OBJECT_LIT = new A();", |
+ " static final PP0 = 0 - (1 + OBJECT_LIT);", |
+ " static final PP1 = 0 + (OBJECT_LIT + 1);", |
+ " static final PP2 = (OBJECT_LIT + 3) + 9;", |
+ " static final PP3 = (OBJECT_LIT) + 3 + 9;", |
+ " static final PP4 = (OBJECT_LIT + 3 + 9);", |
+ " static final PP5 = OBJECT_LIT + (3 + 9);", |
+ "}"), |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER); |
+ } |
+ |
+ public void testConstantBinaryExpression2() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final DOUBLE_LIT = 1.5;", |
" static final BOP2_0 = DOUBLE_LIT + 1.5;", |
" static final BOP2_1 = 1.5 + DOUBLE_LIT;", |
" static final BOP2_2 = DOUBLE_LIT - 1.5;", |
@@ -48,10 +115,25 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final BOP2_5 = 1.5 * DOUBLE_LIT;", |
" static final BOP2_6 = DOUBLE_LIT / 1.5;", |
" static final BOP2_7 = 1.5 / DOUBLE_LIT;", |
+ "}")); |
+ } |
+ |
+ public void testConstantBinaryExpression3() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final INT_LIT = 5;", |
" static final BOP3_0 = 2 < INT_LIT;", |
" static final BOP3_1 = INT_LIT < 2;", |
" static final BOP3_2 = 2 > INT_LIT;", |
" static final BOP3_3 = INT_LIT > 2;", |
+ "}")); |
+ |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final INT_LIT = 5;", |
+ " static final DOUBLE_LIT = 1.5;", |
" static final BOP3_4 = 2 < DOUBLE_LIT;", |
" static final BOP3_5 = DOUBLE_LIT < 2;", |
" static final BOP3_6 = 2 > DOUBLE_LIT;", |
@@ -64,6 +146,18 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final BOP3_13 = DOUBLE_LIT <= 2.0;", |
" static final BOP3_14 = 2.0 >= DOUBLE_LIT;", |
" static final BOP3_15 = DOUBLE_LIT >= 2;", |
+ "}")); |
+ } |
+ |
+ public void testConstantBinaryExpression4() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final INT_LIT = 5;", |
+ " static final INT_LIT_REF = INT_LIT;", |
+ " static final DOUBLE_LIT = 1.5;", |
+ " static final BOOL_LIT = true;", |
+ " static final STRING_LIT = \"Hello\";", |
" static final BOP4_0 = 5 % INT_LIT;", |
" static final BOP4_1 = INT_LIT % 5;", |
" static final BOP4_2 = 5.0 % DOUBLE_LIT;", |
@@ -81,8 +175,10 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final BOP10 = INT_LIT === INT_LIT_REF;", |
" static final BOP11 = BOOL_LIT !== true;", |
"}")); |
+ } |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantBinaryExpression5() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class int {}", |
"class A {", |
@@ -96,8 +192,10 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER); |
+ } |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantBinaryExpression6() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class int {}", |
"class String {}", |
@@ -108,19 +206,19 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
"class B {", |
" static final BOP1 = 2 < A.foo();", |
" static final BOP2 = A.foo() < 2;", |
- " static final BOP3 = 2 < A.bar();", |
- " static final BOP4 = A.bar() < 2;", |
+ " static final BOP3 = A.foo();", |
+ " static final BOP4 = A.bar();", |
"}"), |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER); |
+ ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION); |
+ } |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantBinaryExpression7() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class int {}", |
"class double {}", |
@@ -131,8 +229,10 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
"}"), |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_INT, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_INT); |
+ } |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantBinaryExpression8() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class bool {}", |
"class int {}", |
@@ -153,8 +253,10 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_BOOLEAN, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_BOOLEAN); |
+ } |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantBinaryExpression9() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class bool {}", |
"class int {}", |
@@ -181,73 +283,11 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_STRING_NUMBER_BOOL, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_STRING_NUMBER_BOOL, |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_STRING_NUMBER_BOOL); |
- |
- resolveAndTest(Joiner.on("\n").join( |
- "class Object {}", |
- "class A {", |
- " static final INT_LIT = 5;", |
- " static final INT_LIT_REF = INT_LIT;", |
- " static final DOUBLE_LIT = 1.5;", |
- " static final BOOL_LIT = true;", |
- " // Multiple binary expresions", |
- " static final BOP1 = 1 * INT_LIT / 3 + INT_LIT + 9;", |
- " // Parenthized expression", |
- " static final BOP2 = ( 1 > 2 );", |
- " static final BOP3 = (1 * 2) + 3;", |
- " static final BOP4 = 3 + (1 * 2);", |
- "}")); |
- |
- // Negative Tests |
- resolveAndTest(Joiner.on("\n").join( |
- "class Object {}", |
- "class A {", |
- " static final INT_LIT = 5;", |
- " static final DOUBLE_LIT = 1.5;", |
- " const A();", |
- " static final OBJECT_LIT = const A();", |
- " // Multiple binary expresions", |
- " static final BOP1_0 = 0 + 1 + OBJECT_LIT;", |
- " static final BOP1_1 = 0 + OBJECT_LIT + 1;", |
- " static final BOP1_2 = OBJECT_LIT + 3 + 9;", |
- "}"), |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER); |
- |
- resolveAndTest(Joiner.on("\n").join( |
- "class Object {}", |
- "class A {", |
- " static final INT_LIT = 5;", |
- " static final DOUBLE_LIT = 1.5;", |
- " const A();", |
- " static final OBJECT_LIT = new A();", |
- " // Multiple binary expresions", |
- " static final PP0 = 0 - (1 + OBJECT_LIT);", |
- " static final PP1 = 0 + (OBJECT_LIT + 1);", |
- " static final PP2 = (OBJECT_LIT + 3) + 9;", |
- " static final PP3 = (OBJECT_LIT) + 3 + 9;", |
- " static final PP4 = (OBJECT_LIT + 3 + 9);", |
- " static final PP5 = OBJECT_LIT + (3 + 9);", |
- "}"), |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER, |
- ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_NUMBER); |
} |
- public void testConstantConstructorAssign() { |
+ public void testConstantConstructorAssign1() { |
- resolveAndTest(Joiner.on("\n").join( |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class A {", |
" const A();", |
@@ -255,9 +295,11 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
"class B {", |
" static final a = const A();", // Constant constructor |
"}")); |
+ } |
+ public void testConstantConstructorAssign2() { |
// Negative tests |
- resolveAndTest(Joiner.on("\n").join( |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class A {", |
" const A();", |
@@ -266,9 +308,8 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION); |
} |
- public void testConstantLiteralAssign() { |
- |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantLiteralAssign1() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class A {", |
" static final b = true;", |
@@ -278,9 +319,10 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final h = 0xf;", // hex literal |
" static final n = null;", // null |
"}")); |
+ } |
- // Negative tests |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantLiteralAssign2() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class A {", |
" foo() { return \"Eve\";}", |
@@ -290,8 +332,8 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION); |
} |
- public void testConstantTypedLiteralAssign() { |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantTypedLiteralAssign1() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class List<T> {}", |
"class Map<K,V> {}", |
@@ -300,9 +342,10 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final map = const { \"1\": \"one\", \"2\": \"banana\" };", // map literal |
" static final val = aList[2];", |
"}")); |
+ } |
- // Negative tests, on literals that are not compile time constants. |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantTypedLiteralAssign2() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class List<T> {}", |
"class A {", |
@@ -310,8 +353,10 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final aList= [1, 2, 3];", |
"}"), |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION); |
+ } |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantTypedLiteralAssign3() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class List<T> {}", |
"class A {", |
@@ -320,8 +365,10 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final aList = const [foo(), 2, 3];", |
"}"), |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION); |
+ } |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantTypedLiteralAssign4() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class Map<K,V> {}", |
"class A {", |
@@ -329,8 +376,9 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final aMap = { \"1\": \"one\", \"2\": \"banana\" };", |
"}"), |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION); |
- |
- resolveAndTest(Joiner.on("\n").join( |
+ } |
+ public void testConstantTypedLiteralAssign5() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class String {}", |
"class Map<K,V> {}", |
@@ -345,22 +393,38 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION); |
} |
- public void testConstantUnaryExpression() { |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantUnaryExpression1() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class A {", |
- " // Unary expression", |
" static final BOOL_LIT = true;", |
- " static final INT_LIT = 123;", |
- " static final DOUBLE_LIT = 12.3;", |
" static final UOP1_0 = !BOOL_LIT;", |
" static final UOP1_1 = BOOL_LIT || !true;", |
" static final UOP1_2 = !BOOL_LIT || true;", |
" static final UOP1_3 = !(BOOL_LIT && true);", |
+ "}")); |
+ } |
+ |
+ public void testConstantUnaryExpression2() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final BOOL_LIT = true;", |
+ " static final INT_LIT = 123;", |
+ " static final DOUBLE_LIT = 12.3;", |
" static final UOP2_0 = ~0xf0;", |
" static final UOP2_1 = ~INT_LIT;", |
" static final UOP2_2 = ~INT_LIT & 123;", |
" static final UOP2_3 = ~(INT_LIT | 0xff);", |
+ "}")); |
+ } |
+ |
+ public void testConstantUnaryExpression3() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final INT_LIT = 123;", |
+ " static final DOUBLE_LIT = 12.3;", |
" static final UOP3_0 = -0xf0;", |
" static final UOP3_1 = -INT_LIT;", |
" static final UOP3_2 = -INT_LIT + 123;", |
@@ -370,8 +434,10 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final UOP3_6 = -DOUBLE_LIT + 123;", |
" static final UOP3_7 = -(DOUBLE_LIT * 0xff);", |
"}")); |
+ } |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantUnaryExpression4() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class int {}", |
"class A {", |
@@ -391,8 +457,8 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION_BOOLEAN); |
} |
- public void testConstantVariableAssign() { |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantVariableAssign1() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class A {", |
" static final a = 1;", |
@@ -402,21 +468,35 @@ public class CompileTimeConstantTest extends ResolverTestCase{ |
" static final j = i;", // variable that is a compile-time constant |
" static final k = A.a;", // variable that is a compile-time constant |
"}")); |
+ } |
- // Negative tests |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantVariableAssign2() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class A {", |
" static foo() {return 1;}", |
" static final i = foo();", // Error: not a constant integer |
"}"), |
ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION); |
+ } |
- resolveAndTest(Joiner.on("\n").join( |
+ public void testConstantVariableAssign3() { |
+ // Part of the regular resolver pass |
+ resolveAndTest(Joiner.on("\n").join( |
+ "class Object {}", |
+ "class A {", |
+ " static final foo;", |
+ "}"), |
+ ResolverErrorCode.STATIC_FINAL_REQUIRES_VALUE); |
+ } |
+ |
+ public void testForwardLookupExpressions() { |
+ resolveAndTestCtConst(Joiner.on("\n").join( |
"class Object {}", |
"class A {", |
- " static final foo;", |
- "}"), |
- ResolverErrorCode.STATIC_FINAL_REQUIRES_VALUE); |
+ " static final value1 = value2 * 2;", |
+ " static final value2 = value3 * 4;", |
+ " static final value3 = 8;", |
+ "}")); |
} |
} |