private void addIndents()

in tools/linter/src/main/java/com/google/cloud/verticals/foundations/dataharmonization/tools/linter/rules/SpacingBlock.java [78:121]


  private void addIndents(BaseTreeNode treeNode) {
    IndexedDepthFirstIterator childWalker = treeNode.dfsWalker();

    while (childWalker.hasNext()) {
      TreeChildReference entry = childWalker.next();

      // If the node is internal, or a non-newline or non-comment terminal node, do not enter the
      // inner loop.
      if (entry.node().isInternal() || !(entry.node().isNewline() || entry.node().isComment())) {
        continue;
      }

      // If a newline or comment is found, start trimming the spaces after it.
      while (childWalker.hasNext()) {
        TreeChildReference maybeSpaceEntry = childWalker.peek();

        // If a non-whitespace or newline or linter created node is reached, stop trimming spaces.
        if (!maybeSpaceEntry.node().isWhitespace()
            || maybeSpaceEntry.node().isNewline()
            || maybeSpaceEntry.node().isLinterCreated()) {
          break;
        }

        // Remove existing spaces.
        childWalker.next();
        childWalker.remove();
      }

      // If the current and next nodes are newlines, do not insert an indent.
      if (entry.node().isNewline() && childWalker.peek().node().isNewline()) {
        continue;
      }

      // If the next token is the last token of treeNode (i.e. the last }) we're done.
      if (treeNode.isInternal()
          && childWalker.peek().node() == Iterables.getLast(treeNode.asInternal().getChildren())) {
        break;
      }

      // Insert a new tab.
      BaseTreeNode space = new TerminalNode(indent, treeNode, true, TerminalNode.Type.SPACE);
      childWalker.insert(space);
    }
  }