On 11/19/2018 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?
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.
In contrast, the file C.java does contain a compilation unit and I would
expect it to be "associated" (JLS 7.3 again) with the `my.module` module
like any other compilation unit contained in a file in the same
directory. It is legal to annotate the package declaration in the
compilation unit contained in C.java (let's not rathole into a
discussion about package-info.java), and the types that can be used in
the annotation are determined by what `my.module` reads.
Alex