我有以下代码段:
println("bll1");
createAstsFromDirectory(location, false);
println("bll2");
当我对表示Java项目的任何有效location
运行此命令时,将得到以下输出(每个项目不同):
bll1
Got NPE for node String[] args
Got NPE for node String[] args
Got NPE for node blah=6
Got NPE for node String[] args
Got NPE for node String[] args
bll2
这是一个问题,因为我正在使用外部程序读取shell输出。同样,对于大型项目,它会大量向控制台发送垃圾邮件(以上输出是针对具有两个小(<30sloc)类的项目)。 Smallsql至少产生这些Got NPE for node ...
行中的1000行。
此外:
createAstFromM3
和createAstFromFile
函数时不会发生这种情况。答案 0 :(得分:1)
问题的原因是Eclipse Java编译器无法在命令行上正确解析类型。这会触发一个内部错误,该错误会触发一个空指针异常,而该异常实际上不会发生。产生的AST仍然有效,但已解析的类型将完全丢失。
在这种情况下,类型解析器在java.lang.String[]
上已经失败,因此Java运行时库甚至不在编译器的类路径上。
这应该可以解决:将JRE jar包含在classPath
关键字参数中:
createAstFromFile(..., classPath=[|file:///path/to/your/rt.jar|, ...possibly some other jars...])