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 <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index d3b59c1..bbef266 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 <claudio@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 @@
 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 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 0000000..af67913
--- /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 0000000..4b55322
--- /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 0000000..95c0556
--- /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 0000000..f44ad17
--- /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 0000000..b9c2070
--- /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;
+		});
+	}
+}