docs: public T invoke(RT receiver, Object... arguments) {
  		assert receiver != null;
  		final Method method;
  		synchronized (this) {
  			if (this.method == null) {
  				this.method = getMethod(receiver, arguments);
  				method = this.method;
  			} else {
  				method = this.method;
  			}
  		}
  		try {
  			return this.returnType.cast(method.invoke(receiver, arguments));
  		} catch (RuntimeException | Error exception) {
  			throw exception;
  		} catch (Throwable exception) {
  			throw new RuntimeException(exception);
  		}
  	}