我正在使用ST-4.0.7.jar,我的模板如下:
backtrack_result(btresult) ::=<<
<backtrack-result>
<pattern id="$btresult.pattern.id$">$btresult.pattern.description$</pattern>
<file>$btresult.file.file.path$</file>
<line>$btresult.codeline.lineNr$</line>
<method>$btresult.codeline.method.name$</method>
</backtrack-result>
>>
然而,当我查看我的输出文件时,我只得到
<method></method>
在BTResult中:
public CodeLineInterface getCodeline() {
return cl;
}
在 CodeLine 中:
public MethodInterface getMethod() {
return method;
}
在方法中:
public String getName() {
return name;
}
我在 getMethod 方法的代码行对象中设置了一个断点,但它从来没有被调用。 因此我得出结论,某种方式下 stringtemplate 有问题解析正确的 getter。
我添加了 STErrorListener 并发现 ST 抛出以下错误:
STReportGenerator - context [/report /backtrack_results /backtrack_result] 5:19 no such property or can't access: ju.no.need.toknow.BTResult.method
Caused by: org.stringtemplate.v4.misc.STNoSuchPropertyException: no such property: ju.no.need.toknow.BTResult.method
at org.stringtemplate.v4.misc.ObjectModelAdaptor.throwNoSuchProperty(ObjectModelAdaptor.java:106)
at org.stringtemplate.v4.misc.ObjectModelAdaptor.lookupMethod(ObjectModelAdaptor.java:99)
at org.stringtemplate.v4.misc.ObjectModelAdaptor.getProperty(ObjectModelAdaptor.java:67)
at org.stringtemplate.v4.Interpreter.getObjectProperty(Interpreter.java:1158)
这让我感到困惑的是:为什么它尝试解析成BTReult.method,而不是模板中指定的btresult.codeline.method.name呢?
getMethod
是一个公共实例方法,对吗? - Sergey KalinichenkogetLineNr()
中设置了断点,它会被触发吗?如果没有,我建议您在getCodeline()
中设置断点,以查看其返回值。 - monty0