| /* |
| * @test /nodynamiccopyright/ |
| * @bug 8322882 8345953 |
| * @summary Disallow attempts to access a free variable proxy field from a static method |
| * @compile/fail/ref=LocalFreeVarStaticInstantiate.out -XDrawDiagnostics LocalFreeVarStaticInstantiate.java |
| */ |
| |
| class LocalFreeVarStaticInstantiate { |
| |
| // local class in method |
| static void foo(Object there) { |
| class Local { |
| { |
| there.hashCode(); |
| } |
| |
| static { |
| new Local(); // can't get there from here |
| } |
| |
| static Runnable r = () -> { |
| new Local(); // can't get there from here |
| }; |
| } |
| } |
| |
| // local class in lambda |
| static Runnable foo = () -> { |
| Object there = ""; |
| class Local { |
| { |
| there.hashCode(); |
| } |
| |
| static { |
| new Local(); // can't get there from here |
| } |
| |
| static Runnable r = () -> { |
| new Local(); // can't get there from here |
| }; |
| } |
| }; |
| |
| // local class in switch |
| static Object bar = switch (foo) { |
| case Runnable r -> { |
| Object there = ""; |
| class Local { |
| { |
| there.hashCode(); |
| } |
| |
| static { |
| new Local(); // can't get there from here |
| } |
| |
| static Runnable r = () -> { |
| new Local(); // can't get there from here |
| }; |
| } |
| yield r; |
| } |
| }; |
| |
| // local class in instance init |
| { |
| Object there = ""; |
| class Local { |
| { |
| there.hashCode(); |
| } |
| |
| static { |
| new Local(); // can't get there from here |
| } |
| |
| static Runnable r = () -> { |
| new Local(); // can't get there from here |
| }; |
| } |
| } |
| |
| // local class in static init |
| static { |
| Object there = ""; |
| class Local { |
| { |
| there.hashCode(); |
| } |
| |
| static { |
| new Local(); // can't get there from here |
| } |
| |
| static Runnable r = () -> { |
| new Local(); // can't get there from here |
| }; |
| } |
| } |
| } |