--- a/jdk/src/java.base/share/classes/java/lang/module/Resolver.java Wed Dec 14 20:23:24 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/Resolver.java Fri Dec 16 06:19:16 2016 +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<ModuleHashes> ohashes = descriptor.hashes();
- if (!ohashes.isPresent())
+ // get the recorded hashes, if any
+ if (!(mref instanceof ModuleReferenceImpl))
continue;
- ModuleHashes hashes = ohashes.get();
+ ModuleHashes hashes = ((ModuleReferenceImpl)mref).recordedHashes();
+ if (hashes == null)
+ continue;
+ 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);