From 4bfe4278f33a13fa156f15a775fb66cc2c635ad5 Mon Sep 17 00:00:00 2001 From: redkale Date: Sat, 19 Aug 2023 09:01:09 +0800 Subject: [PATCH] Copier --- .../org/redkale/boot/LoggingBaseHandler.java | 1 + src/main/java/org/redkale/util/Copier.java | 50 +++++++++++-------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/redkale/boot/LoggingBaseHandler.java b/src/main/java/org/redkale/boot/LoggingBaseHandler.java index fa8d56c6a..b7b51be57 100644 --- a/src/main/java/org/redkale/boot/LoggingBaseHandler.java +++ b/src/main/java/org/redkale/boot/LoggingBaseHandler.java @@ -125,6 +125,7 @@ public abstract class LoggingBaseHandler extends Handler { ps.println("sun.level = INFO"); ps.println("com.sun.level = INFO"); ps.println("javax.level = INFO"); + ps.println("org.junit.level = INFO"); ps.println(handlerName + ".level = FINEST"); ps.println(handlerName + ".formatter = " + LoggingFormater.class.getName()); LogManager.getLogManager().readConfiguration(new ByteArrayInputStream(out.toByteArray())); diff --git a/src/main/java/org/redkale/util/Copier.java b/src/main/java/org/redkale/util/Copier.java index 988d86183..47c4a34d5 100644 --- a/src/main/java/org/redkale/util/Copier.java +++ b/src/main/java/org/redkale/util/Copier.java @@ -740,6 +740,8 @@ public interface Copier extends BiFunction { mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); } + Predicate simpler = t -> t.isPrimitive() || t == String.class || Number.class.isAssignableFrom(t); + for (java.lang.reflect.Field field : srcClass.getFields()) { if (Modifier.isStatic(field.getModifiers())) { continue; @@ -795,7 +797,11 @@ public interface Copier extends BiFunction { java.lang.reflect.Field setField = null; try { setField = destClass.getField(dfname); - if (!field.getType().equals(setField.getType())) { + if (field.getType() == setField.getType()) { + needTypeCast = false; + } else if (simpler.test(field.getType()) && simpler.test(setField.getType())) { + needTypeCast = true; + } else if (!field.getType().equals(setField.getType())) { if (allowTypeCast) { needTypeCast = true; } else { @@ -810,31 +816,31 @@ public interface Copier extends BiFunction { continue; //setter方法带有非RuntimeException异常 } } catch (Exception e2) { - if (allowTypeCast) { - try { - for (java.lang.reflect.Method m : destClass.getMethods()) { - if (Modifier.isStatic(m.getModifiers())) { - continue; - } - if (Utility.contains(m.getExceptionTypes(), throwPredicate)) { - continue; //setter方法带有非RuntimeException异常 - } - if (m.getParameterTypes().length != 1) { - continue; - } - if (m.getName().equals(setterMethodName)) { - setter = m; - needTypeCast = true; - break; - } - } - if (setter == null) { + try { + for (java.lang.reflect.Method m : destClass.getMethods()) { + if (Modifier.isStatic(m.getModifiers())) { continue; } - } catch (Exception e3) { + if (Utility.contains(m.getExceptionTypes(), throwPredicate)) { + continue; //setter方法带有非RuntimeException异常 + } + if (m.getParameterTypes().length != 1) { + continue; + } + if (m.getName().equals(setterMethodName)) { + if (simpler.test(field.getType()) && simpler.test(setField.getType())) { + setter = m; + needTypeCast = true; + } else if (!allowTypeCast) { + setter = null; + } + break; + } + } + if (setter == null) { continue; } - } else { + } catch (Exception e3) { continue; } }