--- old/src/java.base/share/classes/java/lang/module/Resolver.java 2016-12-15 09:19:08.041794060 +0000 +++ new/src/java.base/share/classes/java/lang/module/Resolver.java 2016-12-15 09:19:07.908784961 +0000 @@ -46,6 +46,7 @@ import java.util.stream.Collectors; import jdk.internal.module.ModuleHashes; +import jdk.internal.module.ModuleReferenceImpl; /** * The resolver used by {@link Configuration#resolveRequires} and @@ -438,24 +439,32 @@ */ private void checkHashes() { for (ModuleReference mref : nameToReference.values()) { - ModuleDescriptor descriptor = mref.descriptor(); - // get map of module hashes - Optional ohashes = descriptor.hashes(); - if (!ohashes.isPresent()) + // get the recorded hashes, if any + if (!(mref instanceof ModuleReferenceImpl)) + continue; + ModuleHashes hashes = ((ModuleReferenceImpl)mref).recordedHashes(); + if (hashes == null) continue; - ModuleHashes hashes = ohashes.get(); + ModuleDescriptor descriptor = mref.descriptor(); String algorithm = hashes.algorithm(); for (String dn : hashes.names()) { - ModuleReference other = nameToReference.get(dn); - if (other == null) { + ModuleReference mref2 = nameToReference.get(dn); + if (mref2 == null) { ResolvedModule resolvedModule = findInParent(dn); if (resolvedModule != null) - other = resolvedModule.reference(); + mref2 = resolvedModule.reference(); + } + if (mref2 == null) + continue; + + if (!(mref2 instanceof ModuleReferenceImpl)) { + fail("Unable to compute the hash of module %s", dn); } // skip checking the hash if the module has been patched + ModuleReferenceImpl other = (ModuleReferenceImpl)mref2; if (other != null && !other.isPatched()) { byte[] recordedHash = hashes.hashFor(dn); byte[] actualHash = other.computeHash(algorithm);