使用FieldNode向Groovy类添加字段

使用FieldNode向Groovy类添加字段,groovy,metaprogramming,abstract-syntax-tree,Groovy,Metaprogramming,Abstract Syntax Tree,是否可以动态创建Groovy类并使用FieldNode类向其添加字段?以下是我的尝试: package asttest import org.codehaus.groovy.control.* import org.codehaus.groovy.ast.* import org.codehaus.groovy.ast.stmt.* import org.codehaus.groovy.ast.expr.* GroovyClassLoader loader = new GroovyCla

是否可以动态创建Groovy类并使用FieldNode类向其添加字段?以下是我的尝试:

package asttest


import org.codehaus.groovy.control.*
import org.codehaus.groovy.ast.*
import org.codehaus.groovy.ast.stmt.*
import org.codehaus.groovy.ast.expr.*


GroovyClassLoader loader = new GroovyClassLoader()

cls = loader.parseClass('class Position{}')

ClassNode integerClassNode = new ClassNode(Integer.class)

ClassNode classNode = new ClassNode(cls)

FieldNode xFieldNode = new FieldNode(
    'x', FieldNode.ACC_PUBLIC, integerClassNode, classNode, new EmptyExpression())
FieldNode yFieldNode = new FieldNode(
    'y', FieldNode.ACC_PUBLIC, integerClassNode, classNode, new EmptyExpression())
FieldNode zFieldNode = new FieldNode(
    'z', FieldNode.ACC_PUBLIC, integerClassNode, classNode, new EmptyExpression())

classNode.addField(xFieldNode)
classNode.addField(yFieldNode)
classNode.addField(zFieldNode)

CompilationUnit compilationUnit = new CompilationUnit(loader)
compilationUnit.addClassNode(classNode)

compilationUnit.compile()

instance = cls.newInstance()
instance.x = 1
运行此代码时的结果是:

Caught: BUG! exception in phase 'class generation' in source unit '?' unexpected NullpointerException
BUG! exception in phase 'class generation' in source unit '?' unexpected NullpointerException
    at asttest.Main.run(Main.groovy:35)
Caused by: java.lang.NullPointerException
    ... 1 more
我知道我可以使用元类()向类中添加字段,但使用Groovy AST类似乎更灵活