> On Oct 31, 2016, at 6:51 AM, Alan Bateman <alan.bate...@oracle.com> wrote: >> >> if (VM.isModuleSystemInited() && !HashedModules.contains(m)) { > Looks okay, an alternative would be to move that that check to L439.
What do you think about this? http://cr.openjdk.java.net/~mchung/jdk9/webrevs/6479237/webrev.03/ /** * Returns true if the module is hashed with java.base. * <p> * This method returns false when running on the exploded image * since JDK modules are not hashed. They have no Version attribute * and so "@<version>" part will be omitted anyway. */ private static boolean isHashedInJavaBase(Module m) { // return true if module system is not initialized as the code // must be in java.base if (!VM.isModuleSystemInited()) return true; return Layer.boot() == m.getLayer() && HashedModules.contains(m); } /* * Finds JDK non-upgradeable modules, i.e. the modules that are * included in the hashes in java.base. */ private static class HashedModules { static Set<String> HASHED_MODULES = hashedModules(); static Set<String> hashedModules() { Module javaBase = Layer.boot().findModule("java.base").get(); Optional<ModuleHashes> ohashes = SharedSecrets.getJavaLangModuleAccess() .hashes(javaBase.getDescriptor()); if (ohashes.isPresent()) { Set<String> names = new HashSet<>(ohashes.get().names()); names.add("java.base"); return names; } return Set.of(); } static boolean contains(Module m) { return HASHED_MODULES.contains(m.getName()); } }