From 4500bb7a676b9208337590880cfde45f264e4baf Mon Sep 17 00:00:00 2001 From: Aggelos Biboudis Date: Thu, 25 May 2023 08:10:02 +0000 Subject: [PATCH] 8308727: Compiler should accept final unnamed variables in try-with-resources Reviewed-by: jlahoda --- .../com/sun/tools/javac/parser/JavacParser.java | 2 +- test/langtools/tools/javac/patterns/Unnamed.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index 3b481baeaeb..017dac30e7f 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -3843,7 +3843,7 @@ public class JavacParser implements Parser { if (token.kind == FINAL || token.kind == MONKEYS_AT) { JCModifiers mods = optFinal(0); JCExpression t = parseType(true); - return variableDeclaratorRest(token.pos, mods, t, ident(), true, null, true, false, false); + return variableDeclaratorRest(token.pos, mods, t, identOrUnderscore(), true, null, true, false, false); } JCExpression t = term(EXPR | TYPE); if (wasTypeMode() && LAX_IDENTIFIER.test(token.kind)) { diff --git a/test/langtools/tools/javac/patterns/Unnamed.java b/test/langtools/tools/javac/patterns/Unnamed.java index 5ef1cd51012..b15902964a8 100644 --- a/test/langtools/tools/javac/patterns/Unnamed.java +++ b/test/langtools/tools/javac/patterns/Unnamed.java @@ -31,6 +31,10 @@ */ import java.util.Objects; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; public class Unnamed { public static void main(String[] args) throws Throwable { @@ -89,6 +93,9 @@ public class Unnamed { } catch (Exception _) {} } } + try (final Lock _ = null) { } + try (@Foo Lock _ = null) { } + String[] strs = new String[] { "str1", "str2" }; for (var _ : strs) { for (var _ : strs) { @@ -290,6 +297,9 @@ public class Unnamed { public int run(int a, int b); } record R(Object o) {} + @Target(ElementType.LOCAL_VARIABLE) + @Retention(RetentionPolicy.RUNTIME) + public @interface Foo { } sealed abstract class Base permits R1, R2, R3, R4 { } final class R1 extends Base { }