Skip to content

Commit ce8399f

Browse files
committed
8321582: yield <primitive-type>.class not parsed correctly.
Reviewed-by: vromero
1 parent 3c6459e commit ce8399f

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java

+1
Original file line numberDiff line numberDiff line change
@@ -2853,6 +2853,7 @@ List<JCStatement> blockStatement() {
28532853
case INTLITERAL: case LONGLITERAL: case FLOATLITERAL: case DOUBLELITERAL:
28542854
case NULL: case IDENTIFIER: case TRUE: case FALSE:
28552855
case NEW: case SWITCH: case THIS: case SUPER:
2856+
case BYTE, CHAR, SHORT, INT, LONG, FLOAT, DOUBLE, VOID, BOOLEAN:
28562857
isYieldStatement = true;
28572858
break;
28582859
case PLUSPLUS: case SUBSUB:

test/langtools/tools/javac/switchexpr/ExpressionSwitch.java

+27-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/*
22
* @test /nodynamiccopyright/
3-
* @bug 8206986 8222169 8224031 8240964 8267119 8268670
3+
* @bug 8206986 8222169 8224031 8240964 8267119 8268670 8321582
44
* @summary Check expression switch works.
5-
* @compile/fail/ref=ExpressionSwitch-old.out --release 9 -XDrawDiagnostics ExpressionSwitch.java
65
* @compile ExpressionSwitch.java
76
* @run main ExpressionSwitch
87
*/
98

9+
// * @compile/fail/ref=ExpressionSwitch-old.out --release 9 -XDrawDiagnostics ExpressionSwitch.java
1010
import java.util.Objects;
1111
import java.util.function.Supplier;
1212

@@ -35,6 +35,16 @@ private void run() {
3535
localClass(T.A);
3636
assertEquals(castSwitchExpressions(T.A), "A");
3737
testTypeInference(true, 0);
38+
assertEquals(yieldPrimitiveDotClass("byte"), byte.class);
39+
assertEquals(yieldPrimitiveDotClass("char"), char.class);
40+
assertEquals(yieldPrimitiveDotClass("short"), short.class);
41+
assertEquals(yieldPrimitiveDotClass("int"), int.class);
42+
assertEquals(yieldPrimitiveDotClass("long"), long.class);
43+
assertEquals(yieldPrimitiveDotClass("float"), float.class);
44+
assertEquals(yieldPrimitiveDotClass("double"), double.class);
45+
assertEquals(yieldPrimitiveDotClass("void"), void.class);
46+
assertEquals(yieldPrimitiveDotClass("boolean"), boolean.class);
47+
assertEquals(yieldPrimitiveDotClass("other"), null);
3848
}
3949

4050
private String print(T t) {
@@ -140,6 +150,21 @@ private boolean yieldUnaryNotOperator(String s, boolean b) {
140150
};
141151
}
142152

153+
private Class<?> yieldPrimitiveDotClass(String s) {
154+
return switch (s) {
155+
case "byte": yield byte.class;
156+
case "char": yield char.class;
157+
case "short": yield short.class;
158+
case "int": yield int.class;
159+
case "long": yield long.class;
160+
case "float": yield float.class;
161+
case "double": yield double.class;
162+
case "void": yield void.class;
163+
case "boolean": yield boolean.class;
164+
default: yield null;
165+
};
166+
}
167+
143168
private void localClass(T t) {
144169
String good = "good";
145170
class L {

0 commit comments

Comments
 (0)