test/tools/javac/lambda/EffectivelyFinalTest.java

Wed, 27 Apr 2016 01:34:52 +0800

author
aoqi
date
Wed, 27 Apr 2016 01:34:52 +0800
changeset 0
959103a6100f
child 2525
2eb010b6cb22
permissions
-rw-r--r--

Initial load
http://hg.openjdk.java.net/jdk8u/jdk8u/langtools/
changeset: 2573:53ca196be1ae
tag: jdk8u25-b17

aoqi@0 1 /*
aoqi@0 2 * @test /nodynamiccopyright/
aoqi@0 3 * @bug 7175538 8003280
aoqi@0 4 * @summary Add lambda tests
aoqi@0 5 * Integrate effectively final check with DA/DU analysis
aoqi@0 6 * @compile/fail/ref=EffectivelyFinalTest01.out -XDrawDiagnostics EffectivelyFinalTest.java
aoqi@0 7 * @compile/fail/ref=EffectivelyFinalTest02.out -source 7 -Xlint:-options -XDrawDiagnostics EffectivelyFinalTest.java
aoqi@0 8 */
aoqi@0 9 class EffectivelyFinalTest {
aoqi@0 10
aoqi@0 11 void m1(int x) {
aoqi@0 12 int y = 1;
aoqi@0 13 new Object() { { System.out.println(x+y); } }; //ok - both x and y are EF
aoqi@0 14 }
aoqi@0 15
aoqi@0 16 void m2(int x) {
aoqi@0 17 int y;
aoqi@0 18 y = 1;
aoqi@0 19 new Object() { { System.out.println(x+y); } }; //ok - both x and y are EF
aoqi@0 20 }
aoqi@0 21
aoqi@0 22 void m3(int x, boolean cond) {
aoqi@0 23 int y;
aoqi@0 24 if (cond) y = 1;
aoqi@0 25 new Object() { { System.out.println(x+y); } }; //error - y not DA
aoqi@0 26 }
aoqi@0 27
aoqi@0 28 void m4(int x, boolean cond) {
aoqi@0 29 int y;
aoqi@0 30 if (cond) y = 1;
aoqi@0 31 else y = 2;
aoqi@0 32 new Object() { { System.out.println(x+y); } }; //ok - both x and y are EF
aoqi@0 33 }
aoqi@0 34
aoqi@0 35 void m5(int x, boolean cond) {
aoqi@0 36 int y;
aoqi@0 37 if (cond) y = 1;
aoqi@0 38 y = 2;
aoqi@0 39 new Object() { { System.out.println(x+y); } }; //error - y not EF
aoqi@0 40 }
aoqi@0 41
aoqi@0 42 void m6(int x) {
aoqi@0 43 new Object() { { System.out.println(x+1); } }; //error - x not EF
aoqi@0 44 x++; // Illegal: x is not effectively final.
aoqi@0 45 }
aoqi@0 46
aoqi@0 47 void m7(int x) {
aoqi@0 48 new Object() { { System.out.println(x=1); } }; //error - x not EF
aoqi@0 49 }
aoqi@0 50
aoqi@0 51 void m8() {
aoqi@0 52 int y;
aoqi@0 53 new Object() { { System.out.println(y=1); } }; //error - y not EF
aoqi@0 54 }
aoqi@0 55 }

mercurial