On 11/20/2018 10:54 AM, Alex Buckley wrote:
From the above, it's hard to understand for which file an error is
reported by Eclipse. In any case, as Jon indicated, if the file D.java
is empty, then there is no stream of tokens matching the JLS 7.3
production `CompilationUnit` and thus there is no compilation unit to
discuss.

Jon points out that `OrdinaryCompilationUnit` will match an empty stream of tokens (I dislike the syntax-driven optionality here, but it's longstanding) so the file D.java could be regarded as a compilation unit with no package declaration, no import declarations, and no type declarations.

Per JLS 7.4.2, such a compilation unit is in an unnamed package, and must be associated with an unnamed module. (The "must" somewhat conflicts with the "may" in https://docs.oracle.com/javase/specs/jls/se11/html/jls-7.html#jls-7.3-310)

I would prefer 7.4.2 to say only that a compilation unit with no package declarations _and at least one type declaration_ is in an unnamed package (and must be associated with an unnamed module; 7.3 should enumerate that possibility). A compilation unit with no package declarations _and no type declarations_ would be deemed unobservable by 7.3, and all these questions about what to do with empty files would disappear.

What do compiler engineers think?

Alex

Reply via email to