Skip to content

Commit 08cb9e8

Browse files
committed
Polishing.
Use ResolvableType for type assignability check when resolving Type from a KType. See #2324.
1 parent 524a33a commit 08cb9e8

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

src/main/java/org/springframework/data/mapping/model/KotlinCopyMethod.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.Optional;
3434
import java.util.stream.Collectors;
3535

36+
import org.springframework.core.ResolvableType;
3637
import org.springframework.data.mapping.PersistentEntity;
3738
import org.springframework.data.mapping.PersistentProperty;
3839
import org.springframework.data.mapping.SimplePropertyHandler;
@@ -277,11 +278,7 @@ private static boolean isAssignableFrom(Class<?> target, KType source) {
277278

278279
Type parameterType = ReflectJvmMapping.getJavaType(source);
279280

280-
if (parameterType instanceof Class) {
281-
return target.isAssignableFrom((Class<?>) parameterType);
282-
}
283-
284-
return false;
281+
return ResolvableType.forClass(target).isAssignableFrom(ResolvableType.forType(parameterType));
285282
}
286283

287284
/**

src/test/java/org/springframework/data/mapping/model/KotlinCopyMethodUnitTests.java

+8
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,12 @@ void shouldUsePublicKotlinMethodForSinglePropertyEntities() {
7272
assertThat(copyMethod.shouldUsePublicCopyMethod(mappingContext.getRequiredPersistentEntity(DataClassKt.class)))
7373
.isTrue();
7474
}
75+
76+
@Test // #2324
77+
void shouldDetermineCopyMethodForParametrizedType() {
78+
79+
Optional<KotlinCopyMethod> copyMethod = KotlinCopyMethod.findCopyMethod(ImmutableKotlinPerson.class);
80+
81+
assertThat(copyMethod).isPresent();
82+
}
7583
}

src/test/kotlin/org/springframework/data/mapping/model/DataClasses.kt

+6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.data.mapping.model
1717

18+
import org.springframework.data.annotation.Id
1819
import java.time.LocalDateTime
1920
import java.util.*
2021

@@ -59,3 +60,8 @@ data class WithCustomCopyMethod(
5960
)
6061

6162
}
63+
64+
data class ImmutableKotlinPerson(
65+
@Id val name: String,
66+
val wasOnboardedBy: List<ImmutableKotlinPerson>
67+
)

0 commit comments

Comments
 (0)