72 lines
2.7 KiB
Diff
72 lines
2.7 KiB
Diff
|
|
From dcae455d23cd5a5f3c16b8a00547d85d170ebe4b Mon Sep 17 00:00:00 2001
|
||
|
|
Date: Mon, 6 Feb 2023 17:17:56 +0800
|
||
|
|
Subject: [PATCH] 8275509: ModuleDescriptor.hashCode isn't reproducible across
|
||
|
|
builds
|
||
|
|
|
||
|
|
---
|
||
|
|
.../java/lang/module/ModuleDescriptor.java | 20 +++++++++++++++----
|
||
|
|
1 file changed, 16 insertions(+), 4 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java b/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java
|
||
|
|
index 93ac73656..39f68ac95 100644
|
||
|
|
--- a/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java
|
||
|
|
+++ b/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java
|
||
|
|
@@ -327,7 +327,7 @@ public class ModuleDescriptor
|
||
|
|
*/
|
||
|
|
@Override
|
||
|
|
public int hashCode() {
|
||
|
|
- int hash = name.hashCode() * 43 + mods.hashCode();
|
||
|
|
+ int hash = name.hashCode() * 43 + modsHashCode(mods);
|
||
|
|
if (compiledVersion != null)
|
||
|
|
hash = hash * 43 + compiledVersion.hashCode();
|
||
|
|
if (rawCompiledVersion != null)
|
||
|
|
@@ -505,7 +505,7 @@ public class ModuleDescriptor
|
||
|
|
*/
|
||
|
|
@Override
|
||
|
|
public int hashCode() {
|
||
|
|
- int hash = mods.hashCode();
|
||
|
|
+ int hash = modsHashCode(mods);
|
||
|
|
hash = hash * 43 + source.hashCode();
|
||
|
|
return hash * 43 + targets.hashCode();
|
||
|
|
}
|
||
|
|
@@ -708,7 +708,7 @@ public class ModuleDescriptor
|
||
|
|
*/
|
||
|
|
@Override
|
||
|
|
public int hashCode() {
|
||
|
|
- int hash = mods.hashCode();
|
||
|
|
+ int hash = modsHashCode(mods);
|
||
|
|
hash = hash * 43 + source.hashCode();
|
||
|
|
return hash * 43 + targets.hashCode();
|
||
|
|
}
|
||
|
|
@@ -2261,7 +2261,7 @@ public class ModuleDescriptor
|
||
|
|
int hc = hash;
|
||
|
|
if (hc == 0) {
|
||
|
|
hc = name.hashCode();
|
||
|
|
- hc = hc * 43 + Objects.hashCode(modifiers);
|
||
|
|
+ hc = hc * 43 + modsHashCode(modifiers);
|
||
|
|
hc = hc * 43 + requires.hashCode();
|
||
|
|
hc = hc * 43 + Objects.hashCode(packages);
|
||
|
|
hc = hc * 43 + exports.hashCode();
|
||
|
|
@@ -2546,6 +2546,18 @@ public class ModuleDescriptor
|
||
|
|
.collect(Collectors.joining(" "));
|
||
|
|
}
|
||
|
|
|
||
|
|
+ /**
|
||
|
|
+ * Generates and returns a hashcode for the enum instances. The returned hashcode
|
||
|
|
+ * is a value based on the {@link Enum#name() name} of each enum instance.
|
||
|
|
+ */
|
||
|
|
+ private static int modsHashCode(Iterable<? extends Enum<?>> enums) {
|
||
|
|
+ int h = 0;
|
||
|
|
+ for (Enum<?> e : enums) {
|
||
|
|
+ h = h * 43 + Objects.hashCode(e.name());
|
||
|
|
+ }
|
||
|
|
+ return h;
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
private static <T extends Object & Comparable<? super T>>
|
||
|
|
int compare(T obj1, T obj2) {
|
||
|
|
if (obj1 != null) {
|
||
|
|
--
|
||
|
|
2.23.0
|
||
|
|
|