这里说的版本是:FreeMarker 2.3.10 (April 20, 2007)
freemarker.core.TemplateElement 第101行:
居然在SimpleSequence result = null;后直接调用result.add(nestedBlock);
这行代码永远空指针异常!
freemarker.core.StopException 第84行:
if (msg != null & !msg.equals("")) 没有用 短路与“&&” 而是 “&”,
当msg == null时, msg.equals("")总是会被调用,总是空指针异常!
else语句一点作用都没有。
freemarker.template.ObjectWrapper 第77行
freemarker.template.DefaultObjectWrapper 第70行
其中,DefaultObjectWrapper 是 ObjectWrapper 的子类。
他居然在父类静态块初始化过程中调用子类初始化方法,
晕倒,子类怎么能在父类之前实例化,这只会使构造失败,经常出一些莫明其妙的错误。
太多了,诸如此类问题用FindBugs就能查出几十个,
还有N多没用到的变量,方法,内部匿名类,到处乱七八糟,
不知道作者怎么对得起这么多用户。
同样的方法检查Spring和Hibernate,所有代码都写很严谨,也没有任何无用代码。
很无语...
freemarker.core.TemplateElement 第101行:
public TemplateSequenceModel getChildNodes() {
if (nestedElements != null) {
return new SimpleSequence(nestedElements);
}
SimpleSequence result = null;
if (nestedBlock != null) {
result.add(nestedBlock);
}
return result;
}
居然在SimpleSequence result = null;后直接调用result.add(nestedBlock);
这行代码永远空指针异常!
freemarker.core.StopException 第84行:
public void printStackTrace(PrintStream ps) {
String msg = this.getMessage();
ps.print("Encountered stop instruction");
if (msg != null & !msg.equals("")) {
ps.println("\nCause given: " + msg);
} else ps.println();
super.printStackTrace(ps);
}
if (msg != null & !msg.equals("")) 没有用 短路与“&&” 而是 “&”,
当msg == null时, msg.equals("")总是会被调用,总是空指针异常!
else语句一点作用都没有。
freemarker.template.ObjectWrapper 第77行
ObjectWrapper DEFAULT_WRAPPER = DefaultObjectWrapper.instance;
freemarker.template.DefaultObjectWrapper 第70行
static final DefaultObjectWrapper instance = new DefaultObjectWrapper();
其中,DefaultObjectWrapper 是 ObjectWrapper 的子类。
他居然在父类静态块初始化过程中调用子类初始化方法,
晕倒,子类怎么能在父类之前实例化,这只会使构造失败,经常出一些莫明其妙的错误。
太多了,诸如此类问题用FindBugs就能查出几十个,
还有N多没用到的变量,方法,内部匿名类,到处乱七八糟,
不知道作者怎么对得起这么多用户。
同样的方法检查Spring和Hibernate,所有代码都写很严谨,也没有任何无用代码。
很无语...