From 2f463d4c8b0e9a515cb9c0548aa752678f722a7c Mon Sep 17 00:00:00 2001 From: Pavlin Radoslavov Date: Fri, 6 May 2016 12:05:47 -0700 Subject: [PATCH] Fix divergent equals and hashCode behavior Calling Objects.hash with a byte[] will call the identity hashCode on the byte[] and this doesn't agree with the use of Objects.deepEquals in equals. Bug caught by error prone. Also, replaced usage of Objects.deepEquals(mServiceDataUuid, ...) with Objects.equals(mServiceDataUuid, ...), because mServiceDataUuid is an Object of type ParcelUuid. Bug: 28585195 Change-Id: Id92734874339985fedafe1a28286a6a4dcd88d3b --- core/java/android/bluetooth/le/ScanFilter.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/core/java/android/bluetooth/le/ScanFilter.java b/core/java/android/bluetooth/le/ScanFilter.java index 92a38171a160..17a802d59f4f 100644 --- a/core/java/android/bluetooth/le/ScanFilter.java +++ b/core/java/android/bluetooth/le/ScanFilter.java @@ -385,9 +385,13 @@ public final class ScanFilter implements Parcelable { @Override public int hashCode() { - return Objects.hash(mDeviceName, mDeviceAddress, mManufacturerId, mManufacturerData, - mManufacturerDataMask, mServiceDataUuid, mServiceData, mServiceDataMask, - mServiceUuid, mServiceUuidMask); + return Objects.hash(mDeviceName, mDeviceAddress, mManufacturerId, + Arrays.hashCode(mManufacturerData), + Arrays.hashCode(mManufacturerDataMask), + mServiceDataUuid, + Arrays.hashCode(mServiceData), + Arrays.hashCode(mServiceDataMask), + mServiceUuid, mServiceUuidMask); } @Override @@ -401,10 +405,10 @@ public final class ScanFilter implements Parcelable { ScanFilter other = (ScanFilter) obj; return Objects.equals(mDeviceName, other.mDeviceName) && Objects.equals(mDeviceAddress, other.mDeviceAddress) && - mManufacturerId == other.mManufacturerId && + mManufacturerId == other.mManufacturerId && Objects.deepEquals(mManufacturerData, other.mManufacturerData) && Objects.deepEquals(mManufacturerDataMask, other.mManufacturerDataMask) && - Objects.deepEquals(mServiceDataUuid, other.mServiceDataUuid) && + Objects.equals(mServiceDataUuid, other.mServiceDataUuid) && Objects.deepEquals(mServiceData, other.mServiceData) && Objects.deepEquals(mServiceDataMask, other.mServiceDataMask) && Objects.equals(mServiceUuid, other.mServiceUuid) && -- 2.11.0