From 634f5c27926e28a024cfbf8b478b2dab6cfa02b2 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 25 Jun 2018 18:15:59 -0700 Subject: [PATCH] Ensure when equals() is implemented so is hashCode() Update classes that override `equals()` to ensure that they also implement `hashCode()`. Issue: SPR-16968 --- .../springframework/aop/support/MethodMatchers.java | 8 ++++++++ .../beans/factory/config/DependencyDescriptor.java | 12 +++++++++++- .../jms/connection/CachingConnectionFactory.java | 10 ++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/spring-aop/src/main/java/org/springframework/aop/support/MethodMatchers.java b/spring-aop/src/main/java/org/springframework/aop/support/MethodMatchers.java index 30de25c2c1..5f6032087f 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/MethodMatchers.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/MethodMatchers.java @@ -192,6 +192,14 @@ public abstract class MethodMatchers { return (targetClass != null && this.cf2.matches(targetClass)); } + @Override + public int hashCode() { + int hashCode = 17; + hashCode = 37 * hashCode + this.cf1.hashCode(); + hashCode = 37 * hashCode + this.cf2.hashCode(); + return hashCode; + } + @Override public boolean equals(Object other) { if (this == other) { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java index 995c0906c9..2496877802 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java @@ -39,6 +39,7 @@ import org.springframework.core.MethodParameter; import org.springframework.core.ParameterNameDiscoverer; import org.springframework.core.ResolvableType; import org.springframework.lang.Nullable; +import org.springframework.util.ObjectUtils; /** * Descriptor for a specific dependency that is about to be injected. @@ -374,7 +375,6 @@ public class DependencyDescriptor extends InjectionPoint implements Serializable } } - @Override public boolean equals(Object other) { if (this == other) { @@ -388,6 +388,16 @@ public class DependencyDescriptor extends InjectionPoint implements Serializable this.nestingLevel == otherDesc.nestingLevel && this.containingClass == otherDesc.containingClass); } + @Override + public int hashCode() { + final int prime = 31; + int result = ObjectUtils.nullSafeHashCode(this.containingClass); + result = prime * result + Boolean.hashCode(this.eager); + result = prime * result + this.nestingLevel; + result = prime * result + Boolean.hashCode(this.required); + return result; + } + //--------------------------------------------------------------------- // Serialization support diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java index 1c3dd8fe6d..e289706aac 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java @@ -580,6 +580,16 @@ public class CachingConnectionFactory extends SingleConnectionFactory { this.durable == otherKey.durable); } + @Override + public int hashCode() { + int prime = 31; + int result = ObjectUtils.nullSafeHashCode(this.selector); + result = prime * result + ObjectUtils.nullSafeHashCode(this.noLocal); + result = prime * result + ObjectUtils.nullSafeHashCode(this.subscription); + result = prime * result + Boolean.hashCode(this.durable); + return result; + } + @Override public String toString() { return super.toString() + " [selector=" + this.selector + ", noLocal=" + this.noLocal +