diff --git a/src/main/java/org/springframework/data/mapping/model/KotlinCopyMethod.java b/src/main/java/org/springframework/data/mapping/model/KotlinCopyMethod.java index 6d4a0b650..b6cf9f7fa 100644 --- a/src/main/java/org/springframework/data/mapping/model/KotlinCopyMethod.java +++ b/src/main/java/org/springframework/data/mapping/model/KotlinCopyMethod.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import org.springframework.core.ResolvableType; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; import org.springframework.data.mapping.SimplePropertyHandler; @@ -277,11 +278,7 @@ class KotlinCopyMethod { Type parameterType = ReflectJvmMapping.getJavaType(source); - if (parameterType instanceof Class) { - return target.isAssignableFrom((Class) parameterType); - } - - return false; + return ResolvableType.forClass(target).isAssignableFrom(ResolvableType.forType(parameterType)); } /** diff --git a/src/test/java/org/springframework/data/mapping/model/KotlinCopyMethodUnitTests.java b/src/test/java/org/springframework/data/mapping/model/KotlinCopyMethodUnitTests.java index 8df0fd724..2332b5564 100644 --- a/src/test/java/org/springframework/data/mapping/model/KotlinCopyMethodUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/KotlinCopyMethodUnitTests.java @@ -72,4 +72,12 @@ class KotlinCopyMethodUnitTests { assertThat(copyMethod.shouldUsePublicCopyMethod(mappingContext.getRequiredPersistentEntity(DataClassKt.class))) .isTrue(); } + + @Test // #2324 + void shouldDetermineCopyMethodForParametrizedType() { + + Optional copyMethod = KotlinCopyMethod.findCopyMethod(ImmutableKotlinPerson.class); + + assertThat(copyMethod).isPresent(); + } } diff --git a/src/test/kotlin/org/springframework/data/mapping/model/DataClasses.kt b/src/test/kotlin/org/springframework/data/mapping/model/DataClasses.kt index 364ae60c5..3083bf883 100644 --- a/src/test/kotlin/org/springframework/data/mapping/model/DataClasses.kt +++ b/src/test/kotlin/org/springframework/data/mapping/model/DataClasses.kt @@ -15,6 +15,7 @@ */ package org.springframework.data.mapping.model +import org.springframework.data.annotation.Id import java.time.LocalDateTime import java.util.* @@ -59,3 +60,8 @@ data class WithCustomCopyMethod( ) } + +data class ImmutableKotlinPerson( + @Id val name: String, + val wasOnboardedBy: List +)