Matthew Hall
2010-11-03 15:25:03 UTC
I'm using Velocity to do some Java code generation, and I recently added
Javadoc comments to the macro so that the generated Java code will be
documented. I'm having a problem getting Velocity to give me the output I
want in my generated code, though.
Here's an example of a Javadoc comment I added to my Velocity macro:
/**
* @see
com.intervolve.prometheus.core.dataobj.DataObject#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
*/
When I run the macro containing this comment, I get the following error:
org.apache.velocity.exception.ParseErrorException: Lexical error:
org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 170,
column 80. Encountered: "i" (105), after : "."
at org.apache.velocity.Template.process(Template.java:141)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:446)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:354)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1400)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1380)
at
org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:401)
at org.apache.velocity.texen.Generator.getTemplate(Generator.java:310)
at org.apache.velocity.texen.Generator.parse(Generator.java:383)
at org.apache.velocity.texen.Generator.parse(Generator.java:353)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
at
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
at
org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:262)
at
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:342)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:366)
at
org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
at org.apache.velocity.Template.merge(Template.java:328)
at org.apache.velocity.Template.merge(Template.java:235)
at org.apache.velocity.texen.Generator.parse(Generator.java:445)
at org.apache.velocity.texen.ant.TexenTask.execute(TexenTask.java:584)
at
com.intervolve.prometheus.build.ant.OMGenerationTask.execute(OMGenerationTask.java:35)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at
org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:423)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:137)
I believe that this error is happening because Velocity thinks that
"#copyFrom(com." is a directive, so I add the escape character in front of
the #, like this:
/**
* @see
com.intervolve.prometheus.core.dataobj.DataObject\#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
*/
This resolves the error, and my Velocity macro is now able to run, however,
the escape character is present in the generated code file as well. This
causes Javadoc to not be able to interpret the @see tag and correctly link
to the specified method. What can I do to resolve this, so that the escape
character that is preventing the error does not appear in my generated code
file? Thanks in advance!
--Matt
Javadoc comments to the macro so that the generated Java code will be
documented. I'm having a problem getting Velocity to give me the output I
want in my generated code, though.
Here's an example of a Javadoc comment I added to my Velocity macro:
/**
* @see
com.intervolve.prometheus.core.dataobj.DataObject#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
*/
When I run the macro containing this comment, I get the following error:
org.apache.velocity.exception.ParseErrorException: Lexical error:
org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 170,
column 80. Encountered: "i" (105), after : "."
at org.apache.velocity.Template.process(Template.java:141)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:446)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:354)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1400)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1380)
at
org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:401)
at org.apache.velocity.texen.Generator.getTemplate(Generator.java:310)
at org.apache.velocity.texen.Generator.parse(Generator.java:383)
at org.apache.velocity.texen.Generator.parse(Generator.java:353)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
at
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
at
org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:262)
at
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:342)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:366)
at
org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
at org.apache.velocity.Template.merge(Template.java:328)
at org.apache.velocity.Template.merge(Template.java:235)
at org.apache.velocity.texen.Generator.parse(Generator.java:445)
at org.apache.velocity.texen.ant.TexenTask.execute(TexenTask.java:584)
at
com.intervolve.prometheus.build.ant.OMGenerationTask.execute(OMGenerationTask.java:35)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at
org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:423)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:137)
I believe that this error is happening because Velocity thinks that
"#copyFrom(com." is a directive, so I add the escape character in front of
the #, like this:
/**
* @see
com.intervolve.prometheus.core.dataobj.DataObject\#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
*/
This resolves the error, and my Velocity macro is now able to run, however,
the escape character is present in the generated code file as well. This
causes Javadoc to not be able to interpret the @see tag and correctly link
to the specified method. What can I do to resolve this, so that the escape
character that is preventing the error does not appear in my generated code
file? Thanks in advance!
--Matt