public ISet<DMIElem> traverse( ISet<DMIElem> inNodes, BoundFork inPatterns, boolean infer, boolean loop, ISet<DMIElem> suggested) { if (infer) { ISet<DMIElem> ans = new XSetList<DMIElem>(XSetList.AsSet); ISet<DMIElem> xV = new XSetList<DMIElem>(XSetList.AsSet); for (; ; ) { IList<InferredRelationship> inferSet = new XSetList<InferredRelationship>(); ISet<DMIElem> res = traverse(inNodes, inPatterns, inferSet, suggested); ans.merge(res); for (int i = 0; i < inferSet.size(); i++) { InferredRelationship ifr = inferSet.get(i); int cnt = itsConceptMgr.itsGraph.getMaxIndex(); DMIElem m = itsConceptMgr.enterStatement(ifr.sb, ifr.vb, ifr.ob, false); ans.add(m); ans.add(ifr.sb); ans.add(ifr.ob); if (itsConceptMgr.itsGraph.getMaxIndex() > cnt) xV.add(m); } if (loop && xV.size() > 0) continue; break; } return ans; // xV; only the inferred nodes } return traverse(inNodes, inPatterns, null, suggested); }