1/* 2 * @test /nodynamiccopyright/ 3 * @bug 8003280 4 * @summary Add lambda tests 5 * check that lambda cannot shadow variables from enclosing scope 6 * @compile/fail/ref=LambdaScope04.out -XDrawDiagnostics LambdaScope04.java 7 */ 8 9class LambdaScope04 { 10 11 interface SAM { 12 void m(Object o); 13 } 14 15 static SAM field1 = field1->{}; //ok 16 static SAM field2 = param->{ Object field2 = null; }; //ok 17 18 SAM field3 = field3->{}; //ok 19 SAM field4 = param->{ Object field4 = null; }; //ok 20 21 { 22 Object local = null; 23 SAM s1 = local->{}; //error 24 SAM s2 = param->{ Object local = null; }; //error 25 } 26 27 static { 28 Object local = null; 29 SAM s1 = local->{}; //error 30 SAM s2 = param->{ Object local = null; }; //error 31 SAM s3 = field1->{ Object field_2 = null; }; //ok 32 } 33 34 void testLocalInstance() { 35 Object local = null; 36 SAM s1 = local->{}; //error 37 SAM s2 = param->{ Object local = null; }; //error 38 SAM s3 = field1->{ Object field_2 = null; }; //ok 39 } 40 41 static void testLocalStatic() { 42 Object local = null; 43 SAM s1 = local->{}; //error 44 SAM s2 = param->{ Object local = null; }; //error 45 SAM s3 = field1->{ Object field_2 = null; }; //ok 46 } 47 48 void testParamInstance(Object local) { 49 SAM s1 = local->{}; //error 50 SAM s2 = param->{ Object local = null; }; //error 51 SAM s3 = field1->{ Object field_2 = null; }; //ok 52 } 53 54 static void testParamStatic(Object local) { 55 SAM s1 = local->{}; //error 56 SAM s2 = param->{ Object local = null; }; //error 57 SAM s3 = field1->{ Object field_2 = null; }; //ok 58 } 59 60 void testForInstance() { 61 for (int local = 0; local != 0 ; local++) { 62 SAM s1 = local->{}; //error 63 SAM s2 = param->{ Object local = null; }; //error 64 SAM s3 = field1->{ Object field_2 = null; }; //ok 65 } 66 } 67 68 static void testForStatic(Iterable<Object> elems) { 69 for (int local = 0; local != 0 ; local++) { 70 SAM s1 = local->{}; //error 71 SAM s2 = param->{ Object local = null; }; //error 72 SAM s3 = field1->{ Object field_2 = null; }; //ok 73 } 74 } 75 76 void testForEachInstance(Iterable<Object> elems) { 77 for (Object local : elems) { 78 SAM s1 = local->{}; //error 79 SAM s2 = param->{ Object local = null; }; //error 80 SAM s3 = field1->{ Object field_2 = null; }; //ok 81 } 82 } 83 84 static void testForEachStatic(Iterable<Object> elems) { 85 for (Object local : elems) { 86 SAM s1 = local->{}; //error 87 SAM s2 = param->{ Object local = null; }; //error 88 SAM s3 = field1->{ Object field_2 = null; }; //ok 89 } 90 } 91 92 void testCatchInstance() { 93 try { } catch (Throwable local) { 94 SAM s1 = local->{}; //error 95 SAM s2 = param->{ Object local = null; }; //error 96 SAM s3 = field1->{ Object field_2 = null; }; //ok 97 } 98 } 99 100 static void testCatchStatic(Iterable<Object> elems) { 101 try { } catch (Throwable local) { 102 SAM s1 = local->{}; //error 103 SAM s2 = param->{ Object local = null; }; //error 104 SAM s3 = field1->{ Object field_2 = null; }; //ok 105 } 106 } 107 108 void testTWRInstance(AutoCloseable res) { 109 try (AutoCloseable local = res) { 110 SAM s1 = local->{}; //error 111 SAM s2 = param->{ Object local = null; }; //error 112 SAM s3 = field1->{ Object field_2 = null; }; //ok 113 } finally { } 114 } 115 116 static void testTWRStatic(AutoCloseable res) { 117 try (AutoCloseable local = res) { 118 SAM s1 = local->{}; //error 119 SAM s2 = param->{ Object local = null; }; //error 120 SAM s3 = field1->{ Object field_2 = null; }; //ok 121 } finally { } 122 } 123 124 void testBlockLocalInstance() { 125 Object local = null; 126 { 127 SAM s1 = local->{}; //error 128 SAM s2 = param->{ Object local = null; }; //error 129 SAM s3 = field1->{ Object field_2 = null; }; //ok 130 } 131 } 132 133 static void testBlockLocalStatic() { 134 Object local = null; 135 { 136 SAM s1 = local->{}; //error 137 SAM s2 = param->{ Object local = null; }; //error 138 SAM s3 = field1->{ Object field_2 = null; }; //ok 139 } 140 } 141 142 void testSwitchLocalInstance(int i) { 143 switch (i) { 144 case 0: Object local = null; 145 default: { 146 SAM s1 = local->{}; //error 147 SAM s2 = param->{ Object local = null; }; //error 148 SAM s3 = field1->{ Object field_2 = null; }; //ok 149 } 150 } 151 } 152 153 static void testSwitchLocalStatic(int i) { 154 switch (i) { 155 case 0: Object local = null; 156 default: { 157 SAM s1 = local->{}; //error 158 SAM s2 = param->{ Object local = null; }; //error 159 SAM s3 = field1->{ Object field_2 = null; }; //ok 160 } 161 } 162 } 163} 164