2010-08-04 53 views
0

在另一篇文章(Scala, Maven, and preprocessors)中,我詢問了如何使用類似m4的工具預處理Java和Scala。我需要添加__FILE____LINE__功能(請不要使用「用例」問題)。有人建議檢查Java編譯器插件(javax.annotation.processing.Processor)。Java APT和__LINE__

怎麼會這樣做使用特殊的註釋(@File,@Line@FileLine也許)?任何類似的例子將不勝感激。

回答

1

在上一個問題的評論中,您提到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(); 
+0

Örn:謝謝。我會研究一下。 – Ralph 2010-08-04 14:58:49

0

如果我理解這個正確的,這樣做的標準方法是使用JSR-45喜歡它完成JSP頁面以允許調試。

對於您選擇的預處理器,這會是一個選項嗎?