Commit 02ff063d authored by swift_gan's avatar swift_gan Committed by swift_gan

fix param decode

parent c474f8f8
...@@ -8,5 +8,15 @@ import java.lang.annotation.Target; ...@@ -8,5 +8,15 @@ import java.lang.annotation.Target;
@Target({ElementType.METHOD,ElementType.FIELD}) @Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface MethodReflectParams { public @interface MethodReflectParams {
String BOOLEAN = "boolean";
String BYTE = "byte";
String CHAR = "char";
String DOUBLE = "double";
String FLOAT = "float";
String INT = "int";
String LONG = "long";
String SHORT = "short";
String[] value(); String[] value();
} }
\ No newline at end of file
...@@ -17,7 +17,6 @@ import java.lang.reflect.Method; ...@@ -17,7 +17,6 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class HookWrapper { public class HookWrapper {
...@@ -143,11 +142,7 @@ public class HookWrapper { ...@@ -143,11 +142,7 @@ public class HookWrapper {
Class[] pars = new Class[methodReflectParams.value().length]; Class[] pars = new Class[methodReflectParams.value().length];
for (int i = 0;i < methodReflectParams.value().length; i++) { for (int i = 0;i < methodReflectParams.value().length; i++) {
try { try {
if (classLoader == null) { pars[i] = classNameToClass(methodReflectParams.value()[i], classLoader);
pars[i] = Class.forName(methodReflectParams.value()[i]);
} else {
pars[i] = Class.forName(methodReflectParams.value()[i], true, classLoader);
}
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
throw new HookErrorException("hook method pars error: " + method.getName(), e); throw new HookErrorException("hook method pars error: " + method.getName(), e);
} }
...@@ -169,11 +164,7 @@ public class HookWrapper { ...@@ -169,11 +164,7 @@ public class HookWrapper {
Class[] pars = new Class[methodReflectParams.value().length]; Class[] pars = new Class[methodReflectParams.value().length];
for (int i = 0;i < methodReflectParams.value().length; i++) { for (int i = 0;i < methodReflectParams.value().length; i++) {
try { try {
if (classLoader == null) { pars[i] = classNameToClass(methodReflectParams.value()[i], classLoader);
pars[i] = Class.forName(methodReflectParams.value()[i]);
} else {
pars[i] = Class.forName(methodReflectParams.value()[i], true, classLoader);
}
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
throw new HookErrorException("hook method pars error: " + field.getName(), e); throw new HookErrorException("hook method pars error: " + field.getName(), e);
} }
...@@ -184,6 +175,43 @@ public class HookWrapper { ...@@ -184,6 +175,43 @@ public class HookWrapper {
} }
} }
private static Class classNameToClass(String name, ClassLoader classLoader) throws ClassNotFoundException {
Class clazz;
switch (name) {
case MethodReflectParams.BOOLEAN:
clazz = boolean.class;
break;
case MethodReflectParams.BYTE:
clazz = byte.class;
break;
case MethodReflectParams.CHAR:
clazz = char.class;
break;
case MethodReflectParams.DOUBLE:
clazz = double.class;
break;
case MethodReflectParams.FLOAT:
clazz = float.class;
break;
case MethodReflectParams.INT:
clazz = int.class;
break;
case MethodReflectParams.LONG:
clazz = long.class;
break;
case MethodReflectParams.SHORT:
clazz = short.class;
break;
default:
if (classLoader == null) {
clazz = Class.forName(name);
} else {
clazz = Class.forName(name, true, classLoader);
}
}
return clazz;
}
private static boolean samePars(ClassLoader classLoader, Field field, Class[] par) { private static boolean samePars(ClassLoader classLoader, Field field, Class[] par) {
try { try {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment