在另一篇文章(Scala, Maven, and preprocessors)中,我询问了使用像m4这样的工具预处理Java和Scala。我需要添加__FILE__
和__LINE__
功能(请不要使用“用例”问题)。有人建议检查Java编译器插件(javax.annotation.processing.Processor
)。
如何使用特殊注释(@File
,@Line
或@FileLine
执行此操作?任何类似的例子都将非常感激。
答案 0 :(得分:1)
在您之前提出的问题的评论中,您提到了使用javaagent的http://www.gallot.be/?p=85。修改该代码以在预处理步骤中运行相同的转换应该相对容易。您需要将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();
答案 1 :(得分:0)
如果我理解正确,那么执行此操作的标准方法是使用JSR-45,就像为JSP页面完成调试一样。
这会是您选择的预处理器的选项吗?