package app.navigps.utils; import java.lang.reflect.Method; /** * * @author Grzegorz (wara) Warywoda */ public class InvokeUtils{ /** * * @param baseClass * @param methodName * @return */ public static ReturnValue invokeWithTime(Object baseClass,String methodName){ return invokeWithTime(baseClass, methodName, null,null); } /* public static ReturnValue invokeWithTime(Object baseClass,String methodName, Object[] params){ Class [] paramsType = new Class[params.length]; for (int i = 0; i < params.length; i++) { Object object = params[i]; paramsType [i] = object.getClass().getGenericSuperclass().getClass(); System.out.println("Type "+object.getClass().getGenericSuperclass()); System.out.println("isPrimitive "+object.getClass().isPrimitive()); System.out.println("isSynthetic "+object.getClass().isSynthetic()); System.out.println("isAnonymousClass "+object.getClass().isAnonymousClass()); System.out.println("isArray "+object.getClass().isArray()); System.out.println("--------------------"); } return invokeWithTime(baseClass, methodName,paramsType,params); } */ /** * * @param baseClass * @param methodName * @param paramsType * @param params * @return */ public static ReturnValue invokeWithTime(Object baseClass,String methodName, Class[] paramsType,Object[] params){ try { Class e = baseClass.getClass(); Method m = e.getMethod(methodName, paramsType); long start = System.nanoTime(); Object retObj = m.invoke(baseClass, params); long stop = System.nanoTime(); return new ReturnValue(retObj, (stop-start)); } catch (Exception ex) { return new ReturnValue(null, -1,ex); } } /** * */ public static class ReturnValue{ private Object ret; private double timeNano; private Exception message; /** * * @param obj * @param time * @param e */ public ReturnValue(Object obj,double time,Exception e){ ret = obj; timeNano = time; message = e; } /** * * @param obj * @param time */ public ReturnValue(Object obj,double time){ this(obj, time, null); } /** * @return the ret */ public Object getRet() { return ret; } /** * @return the timeNano */ public double getTimeNano() { return timeNano; } /** * @return the message */ public Exception getMessage() { return message; } /** * @param message the message to set */ public void setMessage(Exception message) { this.message = message; } public boolean isMessage(){ return message != null; } } }