/* * @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 } } } }