2010-08-04 3 views
0

В другом посте (Scala, Maven, and preprocessors) Я спросил о предварительной обработке Java и Scala с помощью инструмента вроде m4. Мне нужно добавить __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

0

Если я понимаю правильно, стандартный способ сделать это с JSR-45, как ему выполняется для JSP-страниц, позволяющих отлаживать.

Будет ли это вариант для выбранного вами препроцессора?

Смежные вопросы