From ae3869ca21e996bd7cf09ab3b6ea0a7b1401ca35 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 21 Dec 2016 13:59:57 +0100 Subject: [PATCH] DATACMNS-963 - Returned type returns distinct input properties now. We now manually filter already gathered property names in ReturnedInterface.getInputProperties() as we have to deal with duplications for properties with the same name at different levels of the inheritance hierarchy. --- .../data/repository/query/ReturnedType.java | 4 +++- .../query/ReturnedTypeUnitTests.java | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/repository/query/ReturnedType.java b/src/main/java/org/springframework/data/repository/query/ReturnedType.java index 8ff15d351..09dbadb96 100644 --- a/src/main/java/org/springframework/data/repository/query/ReturnedType.java +++ b/src/main/java/org/springframework/data/repository/query/ReturnedType.java @@ -191,7 +191,9 @@ public abstract class ReturnedType { List properties = new ArrayList(); for (PropertyDescriptor descriptor : information.getInputProperties()) { - properties.add(descriptor.getName()); + if (!properties.contains(descriptor.getName())) { + properties.add(descriptor.getName()); + } } return properties; diff --git a/src/test/java/org/springframework/data/repository/query/ReturnedTypeUnitTests.java b/src/test/java/org/springframework/data/repository/query/ReturnedTypeUnitTests.java index f3d3cbaa2..384f24e83 100644 --- a/src/test/java/org/springframework/data/repository/query/ReturnedTypeUnitTests.java +++ b/src/test/java/org/springframework/data/repository/query/ReturnedTypeUnitTests.java @@ -179,6 +179,20 @@ public class ReturnedTypeUnitTests { assertThat(type.isProjecting(), is(false)); } + /** + * @see DATACMNS-963 + */ + @Test + public void detectsDistinctInputProperties() { + + ReturnedType type = ReturnedType.of(Child.class, Object.class, new SpelAwareProxyProjectionFactory()); + + List properties = type.getInputProperties(); + + assertThat(properties, hasSize(1)); + assertThat(properties, contains("firstname")); + } + private static ReturnedType getReturnedType(String methodName, Class... parameters) throws Exception { return getQueryMethod(methodName, parameters).getResultProcessor().getReturnedType(); } @@ -262,4 +276,12 @@ public class ReturnedTypeUnitTests { @Value("#{target.firstname + ' ' + target.lastname}") String getFullName(); } + + static interface Parent { + String getFirstname(); + } + + static interface Child extends Parent { + String getFirstname(); + } }