code: public static Object invokeGroovyObjectInvoker(MissingMethodException e, Object receiver, String name, Object[] args) {
          if (e instanceof MissingMethodExecutionFailed) {
              throw (MissingMethodException)e.getCause();
          } else if (receiver.getClass() == e.getType() && e.getMethod().equals(name)) {
              //TODO: we should consider calling this one directly for MetaClassImpl,
              //      then we save the new method selection
  
              // in case there's nothing else, invoke the object's own invokeMethod()
              return ((GroovyObject)receiver).invokeMethod(name, args);
          } else {
              throw e;
          }
      }
docs: {@link GroovyObject#invokeMethod(String, Object)} path as fallback.
  This method is called by the handle as exception handler in case the
  selected method causes a MissingMethodExecutionFailed, where
  we will just give through the exception, and a normal
  MissingMethodException where we call {@link GroovyObject#invokeMethod(String, Object)}
  if receiver class, the type transported by the exception and the name
  for the method stored in the exception and our current method name
  are equal.
  Should those conditions not apply we just rethrow the exception.