if (executing) {
if (stack.contains(method)) {
	public Object invoke(Object proxy, Method method, Object[] args)			throws Throwable {		final Object result;        // equals(...) and hashCode()        if (method.equals(ClassHierarchyIntrospector.equals)) {            // TODO this whole section is really ugly and needs cleaning up			Object arg = args[0];            if (proxyFactory.isProxyClass(arg.getClass())) {				arg = proxyFactory.getInvoker(arg);			}            if (arg instanceof DelegatingInvoker) {                arg = ((DelegatingInvoker)arg).delegate();            }            if (delegate() == null) {                result = arg == null ? Boolean.TRUE : Boolean.FALSE;            } else {                result = delegate().equals(arg) ? Boolean.TRUE : Boolean.FALSE;            }		} else if (method.equals(ClassHierarchyIntrospector.hashCode)) {			result = new Integer(hashCode());                    // null delegate		} else if (delegate() == null) {            result = null;                    // regular method call        } else {			if (executing) {				throw new IllegalStateException("Cyclic dependency");			}			executing = true;			result = invokeOnDelegate(getMethodToInvoke(method), args);		}		executing = false;		return result;	}