protected void collectByParent(E element, Set<E> result, Set<E> visited) { E container = production.getParent(element); Iterable<E> children; if (container == null) result.add(null); else if ((children = production.getSequentialChildren(container)) != null) collectByParentSequence(element, container, children, result, visited); else if ((children = production.getUnorderedChildren(container)) != null) switch (unorderedStrategy) { case SEQUENCE: collectByParentSequence(element, container, children, result, visited); break; case MULIT_ALTERNATIVE: collectElement(container, result, visited); collectByParent(container, result, visited); break; } else { if (production.isMany(container)) collectElement(container, result, visited); collectByParent(container, result, visited); } }
protected void collectByParent(E element, Set<E> result, Set<E> visited) { E container = production.getParent(element); Iterable<E> children; if (container == null) result.add(null); else if ((children = production.getSequentialChildren(container)) != null) collectByParentSequence(element, container, children, result, visited); else if ((children = production.getUnorderedChildren(container)) != null) switch (unorderedStrategy) { case SEQUENCE: collectByParentSequence(element, container, children, result, visited); break; case MULIT_ALTERNATIVE: collectElement(container, result, visited); collectByParent(container, result, visited); break; } else { if (production.isMany(container)) collectElement(container, result, visited); collectByParent(container, result, visited); } }