import java.util.function.*; class Test { void test1(Object o, int mode) { switch (o) { case Integer i when i == mode -> System.out.println(); default -> {} } switch (o) { case Integer i when (switch (o) { case Integer ii when ii != mode -> 2; default -> 1; }) == mode -> System.out.println(); default -> {} } switch (o) { case Integer i when (i = mode) > 0 -> System.out.println(); default -> {} } mode = 0; } void test2(Object o, final int mode) { switch (o) { case Integer i when (switch (o) { case Integer ii when ii != mode -> 2; default -> 1; }) == mode -> o = null; default -> {} } switch (o) { case Integer i when (i = mode) > 0 -> System.out.println(); default -> {} } } void test3(Object o, int mode) { switch (o) { case Integer i when i == mode -> System.out.println(); default -> {} } switch (o) { case Integer i when (switch (o) { case Integer ii when ii != mode -> 2; default -> 1; }) == mode -> System.out.println(); default -> {} } } void testInstanceofPatterns(Object o, int mode) { if (o instanceof Integer i && (i = mode) > 0) { } mode = 0; } void testNested(Object o, Integer in) { switch (o) { case Integer mode when (mode = 42) > 9: switch (o) { case Integer i when (i = mode) > 0 -> System.out.println(); default -> System.out.println(); } default : break; } String str; str = switch (o) { case Integer mode when (mode = 42) > 9 -> switch (o) { case Integer i when (i = mode) > 0 -> ""; default -> ""; }; default -> ""; }; str = switch (o) { case Integer mode when (mode = 42) > 9: yield switch (o) { case Integer i when (i = mode) > 0 -> ""; default -> ""; }; default: yield ""; }; // lambdas str = switch (o) { case Integer i when (i = in) > 0: yield ((Function)(x) -> (in = 5) > 0 ? "" : null).apply(in); default: yield ""; }; Consumer c = (mode) -> { switch (o) { case Integer i when (i = in) > 0 -> System.out.println(); default -> System.out.println(); } in = 1; }; // try-with-resources try (in) { switch (o) { case AutoCloseable ii when (in = 1) != null: break; default: break; } } catch (Exception e) { } // double nested switch (o) { case Integer mode when (mode = 42) > 9: switch (o) { case Integer i -> { switch (o) { case Integer ii when ii > mode: break; default: break; } } default -> System.out.println(); } default: break; } str = switch (o) { case Integer mode when (mode) > 9: yield switch (o) { case Integer i -> { yield switch (o) { case Integer ii when ii > mode: yield ""; default: yield ""; }; } default -> ""; }; default: yield ""; }; } void declaredInWhenExpression(Object obj) { switch (obj) { case Integer i when new Function() { @Override public Boolean apply(Integer integer) { System.out.println(integer++); int num = 0; System.out.println(++num); return true; } }.apply(42) -> {} default -> {} } switch (obj) { case Integer i when switch (i) { case 1 -> { int num = 0; ++num; yield num; } default -> 42; } == 42 -> {} default -> {} } } void testNested(Object o, Integer in) { switch (o) { case Integer mode when (mode--) > 9: break; default: break; } } public static void testWhenReassigned() { Object object = "1234"; switch (object) { case String s when s.length()==2 -> { s = null; } default -> { } } } void testUnary(Object o, Integer in) { switch (o) { case Integer mode when -in == 1 && -mode == 2: break; default: break; } } }