Uploaded image for project: 'Velocity'
  1. Velocity
  2. VELOCITY-835

Velocity Macro Stack Traces Patch

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.7
    • 2.2
    • Engine

    Description

      Hey guys I made a patch to Velocity 1.7 to enable you to print out velocity stack traces. If you dump a stack trace in a Java function that was called from a velocity file, you usually see a bunch of calls to velocity parser functions like this in the Java stack trace:

      ...
      at org.apache.velocity.runtime.parser.node.ASTIdentifier.execute(ASTIdentifier.java:209)
      at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:280)
      at org.apache.velocity.runtime.parser.node.ASTReference.evaluate(ASTReference.java:530)
      at org.apache.velocity.runtime.parser.node.ASTExpression.evaluate(ASTExpression.java:62)
      at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:85)
      at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
      at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87)
      at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
      at org.apache.velocity.runtime.directive.VelocimacroProxy.render(VelocimacroProxy.java:216)
      at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:312)
      at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:230)
      at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:207)
      at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
      at org.apache.velocity.runtime.parser.node.ASTStringLiteral.value(ASTStringLiteral.java:330)
      ...

      The velocity stack trace created by this patches is much more informative:

      Velocity Stack Trace: Invocation of method 'getAvatarUrl' in class Member
      at avatarUrl called at common/Macros.vm[line 426, column 29]
      at simpleAvatarUrl called at common/Macros.vm[line 487, column 22]
      at drawSimpleImage called at common/Macros.vm[line 487, column 3]
      at simpleMemberAvatar called at site/photo_pane.vm[line 153, column 32]
      at displayAvatarImage called at site/photo_pane.vm[line 162, column 3]

      This sort of stack trace is very useful when debugging code and trying to figure out which sequence of macros called into the currently executing Java code that dumped out the Java stack trace. Please consider adding something like this to a future release of Velocity - it would be very useful!

      Thanks,
      Luke

      Attachments

        1. patchVelocityStackTraces.diff
          9 kB
          Luke Perkins

        Issue Links

          Activity

            People

              cbrisson Claude Brisson
              lowerlogic Luke Perkins
              Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 2h
                  2h
                  Remaining:
                  Remaining Estimate - 2h
                  2h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified