OpenJDK / jdk / jdk
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); }