docs: private void visit(
        HtmlMatcherConditionNode condNode,
        Map<Equivalence.Wrapper<ExprNode>, Boolean> exprValueMap,
        HtmlStack stack) {
      Equivalence.Wrapper<ExprNode> condition = ExprEquivalence.get().wrap(condNode.getExpression());
      // In some cases we may encounter a condition we have already made a decision for. Consider
      // this case:
      // <pre>@code {
      //    {if $foo}<div>{/if}
      //    {if $foo}</div>{/if}
      // }</pre>
      // In this case, it is unnecessary once we have decided that $foo is TRUE to traverse the
      // branch where $foo is FALSE. We save the original state of the value and use it below
      // to decide if we should take a branch.
      Boolean originalState = exprValueMap.getOrDefault(condition, null);
  
      Optional<HtmlMatcherGraphNode> nextNode = condNode.getNodeForEdgeKind(EdgeKind.TRUE_EDGE);
      Optional<HtmlMatcherGraphNode> nextAltNode = condNode.getNodeForEdgeKind(EdgeKind.FALSE_EDGE);
      if (!condNode.isInternallyBalanced(stack.inForeignContent, idGenerator)
          && nextNode.isPresent()
          && !Boolean.FALSE.equals(originalState)) {
        Map<Equivalence.Wrapper<ExprNode>, Boolean> lMap = new HashMap<>(exprValueMap);
        lMap.put(condition, true);
        visit(nextNode.get(), lMap, stack);
      }
  
      if (nextAltNode.isPresent() && !Boolean.TRUE.equals(originalState)) {
        Map<Equivalence.Wrapper<ExprNode>, Boolean> rMap = new HashMap<>(exprValueMap);
        rMap.put(condition, false);
        visit(nextAltNode.get(), rMap, stack);
      }
    }