| /* | |
| * @test /nodynamiccopyright/ | |
| * @bug 8345944 | |
| * @summary JEP 492: extending local class in a different static context should not be allowed | |
| * @compile/fail/ref=LocalFreeVarStaticSuper.out -XDrawDiagnostics LocalFreeVarStaticSuper.java | |
| */ | |
| class LocalFreeVarStaticSuper { | |
| // local class in method | |
| static void foo(Object there) { | |
| class Local { | |
| { | |
| there.hashCode(); | |
| } | |
| static { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| } | |
| static Runnable r = () -> { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| }; | |
| } | |
| } | |
| // local class in lambda | |
| static Runnable foo = () -> { | |
| Object there = ""; | |
| class Local { | |
| { | |
| there.hashCode(); | |
| } | |
| static { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| } | |
| static Runnable r = () -> { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| }; | |
| } | |
| }; | |
| // local class in switch | |
| static Object bar = switch (foo) { | |
| case Runnable r -> { | |
| Object there = ""; | |
| class Local { | |
| { | |
| there.hashCode(); | |
| } | |
| static { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| } | |
| static Runnable r = () -> { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| }; | |
| } | |
| yield r; | |
| } | |
| }; | |
| // local class in instance init | |
| { | |
| Object there = ""; | |
| class Local { | |
| { | |
| there.hashCode(); | |
| } | |
| static { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| } | |
| static Runnable r = () -> { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| }; | |
| } | |
| } | |
| // local class in static init | |
| static { | |
| Object there = ""; | |
| class Local { | |
| { | |
| there.hashCode(); | |
| } | |
| static { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| } | |
| static Runnable r = () -> { | |
| class Sub1 extends Local { } | |
| class Sub2 extends Local { | |
| Sub2() { } | |
| } | |
| class Sub3 extends Local { | |
| Sub3() { super(); } | |
| } | |
| }; | |
| } | |
| } | |
| } |