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

具有可变分辨率的Groovy编译器阶段,groovy,compilation,Groovy,Compilation,我正在创建一个定制的compileationunit,目的是编译一些Groovy脚本,直到特定的阶段 我希望包含变量解析,因此我将编译到语义分析阶段 CompilationUnit cu = new CompilationUnit(compilerConfiguration); File file = new File("scripts/script12.esc"); cu.addSource(file); cu.compile(Phases.SEMANTIC_ANAYLSIS); 我的测试脚

我正在创建一个定制的
compileationunit
,目的是编译一些Groovy脚本,直到特定的阶段

我希望包含变量解析,因此我将编译到
语义分析
阶段

CompilationUnit cu = new CompilationUnit(compilerConfiguration);
File file = new File("scripts/script12.esc");
cu.addSource(file);
cu.compile(Phases.SEMANTIC_ANAYLSIS);
我的测试脚本非常简单,包含以下内容:

def a = b + "c";
编译器配置
没有什么特别之处,只是启用了类型检查扩展

问题来了:由于启用了类型检查,我假设Groovy将尝试解析脚本中的变量。这应该发生在语义分析阶段。但运行此操作不会提供预期的错误


如果我让它编译到指令选择阶段,那么我得到(如预期的那样)
[Static type checking]-变量[b]未声明。
但这发生得有点晚。

回答我自己的问题:

@TypeChecked
注释实际上是一种在指令选择阶段运行的AST转换,因此它在语义分析期间不运行也就不足为奇了