具有可变分辨率的Groovy编译器阶段

时间:2015-12-14 14:48:14

标签: groovy compilation

我正在创建一个自定义CompilationUnit,目的是只编译一些Groovy脚本,直到特定阶段。

我想要包含变量解析,因此我正在编译SEMANTIC_ANALYSIS阶段。

CompilationUnit cu = new CompilationUnit(compilerConfiguration);
File file = new File("scripts/script12.esc");
cu.addSource(file);
cu.compile(Phases.SEMANTIC_ANAYLSIS);

我的测试脚本非常简单,并且包含以下内容:

def a = b + "c";

compilerConfiguration没有什么特别的,除了我启用了类型检查扩展。

问题就出现了:在启用类型检查时,我会假设Groovy会尝试解析脚本中的变量。这应该发生在SEMANTIC_ANALYSIS阶段。但是运行它并不能提供预期的错误。

如果我让它编译到INSTRUCTION_SELECTION阶段,那么我得到(正如预期的那样)[Static type checking] - The variable [b] is undeclared.但这有点太晚了。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

@TypeChecked注释实际上是一种AST转换,它在INSTRUCTION_SELECTION阶段运行 - 所以难怪它在SEMANTIC_ANALYSIS期间没有运行。

相关问题