/*
* @test /nodynamiccopyright/
* @bug 8262891 8272776
* @summary Check null handling for non-pattern switches.
* @enablePreview
*/
public class NullSwitch {
public static void main(String[] args) {
new NullSwitch().switchTest();
}
void switchTest() {
assertEquals(0, matchingSwitch1("" ));
assertEquals(1, matchingSwitch1("a" ));
assertEquals(100, matchingSwitch1(0));
assertEquals(-1, matchingSwitch1(null ));
assertEquals(-2, matchingSwitch1(0.0));
assertEquals(0, matchingSwitch2("" ));
assertEquals(1, matchingSwitch2(null ));
assertEquals(1, matchingSwitch2(0.0));
assertEquals(0, matchingSwitch3("" ));
assertEquals(1, matchingSwitch3("a" ));
assertEquals(100, matchingSwitch3(0));
assertEquals(-1, matchingSwitch3(null ));
assertEquals(-2, matchingSwitch3(0.0));
assertEquals(0, matchingSwitch5("" ));
assertEquals(1, matchingSwitch5("a" ));
assertEquals(100, matchingSwitch5(0));
assertEquals(-1, matchingSwitch5(null ));
assertEquals(-2, matchingSwitch5(0.0));
assertEquals(0, matchingSwitch6("" ));
assertEquals(1, matchingSwitch6(null ));
assertEquals(1, matchingSwitch6(0.0));
assertEquals(0, matchingSwitch7("" ));
assertEquals(1, matchingSwitch7("a" ));
assertEquals(100, matchingSwitch7(0));
assertEquals(-1, matchingSwitch7(null ));
assertEquals(-2, matchingSwitch7(0.0));
assertEquals(0, matchingSwitch8("" ));
assertEquals(1, matchingSwitch8(null ));
assertEquals(1, matchingSwitch8(0.0));
assertEquals(0, matchingSwitch9a("" ));
assertEquals(1, matchingSwitch9a(null ));
assertEquals(1, matchingSwitch9a(0.0));
assertEquals(0, matchingSwitch10a("" ));
assertEquals(1, matchingSwitch10a(null ));
assertEquals(1, matchingSwitch10a(0.0));
assertEquals(0, matchingSwitch9b("" ));
assertEquals(2, matchingSwitch9b(null ));
assertEquals(1, matchingSwitch9b(0.0));
assertEquals(0, matchingSwitch10b("" ));
assertEquals(2, matchingSwitch10b(null ));
assertEquals(1, matchingSwitch10b(0.0));
assertEquals(0, matchingSwitch11("" ));
assertEquals(2, matchingSwitch11(null ));
assertEquals(1, matchingSwitch11(0.0));
assertEquals(0, matchingSwitch12("" ));
assertEquals(2, matchingSwitch12(null ));
assertEquals(1, matchingSwitch12(0.0));
assertEquals(0, matchingSwitch13("" ));
assertEquals(1, matchingSwitch13(0.0));
assertEquals(2, matchingSwitch13(null ));
// record classes and null
assertEquals(1, matchingSwitch14(new R(null )));
assertEquals(2, matchingSwitch15(new R(null )));
}
class Super {}
class Sub extends Super {}
record R(Super s) {}
private int matchingSwitch14(R r) {
return switch (r) {
case R(Super s) -> 1;
default -> 2;
};
}
private int matchingSwitch15(R r) {
return switch (r) {
case R(Sub s) -> 1;
default -> 2;
};
}
private int matchingSwitch1(Object obj) {
return switch (obj) {
case String s -> s.length();
case Integer i -> 100 + i;
case null -> -1;
default -> -2;
};
}
private int matchingSwitch2(Object obj) {
return switch (obj) {
case String s -> 0;
case null , default -> 1;
};
}
private int matchingSwitch3(Object obj) {
return switch (obj) {
case String s -> s.length();
case Integer i -> 100 + i;
case null -> -1;
default -> -2;
};
}
private int matchingSwitch5(Object obj) {
return switch (obj) {
case String s: yield s.length();
case null : yield -1;
case Integer i: yield 100 + i;
default : yield -2;
};
}
private int matchingSwitch6(Object obj) {
return switch (obj) {
case String s: yield 0;
case null : yield 1;
default : yield 1;
};
}
private int matchingSwitch7(Object obj) {
return switch (obj) {
case String s: yield s.length();
case Integer i: yield 100 + i;
case null : yield -1;
default : yield -2;
};
}
private int matchingSwitch8(Object obj) {
return switch (obj) {
case String s: yield 0;
case null :
default : yield 1;
};
}
private int matchingSwitch9a(Object obj) {
return switch (obj) {
case String s: yield 0;
case null : yield 1;
case Object o: yield 1;
};
}
private int matchingSwitch10a(Object obj) {
switch (obj) {
case String s: return 0;
case null : return 1;
case Object o: return 1;
}
}
private int matchingSwitch9b(Object obj) {
try {
return switch (obj) {
case String s: yield 0;
case Object o: yield 1;
};
} catch (NullPointerException ex) {
return 2;
}
}
private int matchingSwitch10b(Object obj) {
try {
switch (obj) {
case String s: return 0;
case Object o: return 1;
}
} catch (NullPointerException ex) {
return 2;
}
}
private int matchingSwitch11(Object obj) {
try {
return switch (obj) {
case String s: yield 0;
default : yield 1;
};
} catch (NullPointerException ex) {
return 2;
}
}
private int matchingSwitch12(Object obj) {
try {
switch (obj) {
case String s: return 0;
default : return 1;
}
} catch (NullPointerException ex) {
return 2;
}
}
private int matchingSwitch13(Object obj) {
try {
switch (obj) {
case String s: return 0;
default : return 1;
}
} catch (NullPointerException ex) {
return 2;
}
}
static void assertEquals(int expected, int actual) {
if (expected != actual) {
throw new AssertionError("Expected: " + expected + ", actual: " + actual);
}
}
}
Messung V0.5 C=96 H=92 G=93
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland