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 b6cf9f7fa..ca1b42688 100644 --- a/src/main/java/org/springframework/data/mapping/model/KotlinCopyMethod.java +++ b/src/main/java/org/springframework/data/mapping/model/KotlinCopyMethod.java @@ -278,7 +278,8 @@ class KotlinCopyMethod { Type parameterType = ReflectJvmMapping.getJavaType(source); - return ResolvableType.forClass(target).isAssignableFrom(ResolvableType.forType(parameterType)); + Class rawClass = ResolvableType.forType(parameterType).getRawClass(); + return rawClass == null || target.isAssignableFrom(rawClass); } /** 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 2332b5564..f6937aa37 100644 --- a/src/test/java/org/springframework/data/mapping/model/KotlinCopyMethodUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/KotlinCopyMethodUnitTests.java @@ -73,11 +73,10 @@ class KotlinCopyMethodUnitTests { .isTrue(); } - @Test // #2324 + @Test // #2324, #2336 void shouldDetermineCopyMethodForParametrizedType() { - Optional copyMethod = KotlinCopyMethod.findCopyMethod(ImmutableKotlinPerson.class); - - assertThat(copyMethod).isPresent(); + assertThat(KotlinCopyMethod.findCopyMethod(ImmutableKotlinPerson.class)).isPresent(); + assertThat(KotlinCopyMethod.findCopyMethod(DataClassWithParametrizedCollections.class)).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 3083bf883..9166082e5 100644 --- a/src/test/kotlin/org/springframework/data/mapping/model/DataClasses.kt +++ b/src/test/kotlin/org/springframework/data/mapping/model/DataClasses.kt @@ -65,3 +65,12 @@ data class ImmutableKotlinPerson( @Id val name: String, val wasOnboardedBy: List ) + +data class DataClassWithParametrizedCollections( + val id: String? = null, + val flags: Map, + val stringStringFlags: Map, + val parametrized: List, + val anyList: List<*> +) +