vim/runtime/syntax/testdir/input/java_switch.java
Aliaksei Budavei e73e5b889b
runtime(java): Optionally highlight the :: token for method references
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>
2024-07-24 20:17:43 +02:00

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;
});
}
}