code: public Parse adjoin(final Parse sister, final HeadRules rules) {
      final Parse lastChild = this.parts.get(this.parts.size() - 1);
      final Parse adjNode = new Parse(this.text,
          new Span(lastChild.getSpan().getStart(), sister.getSpan().getEnd()),
          lastChild.getType(), 1,
          rules.getHead(new Parse[] { lastChild, sister }, lastChild.getType()));
      adjNode.parts.add(lastChild);
      if (sister.prevPunctSet != null) {
        adjNode.parts.addAll(sister.prevPunctSet);
      }
      adjNode.parts.add(sister);
      this.parts.set(this.parts.size() - 1, adjNode);
      this.span = new Span(this.span.getStart(), sister.getSpan().getEnd());
      this.head = rules.getHead(getChildren(), this.type);
      this.headIndex = this.head.headIndex;
      return adjNode;
    }
docs: Sister adjoins this node's last child and the specified sister node and
  returns their new parent node. The new parent node replace this nodes last
  child.
  
  @param sister
  The node to be adjoined.
  @param rules
  The head rules for the parser.
  @return The new parent node of this node and the specified sister node.