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.
This commit is contained in:
Oliver Gierke
2016-12-21 13:59:57 +01:00
parent f4e9c2c30c
commit c8fb117e6b
2 changed files with 25 additions and 1 deletions

View File

@@ -191,7 +191,9 @@ public abstract class ReturnedType {
List<String> properties = new ArrayList<String>();
for (PropertyDescriptor descriptor : information.getInputProperties()) {
properties.add(descriptor.getName());
if (!properties.contains(descriptor.getName())) {
properties.add(descriptor.getName());
}
}
return properties;

View File

@@ -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<String> 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();
}
}