changeset 57847:ebce016b7358

8235149: javac parser is too aggressive on ambiguous expressions using identifier: record Reviewed-by: mcimadamore
author vromero
date Mon, 27 Jan 2020 18:50:19 -0500
parents ed2b8b5fe728
children 3f3649cca6e1
files src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java test/langtools/tools/javac/records/RecordCompilationTests.java
diffstat 2 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Mon Jan 27 15:35:10 2020 -0800
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Mon Jan 27 18:50:19 2020 -0500
@@ -4023,7 +4023,7 @@
             int pos = token.pos;
             JCModifiers mods = modifiersOpt();
             if (token.kind == CLASS ||
-                isRecordStart() ||
+                allowRecords && isRecordStart() ||
                 token.kind == INTERFACE ||
                 token.kind == ENUM) {
                 return List.of(classOrRecordOrInterfaceOrEnumDeclaration(mods, dc));
--- a/test/langtools/tools/javac/records/RecordCompilationTests.java	Mon Jan 27 15:35:10 2020 -0800
+++ b/test/langtools/tools/javac/records/RecordCompilationTests.java	Mon Jan 27 18:50:19 2020 -0500
@@ -625,6 +625,19 @@
         Assert.check(numberOfFieldRefs == 1);
     }
 
+    public void testAcceptRecordId() {
+        String[] testOptions = {/* no options */};
+        setCompileOptions(testOptions);
+        assertOKWithWarning("compiler.warn.restricted.type.not.allowed.preview",
+                "class R {\n" +
+                "    record RR(int i) {\n" +
+                "        return null;\n" +
+                "    }\n" +
+                "    class record {}\n" +
+                "}");
+        setCompileOptions(PREVIEW_OPTIONS);
+    }
+
     public void testAnnos() throws Exception {
         String srcTemplate =
                 """
@@ -861,14 +874,12 @@
         @Override
         public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
             targets = processingEnv.getOptions().get("targets");
-            System.out.println("targets------------------------------------------------- " + targets);
             for (TypeElement te : annotations) {
                 if (te.toString().equals("Anno")) {
                     checkElements(te, roundEnv, targets);
                     if (targets.contains("TYPE_USE")) {
                         Element element = processingEnv.getElementUtils().getTypeElement("R");
                         numberOfTypeAnnotations = 0;
-                        System.out.println("element found --------------------------------- " + element);
                         checkTypeAnnotations(element);
                         Assert.check(numberOfTypeAnnotations == 4);
                     }