java.lang.Object
com.google.auto.value.processor.escapevelocity.Reparser

class Reparser extends Object
The second phase of parsing. See Parser.parse() for a description of the phases and why we need them.
  • Field Details

    • END_SET

      private static final com.google.common.collect.ImmutableSet<Class<? extends TokenNode>> END_SET
    • EOF_SET

      private static final com.google.common.collect.ImmutableSet<Class<? extends TokenNode>> EOF_SET
    • ELSE_ELSE_IF_END_SET

      private static final com.google.common.collect.ImmutableSet<Class<? extends TokenNode>> ELSE_ELSE_IF_END_SET
    • nodes

      private final com.google.common.collect.ImmutableList<Node> nodes
      The nodes that make up the input sequence. Nodes are removed one by one from this list as parsing proceeds. At any time, currentNode() is the node being examined.
    • nodeIndex

      private int nodeIndex
      The index of the node we are currently looking at while parsing.
    • macros

      private final Map<String,Macro> macros
      Macros are removed from the input as they are found. They do not appear in the output parse tree. Macro definitions are not executed in place but are all applied before template rendering starts. This means that a macro can be referenced before it is defined.
  • Constructor Details

    • Reparser

      Reparser(com.google.common.collect.ImmutableList<Node> nodes)
    • Reparser

      private Reparser(com.google.common.collect.ImmutableList<Node> nodes, Map<String,Macro> macros)
  • Method Details

    • reparse

      Template reparse()
    • reparseNodes

      private Node reparseNodes()
    • removeSpaceBeforeSet

      private static com.google.common.collect.ImmutableList<Node> removeSpaceBeforeSet(com.google.common.collect.ImmutableList<Node> nodes)
      Returns a copy of the given list where spaces have been moved where appropriate after #set. This hack is needed to match what appears to be special treatment in Apache Velocity of spaces before #set directives. If you have thing whitespace #set, then the whitespace is deleted if the thing is a comment (##...\n); a reference ($x or $x.foo etc); a macro definition; or another #set.
    • shouldDeleteSpaceBetweenThisAndSet

      private static boolean shouldDeleteSpaceBetweenThisAndSet(Node node)
    • isWhitespaceLiteral

      private static boolean isWhitespaceLiteral(Node node)
    • parseTo

      private Node parseTo(Set<Class<? extends TokenNode>> stopSet, TokenNode forWhat)
      Parse subtrees until one of the token types in stopSet is encountered. If this is the top level, stopSet will include TokenNode.EofNode so parsing will stop when it reaches the end of the input. Otherwise, if an EofNode is encountered it is an error because we have something like #if without #end.
      Parameters:
      stopSet - the kinds of tokens that will stop the parse. For example, if we are parsing after an #if, we will stop at any of #else, #elseif, or #end.
      forWhat - the token that triggered this call, for example the #if whose #end etc we are looking for.
      Returns:
      a Node that is the concatenation of the parsed subtrees
    • currentNode

      private Node currentNode()
    • nextNode

      private Node nextNode()
    • parseTokenNode

      private Node parseTokenNode()
    • parseForEach

      private Node parseForEach(TokenNode.ForEachTokenNode forEach)
    • parseIfOrElseIf

      private Node parseIfOrElseIf(TokenNode.IfOrElseIfTokenNode ifOrElseIf)
    • parseNested

      private Node parseNested(TokenNode.NestedTokenNode nested)
    • parseMacroDefinition

      private Node parseMacroDefinition(TokenNode.MacroDefinitionTokenNode macroDefinition)
    • linkMacroCalls

      private void linkMacroCalls()
    • linkMacroCall

      private void linkMacroCall(DirectiveNode.MacroCallNode macroCall)