From 97e17f07536d20c1c413c0ce543a6d2012989ee1 Mon Sep 17 00:00:00 2001 From: dhc Date: Sun, 12 May 2024 17:20:37 +0800 Subject: [PATCH] =?UTF-8?q?fix=20#I9ONI4=20=E5=9C=A8Kotlin=E4=B8=AD?= =?UTF-8?q?=EF=BC=8CLambdaUtil=20=E6=97=A0=E6=B3=95=E9=80=9A=E8=BF=87lambd?= =?UTF-8?q?a=E8=A1=A8=E8=BE=BE=E5=BC=8F=E6=AD=A3=E7=A1=AE=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=88=B0=E5=AF=B9=E8=B1=A1=E7=9A=84=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mybatisflex/core/util/LambdaUtil.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/LambdaUtil.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/LambdaUtil.java index b3ee4ef0..a8ed97f5 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/LambdaUtil.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/LambdaUtil.java @@ -22,6 +22,7 @@ import com.mybatisflex.core.table.TableInfoFactory; import java.io.Serializable; import java.lang.invoke.SerializedLambda; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -37,6 +38,16 @@ public class LambdaUtil { public static String getFieldName(LambdaGetter getter) { SerializedLambda lambda = getSerializedLambda(getter); String methodName = lambda.getImplMethodName(); + + if (methodName.contains("$lambda$") && lambda.getCapturedArgCount() == 1) { + Object arg = lambda.getCapturedArg(0); + if (arg.getClass().getSuperclass().getName().equals("kotlin.jvm.internal.MutablePropertyReference1Impl")) { + try { + return (String) arg.getClass().getMethod("getName").invoke(arg); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { + } + } + } return StringUtil.methodToProperty(methodName); } @@ -60,10 +71,10 @@ public class LambdaUtil { public static QueryColumn getQueryColumn(LambdaGetter getter) { ClassLoader classLoader = getter.getClass().getClassLoader(); SerializedLambda lambda = getSerializedLambda(getter); - String methodName = lambda.getImplMethodName(); Class entityClass = getImplClass(lambda, classLoader); TableInfo tableInfo = TableInfoFactory.ofEntityClass(entityClass); - return tableInfo.getQueryColumnByProperty(StringUtil.methodToProperty(methodName)); + String propertyName = getFieldName(getter); + return tableInfo.getQueryColumnByProperty(propertyName); }