code: void traverseInnerNode(Node node, Node parent, AbstractScope<?, ?> refinedScope) {
      checkNotNull(parent);
      initTraversal(node);
      if (refinedScope != null && getAbstractScope() != refinedScope) {
        curNode = node;
        pushScope(refinedScope);
        traverseBranch(node, parent);
        popScope();
      } else {
        traverseBranch(node, parent);
      }
    }
docs: Traverses an inner node recursively with a refined scope. An inner node may
  be any node with a non {@code null} parent (i.e. all nodes except the
  root).
  
  @param node the node to traverse
  @param parent the node's parent, it may not be {@code null}
  @param refinedScope the refined scope of the scope currently at the top of
  the scope stack or in trivial cases that very scope or {@code null}