| 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;",
|
| + "}"));
|
| }
|
| }
|
|
|