On 11. 04. 19 0:19, Jonathan Gibbons wrote:
On 4/10/19 3:07 PM, Alex Buckley wrote:
On 4/10/2019 2:51 PM, Jonathan Gibbons wrote:
On 4/10/19 11:51 AM, Alex Buckley wrote:
There is a question to be answered: When the compiler compiles code in
an automatic module (due to the code being observed in a directory
that is specified to --patch-module), then what is the _default set of
root modules_ for the automatic module?
I expect the answer is: the same as the default set of root modules
for the unnamed module.
I would not expect the fact that you're compiling code in one or more
automatic modules to have any effect on the module graph. The fact that
the definitions of some types have been "patched in" using source code
via --patch-module is (or should be) irrelevant.
I'm not sure how anyone compiles code as if in an automatic module,
since the automatic module is solely a JAR file, but Jan suggests that
it's possible to patch an automatic module's content with the source
files being compiled. So, I looked in JEP 261 to see how javac would
treat those source files:
"If a module descriptor in the form of a module-info.java or
module-info.class file is specified on the command line [NO], or is
found on the source path [NO] or the class path [NO], then source
files will be compiled as members of the module named by that
descriptor and that module will be the sole root module. Otherwise if
the --module <module> option is present [NO] then source files will be
compiled as members of <module>, which will be the root module.
Otherwise [I GUESS WE'RE HERE] source files will be compiled as
members of the unnamed module, and the root modules will be computed
as described above."
Alex
It sounds like JEP 261 should be updated with more info about patching
modules, since "you are not here" where you guess we are.
Yes, I think JEP 261 may need updates. I'd say this is somewhat
unforeseen interaction between automatic modules and --patch-module.
When patching a (named) module (or a set of named modules), that module
(or modules) become the root module for javac, and the ordinary module
graph building algorithm is then used to build the module graph. So the
set of modules in the module graph may be different from the set of the
modules in the module graph when compiling source in the unnamed module.
Jan
At compilation time, --patch-module allows any content to be "patched
in" to any module in the module graph. The content may be provided in
source form or compiled form. In either case, the context for any names
mentioned in the content is determined by the module being patched, and
its dependencies.
-- Jon