当调用“ createAstsFromDirectory”时,Rascal输出“ Got NPE for node ...”以进行控制台

时间:2018-12-18 13:35:35

标签: shell rascal

我有以下代码段:

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行。

此外:

  • 这在Rascal的稳定壳和不稳定壳中都发生
  • 在Eclipse插件的控制台中不会发生这种情况
  • 在同一文件/项目上使用createAstFromM3createAstFromFile函数时不会发生这种情况。

1 个答案:

答案 0 :(得分:1)

问题的原因是Eclipse Java编译器无法在命令行上正确解析类型。这会触发一个内部错误,该错误会触发一个空指针异常,而该异常实际上不会发生。产生的AST仍然有效,但已解析的类型将完全丢失。

在这种情况下,类型解析器在java.lang.String[]上已经失败,因此Java运行时库甚至不在编译器的类路径上。

这应该可以解决:将JRE jar包含在classPath关键字参数中:

createAstFromFile(..., classPath=[|file:///path/to/your/rt.jar|, ...possibly some other jars...])