On Tue, Oct 17, 2017 at 10:10 AM, Alan Bateman <alan.bate...@oracle.com>
wrote:

> On 17/10/2017 17:53, Martin Buchholz wrote:
>
> I tried to figure out how this patch actually works.  At first I thought
> we were "shading" (renaming all the packages in the source files) but now I
> think we're merely renaming the modules by appending ".interim" to the
> names.  But that looks like cheating to me - we're not allowed to have
> multiple modules containing the same packages, but are getting away with it
> because the runtime happens to never look at the (unused) original jdk9
> modules?
>
> The patch uses `--limit-modules` to limit the observability of modules and
> prevent the jdk.compiler module in the boot JDK from being resolved. If the
> boot JDK were to resolve jdk.compiler (in its own run-time image) and
> jdk.compiler.interim on the module path then you would end up with two
> modules containing the same classes mapped to the app class loader, can't
> do that.
>

Wow, --limit-modules sure is a good trick.  So now we have two possible
replacements for the demise of -Xbootclasspath/p:
--patch-module
--limit-modules combined with renamed replacement modules

Looking at the patch I see

+INTERIM_LANGTOOLS_ADD_EXPORTS := \
+    --add-exports java.base/sun.reflect.annotation=jdk.compiler.interim \
+    --add-exports java.base/jdk.internal.util.jar=jdk.jdeps.interim \
+    --add-exports java.base/jdk.internal.misc=jdk.jdeps.interim \
+    #

so the interim compiler is accessing JDK internals - isn't this what we're
telling users NOT to do?  Especially when this is the internals of the boot
jdk - You can't bootstrap jdk10 with any compliant implementation of Java
SE 9!  The jdk bootstrap process should be setting a good example!

Reply via email to