Skip to content

Commit d1948f9

Browse files
committed
Consistently apply method ordering in DefaultProjectionInformation.
Fixes #2718. $ Conflicts: $ src/main/java/org/springframework/data/projection/DefaultProjectionInformation.java
1 parent 7b322fd commit d1948f9

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

src/main/java/org/springframework/data/projection/DefaultProjectionInformation.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
import org.apache.commons.logging.Log;
3131
import org.apache.commons.logging.LogFactory;
32-
3332
import org.springframework.beans.BeanUtils;
3433
import org.springframework.core.log.LogMessage;
3534
import org.springframework.core.type.MethodMetadata;
@@ -171,7 +170,7 @@ private Stream<PropertyDescriptor> collectDescriptors() {
171170
Stream<PropertyDescriptor> allButDefaultGetters = Arrays.stream(BeanUtils.getPropertyDescriptors(type)) //
172171
.filter(it -> !hasDefaultGetter(it));
173172

174-
Stream<PropertyDescriptor> ownDescriptors = metadata.map(it -> filterAndOrder(allButDefaultGetters, it))
173+
Stream<PropertyDescriptor> ownDescriptors = metadata.map(it -> filterAndOrder(allButDefaultGetters, it)) //
175174
.orElse(allButDefaultGetters);
176175

177176
Stream<PropertyDescriptor> superTypeDescriptors = metadata.map(this::fromMetadata) //
@@ -189,18 +188,16 @@ private Stream<PropertyDescriptor> collectDescriptors() {
189188
* @param metadata must not be {@literal null}.
190189
* @return
191190
*/
192-
private static Stream<PropertyDescriptor> filterAndOrder(Stream<PropertyDescriptor> source,
193-
MethodsMetadata metadata) {
191+
private Stream<PropertyDescriptor> filterAndOrder(Stream<PropertyDescriptor> source, MethodsMetadata metadata) {
194192

195193
Map<String, Integer> orderedMethods = getMethodOrder(metadata);
196194

197-
if (orderedMethods.isEmpty()) {
198-
return source;
199-
}
195+
Stream<PropertyDescriptor> filtered = source.filter(it -> it.getReadMethod() != null)
196+
.filter(it -> it.getReadMethod().getDeclaringClass().equals(type));
200197

201-
return source.filter(descriptor -> descriptor.getReadMethod() != null)
202-
.filter(descriptor -> orderedMethods.containsKey(descriptor.getReadMethod().getName()))
203-
.sorted(Comparator.comparingInt(left -> orderedMethods.get(left.getReadMethod().getName())));
198+
return orderedMethods.isEmpty()
199+
? filtered
200+
: filtered.sorted(Comparator.comparingInt(left -> orderedMethods.get(left.getReadMethod().getName())));
204201
}
205202

206203
/**
@@ -240,7 +237,8 @@ private static Optional<MethodsMetadata> getMetadata(Class<?> type) {
240237

241238
} catch (IOException e) {
242239

243-
logger.info(LogMessage.format("Couldn't read class metadata for %s. Input property calculation might fail", type));
240+
logger.info(
241+
LogMessage.format("Couldn't read class metadata for %s. Input property calculation might fail", type));
244242
return Optional.empty();
245243
}
246244
}

0 commit comments

Comments
 (0)