public Object invoke(Object receiver, Object args[]) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
public Object invoke(Object receiver, Object args[]) throws IllegalAccessException, IllegalArgumentException, ExceptionInInitializerError, InvocationTargetException { VM_Class declaringClass = method.getDeclaringClass();
  public Object invoke(Object receiver, Object args[])    throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {    // validate "this" argument    //    if (!method.isStatic()) {      if (receiver == null) throw new NullPointerException();      receiver = JikesRVMSupport.makeArgumentCompatible(method.getDeclaringClass(), receiver);    }        // validate number and types of remaining arguments    //    VM_TypeReference[] parameterTypes = method.getParameterTypes();    if (args == null) {      if (parameterTypes.length != 0) {	throw new IllegalArgumentException("argument count mismatch");      }    } else if (args.length != parameterTypes.length) {      throw new IllegalArgumentException("argument count mismatch");    }    for (int i = 0, n = parameterTypes.length; i < n; ++i) {      try {	args[i] = JikesRVMSupport.makeArgumentCompatible(parameterTypes[i].resolve(), args[i]);      } catch (ClassNotFoundException e) {	throw new InternalError(e.toString()); // Should never happen.      }    }    // invoke method    // Note that we catch all possible exceptions, not just Error's and RuntimeException's,    // for compatibility with jdk behavior (which even catches a "throw new Throwable()").    //    try {      return VM_Reflection.invoke(method, receiver, args);    } catch (Throwable e) {      throw new InvocationTargetException(e);    }  }