annotate runtime/syntax/testdir/input/java_contextual_keywords.java @ 34775:e0059b2d4e2b

runtime(java): Improve the matching of contextual keywords Commit: https://github.com/vim/vim/commit/5ccdcc482e299609ae8852a75b22190e38b9b5df Author: Aliaksei Budavei <0x000c70@gmail.com> Date: Thu Apr 4 21:51:18 2024 +0200 runtime(java): Improve the matching of contextual keywords - Recognise a _record_ contextual keyword. - Recognise _non-sealed_, _sealed_, and _permits_ contextual keywords. - Admit _$_ to keyword characters. - Group _abstract_, _final_, _default_, _(non-)sealed_ (apart from _(non-)sealed_, the incompossibility of these modifiers calls for attention). - Remove another _synchronized_ keyword redefinition. I have also replaced a function with an expression. Before patch 8.1.0515, it should have been declared :function! to work with repeatable script sourcing; there is less to worry about with an expression. References: https://openjdk.org/jeps/395 (Records) https://openjdk.org/jeps/409 (Sealed Classes) https://docs.oracle.com/javase/specs/jls/se21/html/jls-3.html#jls-3.8 closes: #14403 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 04 Apr 2024 22:00:05 +0200
parents
children 15e88eae39bd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34775
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
1 class ContextualKeywordsTests // See JLS, ยง3.9 Keywords.
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
2 {
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
3 private ContextualKeywordsTests() { throw new Error(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
4
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
5 // ModuleDeclaration: module open.
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
6 void module() { Object module = null; when(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
7 void open() { Object open = null; module(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
8 // ModuleDirective: exports opens provides requires to uses with.
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
9 void exports() { Object exports = null; open(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10 void opens() { Object opens = null; exports(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
11 void provides() { Object provides = null; opens(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
12 void requires() { Object requires = null; provides(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
13 void to() { Object to = null; requires(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
14 void uses() { Object uses = null; to(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
15 void with() { Object with = null; uses(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
16 // RequiresModifier: transitive.
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
17 void transitive() { Object transitive = null; with(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
18 // LocalVariableType | LambdaParameterType: var.
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
19 void var() { var var = new Object(); transitive(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
20 // YieldStatement: yield (see java_switch.java).
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
21 void yield() { Object yield = null; var(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
22 // RecordDeclaration: record.
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
23 void record() { Object record = null; this.yield(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
24 // Normal{Class,Interface}Declaration: non-sealed permits sealed.
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
25 void permits() { Object permits = null; record(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
26 void sealed() { Object sealed = null; permits(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
27 // Guard: when (see java_switch.java).
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
28 void when() { Object when = null; sealed(); }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
29
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
30 sealed interface I1 permits C1, I3 { }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
31 sealed interface I2 permits C1, I3 { }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
32 non-sealed interface I3 extends I1, I2 { }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
33 interface I4 extends I3 { }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
34
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
35 abstract sealed class C1 implements I1, I2 permits C2, C3 { }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
36 abstract non-sealed class C2 extends C1 { }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
37 final class C3 extends C1 implements I3 { }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
38 class C4 extends C2 { }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
39
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
40 record R() implements I3 { }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
41 enum E implements I3 { INSTANCE }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
42
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
43 static <T> I<T> i1() { return (var var) -> var; }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
44 static <T> I<T> i2() { return (T var) -> var; }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
45 static <T> I<T> i3() { return (var) -> var; }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
46 static <T> I<T> i4() { return var -> var; }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
47 interface I<T> { T i(T i); default I<T> self() { return this; } }
e0059b2d4e2b runtime(java): Improve the matching of contextual keywords
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
48 }