From 2935aa9fd8192a016b76edfa45dfee9334fba298 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Thu, 8 Oct 2015 13:00:17 +0200 Subject: [PATCH] JAVA-942: Incorrect implementation of UserType.hashCode() --- changelog/README.md | 2 ++ .../main/java/com/datastax/driver/core/UserType.java | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/changelog/README.md b/changelog/README.md index 2ad1fe4146e..0eb93e289cc 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -2,6 +2,8 @@ ### 2.2.0-rc4 (in progress) +- [bug] Incorrect implementation of UserType.hashCode() (JAVA-942) + Merged from 2.0 branch: - [improvement] Log streamid at the trace level on sending request and receiving response (JAVA-718) diff --git a/driver-core/src/main/java/com/datastax/driver/core/UserType.java b/driver-core/src/main/java/com/datastax/driver/core/UserType.java index c96054afc52..17991a3cd72 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/UserType.java +++ b/driver-core/src/main/java/com/datastax/driver/core/UserType.java @@ -170,8 +170,12 @@ public boolean isFrozen() { } @Override - public final int hashCode() { - return Arrays.hashCode(new Object[]{ name, keyspace, typeName, byIdx }); + public int hashCode() { + int result = name.hashCode(); + result = 31 * result + keyspace.hashCode(); + result = 31 * result + typeName.hashCode(); + result = 31 * result + Arrays.hashCode(byIdx); + return result; } @Override @@ -183,7 +187,8 @@ public final boolean equals(Object o) { // Note: we don't test byName because it's redundant with byIdx in practice, // but also because the map holds 'int[]' which don't have proper equal. - return keyspace.equals(other.keyspace) + return name.equals(other.name) + && keyspace.equals(other.keyspace) && typeName.equals(other.typeName) && Arrays.equals(byIdx, other.byIdx); }