From b5084ea642f04b73c1516d9d67fc00e61ce45e66 Mon Sep 17 00:00:00 2001 From: "cong.wang" Date: Wed, 17 Jul 2024 18:15:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3Reflector=E4=B8=AD=E7=9A=84pa?= =?UTF-8?q?ramArgTypeMatch=E5=8C=B9=E9=85=8D=E7=B1=BB=E5=9E=8B=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=90=91=E4=B8=8A=E6=8F=90=E5=8D=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../googlecode/aviator/utils/Reflector.java | 62 +++++++++++++------ 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/googlecode/aviator/utils/Reflector.java b/src/main/java/com/googlecode/aviator/utils/Reflector.java index e41daecf..c87b1c02 100644 --- a/src/main/java/com/googlecode/aviator/utils/Reflector.java +++ b/src/main/java/com/googlecode/aviator/utils/Reflector.java @@ -20,14 +20,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import com.googlecode.aviator.AviatorEvaluatorInstance; import com.googlecode.aviator.Feature; @@ -621,11 +614,25 @@ public static Object[] boxArgs(final Class[] params, final Object[] args) { return ret; } - private static Set> longClasses = asSet(Long.class, long.class, Integer.class, int.class, - Byte.class, byte.class, Short.class, short.class, Byte.class, byte.class); + // private static Set> longClasses = asSet(Long.class, long.class, Integer.class, + // int.class, + // Byte.class, byte.class, Short.class, short.class, Byte.class, byte.class); - private static Set> doubleClasses = - asSet(Double.class, double.class, Float.class, float.class); + // private static Set> doubleClasses = + // asSet(Double.class, double.class, Float.class, float.class); + + private static final Set> longClasses = + new HashSet<>(Arrays.asList(long.class, Long.class)); + private static final Set> doubleClasses = + new HashSet<>(Arrays.asList(double.class, Double.class)); + private static final Set> floatClasses = + new HashSet<>(Arrays.asList(float.class, Float.class)); + private static final Set> intClasses = + new HashSet<>(Arrays.asList(int.class, Integer.class)); + private static final Set> shortClasses = + new HashSet<>(Arrays.asList(short.class, Short.class)); + private static final Set> byteClasses = + new HashSet<>(Arrays.asList(byte.class, Byte.class)); private static Set> asSet(final Class... classes) { @@ -644,14 +651,31 @@ static public boolean paramArgTypeMatch(final Class paramType, final Class return true; } - boolean ret = longClasses.contains(paramType) && longClasses.contains(argType); - if (ret) { - return ret; + if (longClasses.contains(paramType) + && (longClasses.contains(argType) || intClasses.contains(argType) + || shortClasses.contains(argType) || byteClasses.contains(argType))) { + return true; } - - ret = doubleClasses.contains(paramType) && doubleClasses.contains(argType); - if (ret) { - return ret; + if (doubleClasses.contains(paramType) + && (doubleClasses.contains(argType) || floatClasses.contains(argType) + || longClasses.contains(argType) || intClasses.contains(argType) + || shortClasses.contains(argType) || byteClasses.contains(argType))) { + return true; + } + if (floatClasses.contains(paramType) + && (floatClasses.contains(argType) || intClasses.contains(argType) + || shortClasses.contains(argType) || byteClasses.contains(argType))) { + return true; + } + if (intClasses.contains(paramType) && (intClasses.contains(argType) + || shortClasses.contains(argType) || byteClasses.contains(argType))) { + return true; + } + if (shortClasses.contains(paramType) && shortClasses.contains(argType)) { + return true; + } + if (byteClasses.contains(paramType) && byteClasses.contains(argType)) { + return true; } if (paramType == char.class) {