code: public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
          String name = method.getName();
          if (method.getDeclaringClass() == GroovyObject.class) {
              if (name.equals("getMetaClass")) {
                  return getMetaClass();
              } else if (name.equals("setMetaClass")) {
                  return setMetaClass((MetaClass) args[0]);
              }
          }
  
          return InvokerHelper.invokeMethod(extension, method.getName(), args);
      }
docs: Invokes a method for the GroovyResultSet.
  This will try to invoke the given method first on the extension
  and then on the result set given as proxy parameter.
  
  @param proxy  the result set
  @param method the method name of this method will be used
  to make a call on the extension. If this fails the call will be
  done on the proxy instead
  @param args   for the call
  @see ResultSet
  @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])