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