From f6eacd208ae87cda12323dcb16aa9d60dac4e6d1 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 8 Feb 2024 10:24:18 +0100 Subject: [PATCH] Polishing. Add additional tests, add Javadoc to explain isEnclosingClassParameter() behavior. See #3038 Original pull request: #3039 --- .../springframework/data/mapping/Parameter.java | 15 +++++++++++---- .../data/mapping/ParameterUnitTests.java | 2 +- .../PreferredConstructorDiscovererUnitTests.java | 7 +++++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/springframework/data/mapping/Parameter.java b/src/main/java/org/springframework/data/mapping/Parameter.java index 14d53a6cf..9738f93fc 100644 --- a/src/main/java/org/springframework/data/mapping/Parameter.java +++ b/src/main/java/org/springframework/data/mapping/Parameter.java @@ -156,10 +156,8 @@ public class Parameter> { return false; } - return Objects.equals(this.name, that.name) - && Objects.equals(this.type, that.type) - && Objects.equals(this.key, that.key) - && Objects.equals(this.entity, that.entity); + return Objects.equals(this.name, that.name) && Objects.equals(this.type, that.type) + && Objects.equals(this.key, that.key) && Objects.equals(this.entity, that.entity); } @Override @@ -183,6 +181,15 @@ public class Parameter> { return property.equals(referencedProperty); } + /** + * Returns whether this parameter is a candidate for the enclosing class by checking the parameter type against + * {@link Class#getEnclosingClass()} and whether the defining class is an inner non-static one. + *

+ * Note that for a proper check the parameter position must be compared to ensure that only the first parameter (at + * index {@code 0}/zero) qualifies as enclosing class instance parameter. + * + * @return {@literal true} if this parameter is a candidate for the enclosing class instance. + */ boolean isEnclosingClassParameter() { return enclosingClassCache.get(); } diff --git a/src/test/java/org/springframework/data/mapping/ParameterUnitTests.java b/src/test/java/org/springframework/data/mapping/ParameterUnitTests.java index 3465c8f04..acf84d7f8 100755 --- a/src/test/java/org/springframework/data/mapping/ParameterUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/ParameterUnitTests.java @@ -162,7 +162,7 @@ class ParameterUnitTests

> { static class StaticType { class NonStaticInner { - NonStaticInner(StaticType outer) {} + NonStaticInner() {} } static class StaticInner { diff --git a/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java b/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java index 06b49a752..2a4ac1028 100755 --- a/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java @@ -22,6 +22,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.Iterator; +import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; @@ -99,8 +100,9 @@ class PreferredConstructorDiscovererUnitTests

> { assertThat(constructor).isNotNull(); - Parameter parameter = constructor.getParameters().iterator().next(); - assertThat(constructor.isParentParameter(parameter)).isTrue(); + List> parameters = constructor.getParameters(); + assertThat(constructor.isParentParameter(parameters.get(0))).isTrue(); + assertThat(constructor.isParentParameter(parameters.get(1))).isFalse(); } @Test // DATACMNS-1082, DATACMNS-1126 @@ -231,6 +233,7 @@ class PreferredConstructorDiscovererUnitTests

> { class Inner { + public Inner(Outer outer) {} } }