From f0748be138f7fc30ccfe83ebcc0dc097ac4c3cb1 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 24 Nov 2022 09:59:51 +0100 Subject: [PATCH] [jOOQ/jOOQ#14283] Kotlin Value Classes in Constructor lead to name based mapping failure --- .../org/jooq/impl/DefaultRecordMapper.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java index dc2324ec5e..0be909e60b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java @@ -486,6 +486,24 @@ public class DefaultRecordMapper implements RecordMapperget()) { + typeClassifier = kClasses + .call("getPrimaryConstructor", typeClassifier) + .call("getParameters") + + // kotlin value classes are required to have exactly 1 parameter + .call("get", 0) + .call("getType") + .call("getClassifier") + .get(); + } + } + + // [#14283] KClass.isValue() was added in kotlin 1.5 only + catch (ReflectException ignore) {} + // [#8578] If the constructor parameter is a KTypeParameter, we need an additional step to // extract the first upper bounds' classifier, which (hopefully) is a KClass parameterTypes[i] = (Class) getJavaClass.invoke(