我正在进行需要静态类型数据的自定义AST转换。基本上我想要做的是添加一个赋值表达式,它接受闭包推断的返回类型并将其设置为某个字段:
valueGetter = { Foo f -> f.someString }
// I want the below to be added via AST transformation
type = String.class
我正在使用:
获得闭包返回类型(ClassNode) exp.getNodeMetaData(StaticTypesMarker.INFERRED_RETURN_TYPE)
但问题是它在INSTRUCTION_SELECTION阶段填充了返回类型。因此我在下一阶段CLASS_GENERATION中应用我的AST。我正在添加ExpressionStatement但它似乎不起作用。如果我将CompilePhase更改为SEMANTIC_ANALYSIS,则赋值表达式可以正常工作但我没有填充StaticTypesMarker.INFERRED_RETURN_TYPE以进行关闭。
问题是:
全局转换可以在任何阶段应用,但可以在本地应用 转换只能应用于语义分析阶段或 后面。