簡體   English   中英

如何從Groovy AST轉換訪問所有構造函數?

[英]How can I access all constructors from a Groovy AST transformation?

我正在編寫AST轉換,旨在通過使引用方的設置程序也稱為擁有方的設置程序來保持雙向JPA關系的同步。 這在調用setFoo()時可靠地setFoo() ,但是不會鏈接在構造函數中初始化的變量(由於聲明中的初始化程序語句,構造函數中的new或構造函數參數)。

為了處理這種情況,我可以打開所有現有的構造函數(加上任何隱式默認構造函數)並添加必要的代碼。 但是,一些常見的添加構造函數的AST轉換(例如@TupleConstructor )在CANONICALIZATION階段運行,此后沒有階段可以可靠地插入新指令。

如何確保將我的額外代碼添加到每個構造函數中,包括可能由其他轉換添加的代碼?

最好的方法不是更改所有構造函數,而是使用對象初始化程序塊,該塊被復制到所有構造函數的末尾。 如果合作類做一些愚蠢的事情,則存在較小的不安全發布風險,但這與將語句顯式添加到構造函數末尾的風險相同。

這樣做的方法是:

classNode.addObjectInitializerStatements(assignS(target, value));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM