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;
@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
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();
}
\ No newline at end of file
......@@ -17,7 +17,6 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class HookWrapper {
......@@ -143,11 +142,7 @@ public class HookWrapper {
Class[] pars = new Class[methodReflectParams.value().length];
for (int i = 0;i < methodReflectParams.value().length; i++) {
try {
if (classLoader == null) {
pars[i] = Class.forName(methodReflectParams.value()[i]);
} else {
pars[i] = Class.forName(methodReflectParams.value()[i], true, classLoader);
}
pars[i] = classNameToClass(methodReflectParams.value()[i], classLoader);
} catch (ClassNotFoundException e) {
throw new HookErrorException("hook method pars error: " + method.getName(), e);
}
......@@ -169,11 +164,7 @@ public class HookWrapper {
Class[] pars = new Class[methodReflectParams.value().length];
for (int i = 0;i < methodReflectParams.value().length; i++) {
try {
if (classLoader == null) {
pars[i] = Class.forName(methodReflectParams.value()[i]);
} else {
pars[i] = Class.forName(methodReflectParams.value()[i], true, classLoader);
}
pars[i] = classNameToClass(methodReflectParams.value()[i], classLoader);
} catch (ClassNotFoundException e) {
throw new HookErrorException("hook method pars error: " + field.getName(), e);
}
......@@ -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) {
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