velocity-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Luke Perkins <lperk...@tripadvisor.com>
Subject Velocity Macro Stack Traces Patch
Date Mon, 01 Oct 2012 19:42:29 GMT
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
Mime
View raw message