runtime(java): Optionally recognise all primitive constants in _switch-case_ 
labels

Commit: 
https://github.com/vim/vim/commit/23079450a8dea98f9d4e3e74ab57866914b0a813
Author: Aliaksei Budavei <0x000...@gmail.com>
Date:   Thu Sep 19 18:22:58 2024 +0200

    runtime(java): Optionally recognise all primitive constants in 
_switch-case_ labels
    
    Define "g:java_syntax_previews" and include number 455 in
    its list to enable this recognition:
    ------------------------------------------------------------
            let g:java_syntax_previews = [455]
    ------------------------------------------------------------
    
    Reference:
    https://openjdk.org/jeps/455
    
    closes: #15698
    
    Signed-off-by: Aliaksei Budavei <0x000...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 7650433b7..01aa92a53 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*   For Vim version 9.1.  Last change: 2024 Sep 11
+*syntax.txt*   For Vim version 9.1.  Last change: 2024 Sep 18
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2176,10 +2176,11 @@ cycles for such a feature to become either integrated 
into the platform or
 withdrawn from this effort.  To cater for early adopters, there is optional
 support in Vim for syntax related preview features that are implemented.  You
 can request it by specifying a list of preview feature numbers as follows: >
-       :let g:java_syntax_previews = [430]
+       :let g:java_syntax_previews = [455]
 
 The supported JEP numbers are to be drawn from this table:
        `430`: String Templates [JDK 21]
+       `455`: Primitive types in Patterns, instanceof, and switch
 
 Note that as soon as the particular preview feature will have been integrated
 into the Java platform, its entry will be removed from the table and related
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index d3b59c186..bbef266c3 100644
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -3,7 +3,7 @@
 " Maintainer:          Aliaksei Budavei <0x000c70 AT gmail DOT com>
 " Former Maintainer:   Claudio Fleiner <clau...@fleiner.com>
 " Repository:          https://github.com/zzzyxwvut/java-vim.git
-" Last Change:         2024 Sep 11
+" Last Change:         2024 Sep 18
 
 " Please check :help java.vim for comments on some of the options available.
 
@@ -283,19 +283,27 @@ if exists("g:java_space_errors")
 endif
 
 exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . 
s:ff.Peek('7', '') . '<!\s*::\@!"he=e-1'
-syn region  javaLabelRegion    transparent matchgroup=javaLabel 
start="\<case\>" matchgroup=NONE end=":\|->" 
contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
+
+if s:ff.IsRequestedPreviewFeature(455)
+  syn region  javaLabelRegion  transparent matchgroup=javaLabel 
start="\<case\>" matchgroup=NONE end=":\|->" 
contains=javaBoolean,javaNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaType,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
+else
+  syn region  javaLabelRegion  transparent matchgroup=javaLabel 
start="\<case\>" matchgroup=NONE end=":\|->" 
contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
+  syn keyword javaLabelCastType        contained char byte short int
+  syn match   javaLabelNumber  contained "\<0\>[lL]\@!"
+  syn match   javaLabelNumber  contained 
"\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
+  hi def link javaLabelCastType        javaType
+  hi def link javaLabelNumber  javaNumber
+endif
+
 syn region  javaLabelRegion    transparent matchgroup=javaLabel 
start="\<default\>\%(\s*\%(:\|->\)\)\@=" matchgroup=NONE end=":\|->" oneline
 " Consider grouped _default_ _case_ labels, i.e.
 " case null, default ->
 " case null: default:
 syn keyword javaLabelDefault   contained default
 syn keyword javaLabelVarType   contained var
-syn keyword javaLabelCastType  contained char byte short int
 " Allow for the contingency of the enclosing region not being able to
 " _keep_ its _end_, e.g. case ':':.
 syn region  javaLabelWhenClause        contained transparent 
matchgroup=javaLabel start="\<when\>" matchgroup=NONE end=":"me=e-1 
end="->"me=e-2 contains=TOP,javaExternal,javaLambdaDef
-syn match   javaLabelNumber    contained "\<0\>[lL]\@!"
-syn match   javaLabelNumber    contained 
"\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
 
 " Comments
 syn keyword javaTodo           contained TODO FIXME XXX
