From f74b830e681ad321dda5756616371d493fe5110c 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