forked from aniani/vim
		
	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>
		
			
				
	
	
		
			123 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			123 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;
 | |
| 		});
 | |
| 	}
 | |
| }
 |