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 ...
行。
此外:
- 这在 Rascal
的稳定版和不稳定版 shell 中都会发生
- Eclipse 插件的控制台中不会发生这种情况
- 在同一个 files/projects 上使用
createAstFromM3
和 createAstFromFile
函数时不会发生这种情况。
问题的原因是 Eclipse Java 编译器无法在您的命令行上正确解析类型。这会触发一个内部错误,该错误会触发一个实际上永远不会发生的空指针异常。生成的 AST 仍然有效,但已解析的类型将完全丢失。
在这种情况下,类型解析器在 java.lang.String[]
上已经失败,因此 java 运行-time 库甚至不在编译器的类路径中。
这应该可以修复它:将 JRE jar 包含到 classPath
关键字参数中:
createAstFromFile(..., classPath=[|file:///path/to/your/rt.jar|, ...possibly some other jars...])
我有以下代码片段:
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 ...
行。
此外:
- 这在 Rascal 的稳定版和不稳定版 shell 中都会发生
- Eclipse 插件的控制台中不会发生这种情况
- 在同一个 files/projects 上使用
createAstFromM3
和createAstFromFile
函数时不会发生这种情况。
问题的原因是 Eclipse Java 编译器无法在您的命令行上正确解析类型。这会触发一个内部错误,该错误会触发一个实际上永远不会发生的空指针异常。生成的 AST 仍然有效,但已解析的类型将完全丢失。
在这种情况下,类型解析器在 java.lang.String[]
上已经失败,因此 java 运行-time 库甚至不在编译器的类路径中。
这应该可以修复它:将 JRE jar 包含到 classPath
关键字参数中:
createAstFromFile(..., classPath=[|file:///path/to/your/rt.jar|, ...possibly some other jars...])