| /* |
| * @test /nodynamiccopyright/ |
| * @bug 8003280 |
| * @summary Add lambda tests |
| * check that lambda cannot shadow variables from enclosing scope |
| * @compile/fail/ref=LambdaScope04.out -XDrawDiagnostics LambdaScope04.java |
| */ |
| |
| class LambdaScope04 { |
| |
| interface SAM { |
| void m(Object o); |
| } |
| |
| static SAM field1 = field1->{}; //ok |
| static SAM field2 = param->{ Object field2 = null; }; //ok |
| |
| SAM field3 = field3->{}; //ok |
| SAM field4 = param->{ Object field4 = null; }; //ok |
| |
| { |
| Object local = null; |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| } |
| |
| static { |
| Object local = null; |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| |
| void testLocalInstance() { |
| Object local = null; |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| |
| static void testLocalStatic() { |
| Object local = null; |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| |
| void testParamInstance(Object local) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| |
| static void testParamStatic(Object local) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| |
| void testForInstance() { |
| for (int local = 0; local != 0 ; local++) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| |
| static void testForStatic(Iterable<Object> elems) { |
| for (int local = 0; local != 0 ; local++) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| |
| void testForEachInstance(Iterable<Object> elems) { |
| for (Object local : elems) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| |
| static void testForEachStatic(Iterable<Object> elems) { |
| for (Object local : elems) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| |
| void testCatchInstance() { |
| try { } catch (Throwable local) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| |
| static void testCatchStatic(Iterable<Object> elems) { |
| try { } catch (Throwable local) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| |
| void testTWRInstance(AutoCloseable res) { |
| try (AutoCloseable local = res) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } finally { } |
| } |
| |
| static void testTWRStatic(AutoCloseable res) { |
| try (AutoCloseable local = res) { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } finally { } |
| } |
| |
| void testBlockLocalInstance() { |
| Object local = null; |
| { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| |
| static void testBlockLocalStatic() { |
| Object local = null; |
| { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| |
| void testSwitchLocalInstance(int i) { |
| switch (i) { |
| case 0: Object local = null; |
| default: { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| } |
| |
| static void testSwitchLocalStatic(int i) { |
| switch (i) { |
| case 0: Object local = null; |
| default: { |
| SAM s1 = local->{}; //error |
| SAM s2 = param->{ Object local = null; }; //error |
| SAM s3 = field1->{ Object field_2 = null; }; //ok |
| } |
| } |
| } |
| } |