2013-03-12 85 views
0

我想在源代碼編譯爲類文件之前添加一些東西(例如:add方法或字段)。但我不知道該怎麼做。有什麼辦法可以做到嗎?在Java編譯器將AST編譯成類文件之前,我可以修改AST嗎

我知道一個開源項目Lombok,它可以將setters和getters方法自動添加到類中,IDE(eclipse)現在可以找到新添加的方法。所以有人可以告訴我它是如何實現的?

+0

看看[cglib](http://cglib.sourceforge.net/)。它可能會覆蓋您的需求,但它不是編譯器擴展。 – Henrik 2013-03-12 09:22:48

+0

@Henrik謝謝你的幫助。 – Tony 2013-03-12 09:25:29

回答

2

source code for lombok is on github。 Afaik它使用javac annotation processing feature的內部API。註釋處理器只應該能夠創建新文件,而不是修改當前編譯的文件。通過類型轉換,修補類加載器並重寫某些方法,lombok能夠修改當前正在編譯的java文件的抽象語法樹並添加方法或源代碼。它的工作原理,但我認爲它是一個黑客攻擊,而不是太依賴它。

如果您想要修改創建的類文件,像我所見,像cglibasm這樣的字節碼重寫框架是更清潔的解決方案。

相關問題