Where do empty compilation units belong?
Jonathan Gibbons
jonathan.gibbons at oracle.com
Tue Nov 20 17:20:12 UTC 2018
On 11/19/18 9:27 PM, Jayaprakash Artanareeswaran wrote:
> I have the following folder structure in a module
>
> my.module
> -module-info.java
> - p
> -- C.java
> -- q
> --- D.java
>
> where C.java contains only the package declaration and D.java is empty.
>
> When I run javac with --module-source-path and all the individual files as arguments the compiler is happy and reports no error. This behavior is different from Eclipse compiler which reports an error about "declaring a named package because this compilation unit is associated to the named module". Is this because empty compilation units are considered to be part of unnamed modules or because the D.java and hence package q are omitted?
>
> I have been trying to find out the relevant part of the spec or any documentation that defines this behavior, but couldn't find anything on this. Can someone please tell me what the right behavior is and point me to the relevant documentation?
>
> This Eclipse bug has more details - https://bugs.eclipse.org/bugs/show_bug.cgi?id=540067
>
> Regards,
> Jay
As long as C.java contains a package declaration for "package p;", I
would expect that to be OK. There is (or should be) no presumption about
what other declarations may appear in that file.
If D.java is empty, there is nothing to complain about!
Generally, javac cares about the contents of files, as defined by the
syntax rules in JLS. The conventions about filenames only kick in when
applied to a type element declared in that file.
-- Jon
More information about the jigsaw-dev
mailing list