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