Rascal 在调用 "createAstsFromDirectory" 时输出 "Got NPE for node ..." 到控制台

Rascal outputs "Got NPE for node ..." to console when calling "createAstsFromDirectory"

我有以下代码片段:

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 至少产生 1000 行 Got NPE for node ... 行。

此外:

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

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

这应该可以修复它:将 JRE jar 包含到 classPath 关键字参数中:

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