code: private static Time extractRpcTimeout(Annotation[][] parameterAnnotations, Object[] args, Time defaultTimeout) {
  		if (args != null) {
  			Preconditions.checkArgument(parameterAnnotations.length == args.length);
  
  			for (int i = 0; i < parameterAnnotations.length; i++) {
  				if (isRpcTimeout(parameterAnnotations[i])) {
  					if (args[i] instanceof Time) {
  						return (Time) args[i];
  					} else {
  						throw new RuntimeException("The rpc timeout parameter must be of type " +
  							Time.class.getName() + ". The type " + args[i].getClass().getName() +
  							" is not supported.");
  					}
  				}
  			}
  		}
  
  		return defaultTimeout;
  	}
docs: Extracts the {@link RpcTimeout} annotated rpc timeout value from the list of given method
  arguments. If no {@link RpcTimeout} annotated parameter could be found, then the default
  timeout is returned.
  
  @param parameterAnnotations Parameter annotations
  @param args Array of arguments
  @param defaultTimeout Default timeout to return if no {@link RpcTimeout} annotated parameter
  has been found
  @return Timeout extracted from the array of arguments or the default timeout