Source:
<code>private void collectRevisions(InternalCDORevision revision, Set<CDOID> revisions, <START> List<RevisionInfo> additionalRevisionInfos, List<CDORevision> additionalRevisions, <END> Set<CDOFetchRule> visitedFetchRules) { if (revision == null) { return; } getSession().collectContainedRevisions(revision, branchPoint, referenceChunk, revisions, additionalRevisions); CDOFetchRule fetchRule = fetchRules.get(revision.getEClass()); if (fetchRule == null || visitedFetchRules.contains(fetchRule)) { return; } visitedFetchRules.add(fetchRule); for (EStructuralFeature feature : fetchRule.getFeatures()) { if (feature.isMany()) { MoveableList<Object> list = revision.getList(feature); int toIndex = Math.min(loadRevisionCollectionChunkSize, list.size()) - 1; for (int i = 0; i <= toIndex; i++) { Object value = list.get(i); if (value instanceof CDOID) { CDOID id = (CDOID)value; if (!CDOIDUtil.isNull(id) && !revisions.contains(id)) { RevisionInfo info = getRevisionInfo(id); InternalCDORevision containedRevision = info.getResult(); if (containedRevision != null) { revisions.add(containedRevision.getID()); additionalRevisions.add(containedRevision); collectRevisions(containedRevision, revisions, additionalRevisionInfos, additionalRevisions, visitedFetchRules); } } } } } else { Object value = revision.getValue(feature); if (value instanceof CDOID) { CDOID id = (CDOID)value; if (!id.isNull() && !revisions.contains(id)) { RevisionInfo info = getRevisionInfo(id); InternalCDORevision containedRevision = info.getResult(); if (containedRevision != null) { revisions.add(containedRevision.getID()); additionalRevisions.add(containedRevision); collectRevisions(containedRevision, revisions, additionalRevisionInfos, additionalRevisions, visitedFetchRules); } } } } } visitedFetchRules.remove(fetchRule); }</code><technical_language>additionalRevisionInfos is in method, beside in 2 recursive call. I addition of this parameter is usefull</technical_language>

Target:
private void collectRevisions(InternalCDORevision revision, Set<CDOID> revisions, List<RevisionInfo> additionalRevisionInfos, List<CDORevision> additionalRevisions, Set<CDOFetchRule> visitedFetchRules) { if (revision == null) { return; } getSession().collectContainedRevisions(revision, branchPoint, referenceChunk, revisions, additionalRevisions); CDOFetchRule fetchRule = fetchRules.get(revision.getEClass()); if (fetchRule == null || visitedFetchRules.contains(fetchRule)) { return; } visitedFetchRules.add(fetchRule); for (EStructuralFeature feature : fetchRule.getFeatures()) { if (feature.isMany()) { MoveableList<Object> list = revision.getList(feature); int toIndex = Math.min(loadRevisionCollectionChunkSize, list.size()) - 1; for (int i = 0; i <= toIndex; i++) { Object value = list.get(i); if (value instanceof CDOID) { CDOID id = (CDOID)value; if (!CDOIDUtil.isNull(id) && !revisions.contains(id)) { RevisionInfo info = getRevisionInfo(id); InternalCDORevision containedRevision = info.getResult(); if (containedRevision != null) { additionalRevisionInfos.add(info); revisions.add(containedRevision.getID()); additionalRevisions.add(containedRevision); collectRevisions(containedRevision, revisions, additionalRevisionInfos, additionalRevisions, visitedFetchRules); } } } } } else { Object value = revision.getValue(feature); if (value instanceof CDOID) { CDOID id = (CDOID)value; if (!id.isNull() && !revisions.contains(id)) { RevisionInfo info = getRevisionInfo(id); InternalCDORevision containedRevision = info.getResult(); if (containedRevision != null) { revisions.add(containedRevision.getID()); additionalRevisions.add(containedRevision); collectRevisions(containedRevision, revisions, additionalRevisionInfos, additionalRevisions, visitedFetchRules); } } } } } visitedFetchRules.remove(fetchRule); }