Skip to content

Commit f5a7de8

Browse files
biboudislahodaj
authored andcommitted
8290379: Parse error with parenthesized pattern and guard using an array
Reviewed-by: jlahoda
1 parent 612d8c6 commit f5a7de8

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3169,7 +3169,8 @@ PatternResult analyzePattern(int lookahead) {
31693169
lookahead++;
31703170
break;
31713171
} else {
3172-
return PatternResult.EXPRESSION;
3172+
// This is a potential guard, if we are already in a pattern
3173+
return pendingResult;
31733174
}
31743175
case LPAREN:
31753176
if (S.token(lookahead + 1).kind == RPAREN) {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
/*
24+
* @test
25+
* @bug 8290379
26+
* @summary Parse error with parenthesized pattern and guard using an array
27+
* @compile --enable-preview -source ${jdk.version} T8290379.java
28+
* @run main/othervm --enable-preview T8290379
29+
*/
30+
public class T8290379 {
31+
public static void main(String... args) {
32+
assertEquals(0, test("test"));
33+
assertEquals(1, test(Integer.valueOf(42)));
34+
}
35+
36+
public static int test(Object o)
37+
{
38+
int[] arr = {0, 1};
39+
40+
return switch (o) {
41+
case (String s) when (arr[0] == 0) -> 0;
42+
case (Integer i) when arr[1] == 1 -> 1;
43+
default -> 2;
44+
};
45+
}
46+
47+
static void assertEquals(int expected, int actual) {
48+
if (expected != actual) {
49+
throw new AssertionError("Expected: " + expected + ", actual: " + actual);
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)