Java APT和__LINE__

时间:2010-08-04 13:07:04

标签: java annotations preprocessor

在另一篇文章(Scala, Maven, and preprocessors)中,我询问了使用像m4这样的工具预处理Java和Scala。我需要添加__FILE____LINE__功能(请不要使用“用例”问题)。有人建议检查Java编译器插件(javax.annotation.processing.Processor)。

如何使用特殊注释(@File@Line@FileLine执行此操作?任何类似的例子都将非常感激。

2 个答案:

答案 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页面完成调试一样。

这会是您选择的预处理器的选项吗?