Mercurial > vim
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 |
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 } |