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

Archie L. Cobbs duke at openjdk.org
Mon Feb 6 20:40:25 UTC 2023


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

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

Commit messages:
 - Per JLS 7.3, do not accept a lone semi-colon as a valid ImportDeclaration.

Changes: https://git.openjdk.org/jdk/pull/12448/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12448&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8027682
  Stats: 70 lines in 6 files changed: 3 ins; 62 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/12448.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12448/head:pull/12448

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


More information about the compiler-dev mailing list