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