我正在编写AST转换,目的是通过使引用侧的setter也调用所属侧的setter来保持双向JPA关系的同步。这在调用setFoo()时是可靠的,但是在构造函数中初始化的变量(因为声明中的初始化器语句、构造函数中的new或构造函数参数)不会被链接。
为了处理这种情况,我可以打开所有现有的构造函数(加上任何隐式默认构造函数)并添加必要的代码。但是,添加构造函数(如@TupleConstructor )的一些常见AST转换在CANONICALIZATION阶段中运行,之后没有一个阶段可以可靠地插入新指令。
如何确保将我的额外代码添加到每个构造函数中,包括可能通过其他转换添加的构造函数?
发布于 2015-11-23 15:57:12
这里最好的方法不是修改所有的构造函数,而是使用一个对象初始化器块,它被复制到所有构造函数的末尾。如果合作类做了一些愚蠢的事情,那么就会有一个小的不安全的发布风险,但这与显式地将语句添加到构造函数的末尾是相同的风险。
这样做的方法是:
classNode.addObjectInitializerStatements(assignS(target, value));https://stackoverflow.com/questions/33692549
复制相似问题