From 999d26436b8327143a7ba620ec6e3834634d7b0c Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 3 Apr 2018 10:39:37 +0200 Subject: [PATCH] DATACMNS-1284 - Polishing. Backport of 06116b7. Related ticket: DATACMNS-1206. Original commit: 06116b7. --- .../DefaultProjectionInformation.java | 11 +++++++++-- .../DefaultProjectionInformationUnitTests.java | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/projection/DefaultProjectionInformation.java b/src/main/java/org/springframework/data/projection/DefaultProjectionInformation.java index 73cdb1106..4f83e7cbe 100644 --- a/src/main/java/org/springframework/data/projection/DefaultProjectionInformation.java +++ b/src/main/java/org/springframework/data/projection/DefaultProjectionInformation.java @@ -122,7 +122,14 @@ class DefaultProjectionInformation implements ProjectionInformation { final Map orders = getMethodOrder(metadata); for (PropertyDescriptor descriptor : filterDefaultMethods(BeanUtils.getPropertyDescriptors(type))) { - if (metadata == null || orders.containsKey(descriptor.getReadMethod().getName())) { + + Method readMethod = descriptor.getReadMethod(); + + if (readMethod == null) { + continue; + } + + if (metadata == null || orders.containsKey(readMethod.getName())) { result.add(descriptor); } } @@ -237,6 +244,6 @@ class DefaultProjectionInformation implements ProjectionInformation { Method method = descriptor.getReadMethod(); - return method == null ? false : ReflectionUtils.isDefaultMethod(method); + return method != null && ReflectionUtils.isDefaultMethod(method); } } diff --git a/src/test/java/org/springframework/data/projection/DefaultProjectionInformationUnitTests.java b/src/test/java/org/springframework/data/projection/DefaultProjectionInformationUnitTests.java index 3fc1f2944..ca3310181 100644 --- a/src/test/java/org/springframework/data/projection/DefaultProjectionInformationUnitTests.java +++ b/src/test/java/org/springframework/data/projection/DefaultProjectionInformationUnitTests.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import org.junit.Test; +import org.springframework.beans.factory.annotation.Value; /** * Unit tests for {@link DefaultProjectionInformation}. @@ -40,6 +41,14 @@ public class DefaultProjectionInformationUnitTests { assertThat(toNames(information.getInputProperties()), contains("firstname", "lastname")); } + @Test // DATACMNS-1206, DATACMNS-1284 + public void omitsInputPropertiesAcceptingArguments() { + + ProjectionInformation information = new DefaultProjectionInformation(ProjectionAcceptingArguments.class); + + assertThat(toNames(information.getInputProperties()), contains("lastname")); + } + @Test // DATACMNS-89 public void discoversAllInputProperties() { @@ -83,6 +92,14 @@ public class DefaultProjectionInformationUnitTests { String getLastname(); } + interface ProjectionAcceptingArguments { + + @Value("foo") + String getFirstname(int i); + + String getLastname(); + } + interface ExtendedProjection extends CustomerProjection { int getAge();