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) {} } }