docs: @SuppressWarnings("unchecked")
      private void walk(CommonTree tree, StringBuilder builder) {
  
          List<CommonTree> firstStack = new ArrayList<CommonTree>();
          firstStack.add(tree);
  
          List<List<CommonTree>> childListStack = new ArrayList<List<CommonTree>>();
          childListStack.add(firstStack);
  
          while (!childListStack.isEmpty()) {
  
              List<CommonTree> childStack = childListStack.get(childListStack.size() - 1);
  
              if (childStack.isEmpty()) {
                  childListStack.remove(childListStack.size() - 1);
              }
              else {
                  tree = childStack.remove(0);
  
                  String indent = "";
  
                  for (int i = 0; i < childListStack.size() - 1; i++) {
                      indent += (childListStack.get(i).size() > 0) ? "|  " : "   ";
                  }
  
                  String tokenName = LiquidParser.tokenNames[tree.getType()];
                  String tokenText = tree.getText().replaceAll("\\s+", " ").trim();
  
                  builder.append(indent)
                          .append(childStack.isEmpty() ? "'- " : "|- ")
                          .append(tokenName)
                          .append(!tokenName.equals(tokenText) ? "='" + tokenText + "'" : "")
                          .append("\n");
  
                  if (tree.getChildCount() > 0) {
                      childListStack.add(new ArrayList<CommonTree>((List<CommonTree>) tree.getChildren()));
                  }
              }
          }
      }