protected void collectChildrenUnorderedAlt(E element, Iterable<E> alternativeChildren, Set<E> result, Set<E> visited) { boolean hasMandatory = false; for (E child : orderedIterable(alternativeChildren)) { hasMandatory |= !production.isOptional(child); collectElement(child, result, visited); } if (!hasMandatory || production.isOptional(element)) collectByParent(element, result, visited); }
protected void collectChildrenSequence(E element, Iterable<E> sequentialChildren, Set<E> result, Set<E> visited) { boolean reachedEnd = true; for (E child : orderedIterable(sequentialChildren)) { collectElement(child, result, visited); if (!production.isOptional(child)) { reachedEnd = false; break; } } if (reachedEnd || production.isOptional(element)) collectByParent(element, result, visited); }
protected void collectChildrenAlternative(E element, Iterable<E> alternativeChildren, Set<E> result, Set<E> visited) { boolean optional = production.isOptional(element); for (E child : orderedIterable(alternativeChildren)) { optional |= production.isOptional(child); collectElement(child, result, visited); } if (optional) collectByParent(element, result, visited); }
protected void collectChildrenAlternative(E element, Iterable<E> alternativeChildren, Set<E> result, Set<E> visited) { boolean optional = production.isOptional(element); for (E child : orderedIterable(alternativeChildren)) { optional |= production.isOptional(child); collectElement(child, result, visited); } if (optional) collectByParent(element, result, visited); }
protected void collectChildrenSequence(E element, Iterable<E> sequentialChildren, Set<E> result, Set<E> visited) { boolean reachedEnd = true; for (E child : orderedIterable(sequentialChildren)) { collectElement(child, result, visited); if (!production.isOptional(child)) { reachedEnd = false; break; } } if (reachedEnd || production.isOptional(element)) collectByParent(element, result, visited); }
protected void collectChildrenUnorderedAlt(E element, Iterable<E> alternativeChildren, Set<E> result, Set<E> visited) { boolean hasMandatory = false; for (E child : orderedIterable(alternativeChildren)) { hasMandatory |= !production.isOptional(child); collectElement(child, result, visited); } if (!hasMandatory || production.isOptional(element)) collectByParent(element, result, visited); }