mirror of
https://github.com/vim/vim
synced 2025-05-02 22:37:47 +02:00
This token will be highlighted, similar to the arrow of lambda expressions, whenever "g:java_highlight_functions" is defined. Also: - Improve the recognition of _switch-case_ labels (D-Cysteine). - Remove insignificant empty statements in syntax test files. closes: #15322 References: https://docs.oracle.com/javase/specs/jls/se21/html/jls-15.html#jls-15.13 https://github.com/fleiner/vim/pull/1 Co-authored-by: D-Cysteine <54219287+D-Cysteine@users.noreply.github.com> Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
122 lines
2.7 KiB
Java
122 lines
2.7 KiB
Java
class SwitchTests // JDK 21+.
|
|
{
|
|
static void echo(Object o) { System.out.println(o); }
|
|
|
|
static {
|
|
interface Yieldable<T>
|
|
{
|
|
T yield();
|
|
default Yieldable<T> default_() { return this; }
|
|
default Yieldable<T> when() { return this; }
|
|
}
|
|
|
|
// There are 80 bytes (\@80<!) between "::" and "yield;".
|
|
Yieldable<?> y = ((Yieldable<?>) () -> 0)::
|
|
yield;
|
|
((Yieldable<?>) () -> 0).when().default_().yield();
|
|
|
|
enum Letters { OTHER, ALPHA, BETA }
|
|
|
|
Letters when = Letters.OTHER;
|
|
|
|
switch (when) {
|
|
case ALPHA: { echo(Letters.ALPHA); break; }
|
|
case BETA: { echo(Letters.BETA); break; }
|
|
default: { echo(Letters.OTHER); }
|
|
}
|
|
|
|
echo(switch (when) {
|
|
case ALPHA -> Letters.ALPHA;
|
|
case BETA -> Letters.BETA;
|
|
default -> { yield(Letters.OTHER); }
|
|
});
|
|
|
|
String yield = null;
|
|
|
|
switch (yield) {
|
|
case "A": case "B": { echo("A or B"); break; }
|
|
case ":": { echo("Colon"); break; }
|
|
case String str when !str.equals(""):
|
|
{ echo("<non-empty>"); break; }
|
|
case null: default: { echo("Other"); }
|
|
}
|
|
|
|
echo(switch (yield) {
|
|
case "A", "B" -> { yield("A or B"); }
|
|
case "->" -> "Arrow";
|
|
case String str when !str.equals("")
|
|
-> "<non-empty>";
|
|
case null, default -> "Other";
|
|
});
|
|
|
|
Object o = new Object();
|
|
|
|
switch (o) {
|
|
case null: { echo("null"); break; }
|
|
case Letters[] ll: { echo("SwitchTests$1Letters[]"); break; }
|
|
default: { echo("java.lang.Object"); break; }
|
|
}
|
|
|
|
echo(switch (o) {
|
|
case null -> "null";
|
|
case Letters[] ll -> "SwitchTests$1Letters[]";
|
|
default -> "java.lang.Object";
|
|
});
|
|
|
|
char ch = 'c';
|
|
|
|
switch (ch) {
|
|
case 'a': { echo('a'); break; }
|
|
case 'b': { echo('b'); break; }
|
|
default: { echo('\u0000'); break; }
|
|
}
|
|
|
|
echo(switch (ch) {
|
|
case 'a' -> 'a';
|
|
case 'b' -> 'b';
|
|
default -> '\u0000';
|
|
});
|
|
|
|
byte b = (byte) 2;
|
|
|
|
switch (b) {
|
|
case ((byte) 0): { echo((byte) 0); break; }
|
|
case ((byte) 1): { echo((byte) 1); break; }
|
|
default: { echo((byte) -1); break; }
|
|
}
|
|
|
|
echo(switch (b) {
|
|
case ((byte) 0) -> (byte) 0;
|
|
case ((byte) 1) -> (byte) 1;
|
|
default -> (byte) -1;
|
|
});
|
|
|
|
short sh = (short) 2;
|
|
|
|
switch (sh) {
|
|
case ((short) 0): { echo((short) 0); break; }
|
|
case ((short) 1): { echo((short) 1); break; }
|
|
default: { echo((short) -1); break; }
|
|
}
|
|
|
|
echo(switch (sh) {
|
|
case ((short) 0) -> (short) 0;
|
|
case ((short) 1) -> (short) 1;
|
|
default -> (short) -1;
|
|
});
|
|
|
|
int i = 2;
|
|
|
|
switch (i) {
|
|
case 0b0__00___000: { echo(0); break; }
|
|
case 0x000___00__1: { echo(1); break; }
|
|
default: { echo(-1); break; }
|
|
}
|
|
|
|
echo(switch (i) {
|
|
case 0_0_0_0_0 -> 0;
|
|
case 1 -> 1;
|
|
default -> -1;
|
|
});
|
|
}
|
|
}
|