package reflection; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; import reflection.targets.ClassTarget; /** * A rather 'add-hoc' created ClassInvoker containing various bits and pieces of reflective code that calls (mostly) methods in the * class API. * <p> * This is renamed from 'ClassInvoker' which has since been replaced with a more systematic 'generated' Invoker class. * * @author kdvolder */ public class AdHocClassInvoker { static ClassTarget t = new ClassTarget(); public Field callGetDeclaredField(Class<?> clazz, String fieldName) throws Exception { return clazz.getDeclaredField(fieldName); } public Field callGetDeclaredFieldForThisName(Class<?> clazz, String name) throws Exception { Field f = clazz.getDeclaredField(name); return f; } public List<Field> callClassGetDeclaredFields(Class<?> clazz) throws Exception { return Arrays.asList(clazz.getDeclaredFields()); } public List<Field> callClassGetFields(Class<?> clazz) throws Exception { return Arrays.asList(clazz.getFields()); } public int callClassGetModifiers(Class<?> clazz) throws Exception { System.out.println(clazz); System.out.println(clazz.getModifiers()); return clazz.getModifiers(); } public Field callClassGetField(Class<?> clazz, String name) throws Exception { return clazz.getField(name); } public Field callClassGetDeclaredField(Class<?> clazz, String name) throws Exception { return clazz.getDeclaredField(name); } public Method callGetDeclaredMethod(Class<?> clazz, String name, Class<?>... params) throws Exception { return clazz.getDeclaredMethod(name, params); } public Method callGetDeclaredMethodForThisName(Class<?> clazz, String name, Class<?>... paramTypes) throws Exception { Method m = clazz.getDeclaredMethod(name, paramTypes); return m; } public List<Method> callGetDeclaredMethods(Class<?> clazz) throws Exception { return Arrays.asList(clazz.getDeclaredMethods()); } public List<Method> callGetMethods(Class<?> clazz) throws Exception { return Arrays.asList(clazz.getMethods()); } public Method callGetMethod(Class<?> clazz, String name, Class<?>... params) throws SecurityException, NoSuchMethodException { return clazz.getMethod(name, params); } public Constructor<?> callGetDeclaredConstructor(Class<?> clazz, Class<?>... params) throws SecurityException, NoSuchMethodException { return clazz.getDeclaredConstructor(params); } public Constructor<?>[] callGetDeclaredConstructors(Class<?> clazz) throws SecurityException, NoSuchMethodException { return clazz.getDeclaredConstructors(); } public <T> T callNewInstance(Constructor<T> ctor, Object... params) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { return ctor.newInstance(params); } /** * Calls private method in reloadable class, can override access constraints if requested to do so. */ public String callMethodWithAccess(String whichMethod, boolean setAccess) throws Exception { Method theMethod = ClassTarget.class.getDeclaredMethod(whichMethod); if (setAccess) { theMethod.setAccessible(true); } return (String) theMethod.invoke(t); } public Object getFieldValue(Field f) throws Exception { return f.get(t); } public Object runThisMethod(Method m) throws Exception { return m.invoke(t); } public Object runThisMethodOn(Object t, Method m, Object... args) throws Exception { return m.invoke(t, args); } public Object runThisMethodWithParam(Method m, Object[] params) throws Exception { return m.invoke(t, params); } public void setFieldValue(Field f, Object newValue) throws Exception { f.set(t, newValue); } public boolean callMethodIsSynthetic(Method m) { return m.isSynthetic(); } public boolean callMethodIsBridge(Method m) { return m.isBridge(); } }