From 1d4b8db110b0faad23463120dfe72db00bca6f30 Mon Sep 17 00:00:00 2001 From: Mikhail2048 Date: Sat, 21 Sep 2024 18:58:05 +0300 Subject: [PATCH] Added Lazy wrapper for ReturnType#isDto --- .../data/repository/query/ReturnedType.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) 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 796a6acdd0..b3bf232935 100644 --- a/src/main/java/org/springframework/data/repository/query/ReturnedType.java +++ b/src/main/java/org/springframework/data/repository/query/ReturnedType.java @@ -29,6 +29,7 @@ import org.springframework.data.mapping.model.PreferredConstructorDiscoverer; import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.projection.ProjectionInformation; +import org.springframework.data.util.Lazy; import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -198,12 +199,14 @@ public List getInputProperties() { * A {@link ReturnedType} that's backed by an actual class. * * @author Oliver Gierke + * @author Mikhail Polivakha * @since 1.12 */ private static final class ReturnedClass extends ReturnedType { private static final Set> VOID_TYPES = new HashSet<>(Arrays.asList(Void.class, void.class)); + private final Lazy isDto; private final Class type; private final List inputProperties; @@ -222,6 +225,15 @@ public ReturnedClass(Class returnedType, Class domainType) { Assert.isTrue(!returnedType.isInterface(), "Returned type must not be an interface"); this.type = returnedType; + this.isDto = Lazy.of(() -> + !Object.class.equals(type) && // + !type.isEnum() && // + !isDomainSubtype() && // + !isPrimitiveOrWrapper() && // + !Number.class.isAssignableFrom(type) && // + !VOID_TYPES.contains(type) && // + !type.getPackage().getName().startsWith("java.") + ); this.inputProperties = detectConstructorParameterNames(returnedType); } @@ -271,13 +283,7 @@ private List detectConstructorParameterNames(Class type) { } private boolean isDto() { - return !Object.class.equals(type) && // - !type.isEnum() && // - !isDomainSubtype() && // - !isPrimitiveOrWrapper() && // - !Number.class.isAssignableFrom(type) && // - !VOID_TYPES.contains(type) && // - !type.getPackage().getName().startsWith("java."); + return isDto.get(); } private boolean isDomainSubtype() {