Hi, On Wed, Nov 4, 2015 at 5:34 PM, <[email protected]> wrote: > > > Changeset: fd7cc28c24c7 > Author: alanb > Date: 2015-11-04 13:59 +0000 > URL: http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7 > > Improve finding source module when creating a layer > Expand test coverage for implied readability + layers > > ! src/java.base/share/classes/java/lang/module/ModuleDescriptor.java > ! src/java.base/share/classes/java/lang/reflect/Module.java > ! test/jdk/jigsaw/module/ConfigurationTest.java > ! test/jdk/jigsaw/reflect/Layer/LayerTest.java > > In recent change to Module.java:
+++ b/src/java.base/share/classes/java/lang/reflect/Module.java Wed Nov 04 13:59:58 2015 +0000 <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.2>@@ -40,6 +40,7 @@ <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.3> import java.util.HashSet; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.4> import java.util.Map; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.5> import java.util.Objects; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.6>+import java.util.Optional; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.7> import java.util.Set; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.8> import java.util.WeakHashMap; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.9> import java.util.concurrent.locks.Lock; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.10>@@ -891,12 +892,32 @@ <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.11> <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.12> // reads <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.13> Set<Module> reads = new HashSet<>(); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.14>- for (ModuleDescriptor other: cf.reads(descriptor)) { <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.15>+ for (ModuleDescriptor other : cf.reads(descriptor)) { <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.16>+ Module m2 = null; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.17>+ <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.18>+ // Search the configuration and parent layers for the module <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.19>+ // descriptor. This is temporary until Configuration defines <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.20>+ // an API to return the layer + name of the source rather than <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.21>+ // the module descriptor. <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.22> String dn = other.name(); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.23>- Module m2 = modules.get(dn); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.24>- Layer parent = cf.layer(); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.25>- if (m2 == null && parent != null) <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.26>- m2 = parent.findModule(other.name()).orElse(null); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.27>+ Module candidate = modules.get(dn); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.28>+ if (candidate != null && other.equals(candidate.getDescriptor())) { <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.29>+ m2 = candidate; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.30>+ } else { <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.31>+ Layer parent = cf.layer(); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.32>+ while (parent != null) { <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.33>+ Optional<Module> om = parent.findModule(dn); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.34>+ if (om.isPresent()) { <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.35>+ candidate = om.get(); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.36>+ if (other.equals(candidate.getDescriptor())) { <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.37>+ m2 = candidate; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.38>+ break; <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.39>+ } <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.40>+ } <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.41>+ parent = parent.parent().orElse(null); <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.42>+ } <http://hg.openjdk.java.net/jigsaw/jake/jdk/rev/fd7cc28c24c7#l2.43>+ } Layer.findModule already do recursive search for modules in parent layers -- Best Regards, Ali Ebrahimi
