考慮註釋處理的編程模型,它是公認的如何從註釋處理器內獲得具有像這樣的編譯器上下文的引用:如何從JavacTask獲取javac編譯器上下文?
context = ((JavacProcessingEnvironment) this.processingEnv).getContext();
需要一個參考時,此編譯器上下文,可以使用通過實例的方法調用的內部編譯器的設施等Attr
,Enter
,MemberEnter
,TreeMaker
等:
make = TreeMaker.instance(context);
然而,使用Java 8 plugin mechanism,如何可以參考com.sun.tools.javac.util.Context
實例嗎?該文檔指出:
在編譯器中,編譯器每次調用 時使用一個上下文。然後使用上下文來確保每個編譯器調用存在每個編譯器階段的單個副本 。
因此在一個插件中,而對JavacTask的引用被傳遞(實際上是BasicJavacTask),那麼當前編譯器階段的上下文對象如何被檢索?
是否有任何情況下JavacTaskImpl可能已被翻譯爲com.sun.tools.javac.api.BasicJavacTask?我相信這是由於它們之間的相似性。 –