@@ -692,8 +700,6 @@ hi def link javaUserLabelRef                javaUserLabel
 hi def link javaLabel                  Label
 hi def link javaLabelDefault           javaLabel
 hi def link javaLabelVarType           javaOperator
-hi def link javaLabelNumber            javaNumber
-hi def link javaLabelCastType          javaType
 
 hi def link javaComment                        Comment
 hi def link javaCommentStar            javaComment
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_00.dump 
b/runtime/syntax/testdir/dumps/java_previews_455_00.dump
new file mode 100644
index 000000000..af67913b6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_previews_455_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| 
|g|:|j|a|v|a|_|s|y|n|t|a|x|_|p|r|e|v|i|e|w|s| |=| |[|4|5@1|]| +0#0000000&@22
+@75
+@75
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|P|r|i|m|i|t|i|v|e|S|w|i|t|c|h|T|e|s|t|s| 
@1|/+0#0000e05&@1| |J|D|K| |2|3|+| |(|-@1|e|n|a|b|l|e|-|p|r|e|v|i|e|w| 
|-@1|r|e|l|e|a|s|e| |2|3|)|.| +0#0000000&@3
+|{| @73
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| 
+0#0000000&|e|c|h|o|(|O|b|j|e|c|t| |o|)| |{| 
|S|y|s|t|e|m|.|o|u|t|.|p|r|i|n|t|l|n|(|o|)|;| |}| @17
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8|l+0#00e0003&|o|n|g| +0#0000000&|g| |=| |2+0#e000002&|L|;+0#0000000&| @54
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|g|)| |{| @54
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L|:+0#0000000&| @7|{| 
|e|c|h|o|(|0+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| 
|}| @30
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|L|:+0#0000000&| @7|{| 
|e|c|h|o|(|1+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| 
|}| @30
+@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| 
|e|c|h|o|(|-|1+0#e000002&|L|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|g|)| |{| @49
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L| +0#0000000&@4|-|>| 
|0+0#e000002&|L|;+0#0000000&| @44
+@57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_01.dump 
b/runtime/syntax/testdir/dumps/java_previews_455_01.dump
new file mode 100644
index 000000000..4b5532209
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_previews_455_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|L|:+0#0000000&| 
@7|{| |e|c|h|o|(|1+0#e000002&|L|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @30
+@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| 
|e|c|h|o|(|-|1+0#e000002&|L|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|g|)| |{| @49
+@12>c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L| +0#0000000&@4|-|>| 
|0+0#e000002&|L|;+0#0000000&| @44
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|L| +0#0000000&@4|-|>| 
|1+0#e000002&|L|;+0#0000000&| @44
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| 
|-|1+0#e000002&|L|;+0#0000000&| @43
+@8|}|)|;| @63
+@75
+@8|b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|b|o@1|l| |=| 
|f+0#e000002&|a|l|s|e|;+0#0000000&| @45
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|b|o@1|l|)| |{| @51
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|t+0#e000002&|r|u|e|:+0#0000000&| @5|{| 
|e|c|h|o|(|t+0#e000002&|r|u|e|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|f+0#e000002&|a|l|s|e|:+0#0000000&| @4|{| 
|e|c|h|o|(|f+0#e000002&|a|l|s|e|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|b|o@1|l|)| |{| @46
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@2|-|>| 
|t+0#e000002&|r|u|e|;+0#0000000&| @42
+@57|1|9|,|4|-|1|3| @6|2|8|%| 
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_02.dump 
b/runtime/syntax/testdir/dumps/java_previews_455_02.dump
new file mode 100644
index 000000000..95c055624
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_previews_455_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|t+0#e000002&|r|u|e| 
+0#0000000&@2|-|>| |t+0#e000002&|r|u|e|;+0#0000000&| @42
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|f+0#e000002&|a|l|s|e| +0#0000000&@1|-|>| 
|f+0#e000002&|a|l|s|e|;+0#0000000&| @41
+@8|}|)|;| @63
+@75
+@8|f+0#00e0003&|l|o|a|t| +0#0000000&|f| |=| |2+0#e000002&|.|0|f|;+0#0000000&| 
@51
+> @74
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|f|)| |{| @54
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0|f|:+0#0000000&| @5|{| 
|e|c|h|o|(|0+0#e000002&|.|0|f|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0|f|:+0#0000000&| @5|{| 
|e|c|h|o|(|1+0#e000002&|.|0|f|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| 
|e|c|h|o|(|-|1+0#e000002&|.|0|f|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|f|)| |{| @49
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0|f| +0#0000000&@2|-|>| 
|0+0#e000002&|.|0|f|;+0#0000000&| @42
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0|f| +0#0000000&@2|-|>| 
|1+0#e000002&|.|0|f|;+0#0000000&| @42
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| 
|-|1+0#e000002&|.|0|f|;+0#0000000&| @41
+@8|}|)|;| @63
+@75
+@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d| |=| |2+0#e000002&|.|0|;+0#0000000&| 
@51
+@57|3|7|,|0|-|1| @7|6|8|%| 
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_03.dump 
b/runtime/syntax/testdir/dumps/java_previews_455_03.dump
new file mode 100644
index 000000000..f44ad1760
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_previews_455_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d| |=| 
|2+0#e000002&|.|0|;+0#0000000&| @51
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|d|)| |{| @54
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0|:+0#0000000&| @6|{| 
|e|c|h|o|(|0+0#e000002&|.|0|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0|:+0#0000000&| @6|{| 
|e|c|h|o|(|1+0#e000002&|.|0|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8>d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| 
|e|c|h|o|(|-|1+0#e000002&|.|0|)+0#0000000&|;| 
|b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|d|)| |{| @49
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0| +0#0000000&@3|-|>| 
|0+0#e000002&|.|0|;+0#0000000&| @43
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0| +0#0000000&@3|-|>| 
|1+0#e000002&|.|0|;+0#0000000&| @43
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| 
|-|1+0#e000002&|.|0|;+0#0000000&| @42
+@8|}|)|;| @63
+@4|}| @69
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5@1|,|3|-|9| @7|B|o|t| 
diff --git a/runtime/syntax/testdir/input/java_previews_455.java 
b/runtime/syntax/testdir/input/java_previews_455.java
new file mode 100644
index 000000000..b9c2070e1
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_previews_455.java
@@ -0,0 +1,64 @@
+// VIM_TEST_SETUP let g:java_syntax_previews = [455]
+
+
+
+class PrimitiveSwitchTests     // JDK 23+ (--enable-preview --release 23).
+{
+       static void echo(Object o) { System.out.println(o); }
+
+       static {
+               long g = 2L;
+
+               switch (g) {
+               case 0L:                { echo(0L); break; }
+               case 1L:                { echo(1L); break; }
+               default:                { echo(-1L); break; }
+               }
+
+               echo(switch (g) {
+                       case 0L         -> 0L;
+                       case 1L         -> 1L;
+                       default         -> -1L;
+               });
+
+               boolean bool = false;
+
+               switch (bool) {
+               case true:              { echo(true); break; }
+               case false:             { echo(false); break; }
+               }
+
+               echo(switch (bool) {
+                       case true       -> true;
+                       case false      -> false;
+               });
+
+               float f = 2.0f;
+
+               switch (f) {
+               case 0.0f:              { echo(0.0f); break; }
+               case 1.0f:              { echo(1.0f); break; }
+               default:                { echo(-1.0f); break; }
+               }
+
+               echo(switch (f) {
+                       case 0.0f       -> 0.0f;
+                       case 1.0f       -> 1.0f;
+                       default         -> -1.0f;
+               });
+
+               double d = 2.0;
+
+               switch (d) {
+               case 0.0:               { echo(0.0); break; }
+               case 1.0:               { echo(1.0); break; }
+               default:                { echo(-1.0); break; }
+               }
+
+               echo(switch (d) {
+                       case 0.0        -> 0.0;
+                       case 1.0        -> 1.0;
+                       default         -> -1.0;
+               });
+       }
+}

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1srK2h-009tdg-GT%40256bit.org.

Raspunde prin e-mail lui