/** * Recursively build the structure hierarchy * * @param deque the deque of nodes * @param s the current annotation */ private static <T extends Annotation> void build(Deque<AnnotationNode<T>> deque, T s) { final AnnotationNode<T> parent = getParent(deque, s); final AnnotationNode<T> node = new AnnotationNode<>(parent, s); parent.addChild(node); deque.push(node); }
/** * Recursively build the structure hierarchy * * @param deque the deque of nodes * @param s the current annotation */ private static <T extends Annotation> void build(Deque<AnnotationNode<T>> deque, T s) { final AnnotationNode<T> parent = getParent(deque, s); final AnnotationNode<T> node = new AnnotationNode<>(parent, s); parent.addChild(node); deque.push(node); }
/** * Build the structure hierarchy, first by sorting the structure, by offset and depth, then using * a deque to recursively create the structure. * * @param structures the list of all structural annotations * @return the root structure node */ protected static <T extends Annotation> AnnotationNode<T> build(final List<T> annotations) { Collections.sort( annotations, (s1, s2) -> { int compare = Integer.compare(s1.getBegin(), s2.getBegin()); if (compare == 0) { compare = Integer.compare(s2.getEnd(), s1.getEnd()); } if (compare == 0) { compare = Integer.compare(getDepth(s1), getDepth(s2)); } return compare; }); final AnnotationNode<T> parent = new AnnotationNode<>(null, null); final Deque<AnnotationNode<T>> deque = new ArrayDeque<>(); deque.push(parent); annotations.forEach(s -> build(deque, s)); return parent; }
/** * Build the structure hierarchy, first by sorting the structure, by offset and depth, then using * a deque to recursively create the structure. * * @param structures the list of all structural annotations * @return the root structure node */ protected static <T extends Annotation> AnnotationNode<T> build(final List<T> annotations) { Collections.sort( annotations, (s1, s2) -> { int compare = Integer.compare(s1.getBegin(), s2.getBegin()); if (compare == 0) { compare = Integer.compare(s2.getEnd(), s1.getEnd()); } if (compare == 0) { compare = Integer.compare(getDepth(s1), getDepth(s2)); } return compare; }); final AnnotationNode<T> parent = new AnnotationNode<>(null, null); final Deque<AnnotationNode<T>> deque = new ArrayDeque<>(); deque.push(parent); annotations.forEach(s -> build(deque, s)); return parent; }