在另一篇文章(Scala, Maven, and preprocessors)中,我詢問了如何使用類似m4的工具預處理Java和Scala。我需要添加__FILE__
和__LINE__
功能(請不要使用「用例」問題)。有人建議檢查Java編譯器插件(javax.annotation.processing.Processor
)。Java APT和__LINE__
怎麼會這樣做使用特殊的註釋(@File
,@Line
或@FileLine
也許)?任何類似的例子將不勝感激。
在另一篇文章(Scala, Maven, and preprocessors)中,我詢問了如何使用類似m4的工具預處理Java和Scala。我需要添加__FILE__
和__LINE__
功能(請不要使用「用例」問題)。有人建議檢查Java編譯器插件(javax.annotation.processing.Processor
)。Java APT和__LINE__
怎麼會這樣做使用特殊的註釋(@File
,@Line
或@FileLine
也許)?任何類似的例子將不勝感激。
在上一個問題的評論中,您提到http://www.gallot.be/?p=85,它使用了一個javaagent。修改該代碼以在預處理步驟中運行相同的轉換應該相對容易。您需要到CodeLocationClassAdapter
提取到自己的頂層類和稱呼它爲每個類文件:
String name = "com/stackoverflow/Test.class";
byte[] bytes = // read bytes of the classfile from disk
ClassReader cr = new ClassReader(bytes);
ClassWriter cw = new ClassWriter(cr, 0);
ClassVisitor cv = new CodeLocationClassAdapter(cw);
cr.accept(cv, 0);
// write modified class file
OutputStream out = new FileOutputStream(name);
out.write(cw.toByteArray());
out.close();
如果我理解這個正確的,這樣做的標準方法是使用JSR-45喜歡它完成JSP頁面以允許調試。
對於您選擇的預處理器,這會是一個選項嗎?
Örn:謝謝。我會研究一下。 – Ralph 2010-08-04 14:58:49