public Object produceEvent() throws InvocationTargetException {
    if (!valid) {
      throw new IllegalStateException(toString() + " has been invalidated and can no longer produce events.");
    }
    try {
      return method.invoke(target);
    } catch (IllegalAccessException e) {
      throw new AssertionError(e);
    } catch (InvocationTargetException e) {
      if (e.getCause() instanceof Error) {
        throw (Error) e.getCause();
      }
      throw e;
    }
  }
Invokes the wrapped producer method.

@throws java.lang.IllegalStateException  if previously invalidated.
@throws java.lang.reflect.InvocationTargetException  if the wrapped method throws any {@link Throwable} that is not
    an {@link Error} ({@code Error}s are propagated as-is).
otto/src/main/java/com/squareup/otto/EventProducer.java