CLASS_GENERATION阶段的AST转换

时间:2016-03-25 14:07:54

标签: java groovy abstract-syntax-tree dsl

我正在进行需要静态类型数据的自定义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以进行关闭。

问题是:

  1. 我想知道在CLASS_GENERATION阶段是否可以向AST添加表达式语句?我似乎不适合我。文档不清楚:
  2.   

    全局转换可以在任何阶段应用,但可以在本地应用   转换只能应用于语义分析阶段或   后面。

    1. 如果在CLASS_GENERATION期间无法修改AST,那么在SEMANTIC_ANALYSIS阶段使用StaticTypeCheckingVisitor.visitClosure获取闭包推断返回类型是否合法?
    2. 我可能错过了其他选择吗?

0 个答案:

没有答案