ModuleRevisionId mrid = md.getModuleRevisionId();
ModuleRevisionId mrid = node.getId();
    public void addCaller(String rootModuleConf, IvyNode node, String callerConf, String[] dependencyConfs, DependencyDescriptor dd) {        ModuleDescriptor md = node.getDescriptor();        ModuleRevisionId mrid = md.getModuleRevisionId();         if (mrid.getModuleId().equals(getId().getModuleId())) {            throw new IllegalArgumentException("a module is not authorized to depend on itself: "+getId());        }        Map callers = (Map)_callersByRootConf.get(rootModuleConf);        if (callers == null) {            callers = new HashMap();            _callersByRootConf.put(rootModuleConf, callers);        }        Caller caller = (Caller)callers.get(mrid);        if (caller == null) {            caller = new Caller(md, mrid, dd, node.canExclude(rootModuleConf));            callers.put(mrid, caller);        }        caller.addConfiguration(callerConf, dependencyConfs);        IvyNode parent = node.getRealNode();    	for (Iterator iter = parent._allCallers.keySet().iterator(); iter.hasNext();) {			ModuleId mid = (ModuleId) iter.next();			_allCallers.put(mid, parent);		}        _allCallers.put(mrid.getModuleId(), node);        _isCircular = _allCallers.keySet().contains(getId().getModuleId());        if (_isCircular) {        	IvyContext.getContext().getCircularDependencyStrategy().handleCircularDependency(        			toMrids(findPath(getId().getModuleId()), this));        }    }