class ContextualKeywordsTests // See JLS, ยง3.9 Keywords. { private ContextualKeywordsTests() { throw new Error(); } // ModuleDeclaration: module open. void module() { Object module = null; when(); } void open() { Object open = null; module(); } // ModuleDirective: exports opens provides requires to uses with. void exports() { Object exports = null; open(); } void opens() { Object opens = null; exports(); } void provides() { Object provides = null; opens(); } void requires() { Object requires = null; provides(); } void to() { Object to = null; requires(); } void uses() { Object uses = null; to(); } void with() { Object with = null; uses(); } // RequiresModifier: transitive. void transitive() { Object transitive = null; with(); } // LocalVariableType | LambdaParameterType: var. void var() { var var = new Object(); transitive(); } // YieldStatement: yield (see java_switch.java). void yield() { Object yield = null; var(); } // RecordDeclaration: record. void record() { Object record = null; this.yield(); } // Normal{Class,Interface}Declaration: non-sealed permits sealed. void permits() { Object permits = null; record(); } void sealed() { Object sealed = null; permits(); } // Guard: when (see java_switch.java). void when() { Object when = null; sealed(); } sealed interface I1 permits C1, I3 { } sealed interface I2 permits C1, I3 { } non-sealed interface I3 extends I1, I2 { } interface I4 extends I3 { } abstract sealed class C1 implements I1, I2 permits C2, C3 { } abstract non-sealed class C2 extends C1 { } final class C3 extends C1 implements I3 { } class C4 extends C2 { } record R() implements I3 { } enum E implements I3 { INSTANCE } static I i1() { return (var var) -> var; } static I i2() { return (T var) -> var; } static I i3() { return (var) -> var; } static I i4() { return var -> var; } interface I { T i(T i); default I self() { return this; } } }