我正在创建一个自定义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.
但这有点太晚了。
答案 0 :(得分:0)
回答我自己的问题:
@TypeChecked
注释实际上是一种AST转换,它在INSTRUCTION_SELECTION阶段运行 - 所以难怪它在SEMANTIC_ANALYSIS期间没有运行。