From 8869ca27b1ad1d0ce0e91664ba7226f929a00475 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Wed, 5 Oct 2022 16:58:08 +0200 Subject: [PATCH] Ensure ClassPathResources with same path have same hash code This commit aligns the hashCode() implementation in ClassPathResource with the recent change to the logic in equals(). See gh-29263 --- .../org/springframework/core/io/ClassPathResource.java | 2 +- .../springframework/core/io/ClassPathResourceTests.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-core/src/main/java/org/springframework/core/io/ClassPathResource.java b/spring-core/src/main/java/org/springframework/core/io/ClassPathResource.java index d9b6dc1fe4..552395f050 100644 --- a/spring-core/src/main/java/org/springframework/core/io/ClassPathResource.java +++ b/spring-core/src/main/java/org/springframework/core/io/ClassPathResource.java @@ -286,7 +286,7 @@ public class ClassPathResource extends AbstractFileResolvingResource { */ @Override public int hashCode() { - return this.path.hashCode(); + return this.absolutePath.hashCode(); } } diff --git a/spring-core/src/test/java/org/springframework/core/io/ClassPathResourceTests.java b/spring-core/src/test/java/org/springframework/core/io/ClassPathResourceTests.java index 3da376ab8f..cef6a34f05 100644 --- a/spring-core/src/test/java/org/springframework/core/io/ClassPathResourceTests.java +++ b/spring-core/src/test/java/org/springframework/core/io/ClassPathResourceTests.java @@ -90,6 +90,14 @@ class ClassPathResourceTests { assertThat(resource2).isEqualTo(resource1); } + @Test + void resourcesWithEquivalentAbsolutePathsHaveSameHashCode() { + ClassPathResource resource1 = new ClassPathResource("Resource.class", getClass()); + ClassPathResource resource2 = new ClassPathResource("org/springframework/core/io/Resource.class", getClass().getClassLoader()); + assertThat(resource1.getPath()).isEqualTo(resource2.getPath()); + assertThat(resource1).hasSameHashCodeAs(resource2); + } + @Test void resourcesWithEquivalentAbsolutePathsFromDifferentClassLoadersAreNotEqual() { class SimpleThrowawayClassLoader extends OverridingClassLoader {