RFR: 8027682: javac wrongly accepts semicolons in package and import decls

Archie L. Cobbs duke at openjdk.org
Mon Feb 6 21:17:52 UTC 2023


On Mon, 6 Feb 2023 20:32:27 GMT, Archie L. Cobbs <duke at openjdk.org> wrote:

> JLS [§7.3](https://docs.oracle.com/javase/specs/jls/se19/html/jls-7.html#jls-7.3) specifies that while a lone semi-colon is a valid _TopLevelClassOrInterfaceDeclaration_, it is not a valid _ImportDeclaration_. Therefore, if we see a lone semi-colon while looking for the next import statement we have to advance and accept a class declaration, and we can therefore no longer accept any further `import` statements.
> 
> However, the compiler was allowing this, for example:
> 
> package p; import X; ;;; import Y; class Foo {}
> 
> The bug is that the parser was switching out of "look for imports" mode after parsing a valid class declaration, but it was not switching out of "look for imports" mode after parsing a lone semi-colon.
> 
> The fix to `JavacParser.java` is easy, however it also requires these adjustments to unit tests:
> 
> * Test `tree/T6963934.java` must go away, because it is verifying a bug that only happens when the above bogus input is successfully parsed, and this can no longer happen.
> * A bug in `lib/types/TypeHarness.java` was uncovered and fixed; it was inserting an extra semi-colon.
> * The following bugs, which check invalid syntax within import statements, now generate different parse errors and therefor needed their "golden output" updated:
>   * annotations/typeAnnotations/failures/AnnotatedImport.java
>   * annotations/typeAnnotations/failures/AnnotatedPackage1.java
>   * annotations/typeAnnotations/failures/AnnotatedPackage2.java

Thanks for the comments.

Agree that smarter error checking for the likely scenario of a spurious semi-colon would be an improvement.

I'm agnostic on what would be "best" - just trying to address some stale bugs.

If there is uncertainty about what the spec should be, but also no action, that obviously paralyzes progress. What do you guys recommend we do?

This bug will have its 10th birthday in October :)

-------------

PR: https://git.openjdk.org/jdk/pull/12448


More information about the compiler-dev mailing list