Java APT и __LINE__ - PullRequest
       33

Java APT и __LINE__

0 голосов
/ 04 августа 2010

В другом посте ( Scala, Maven и препроцессоры ) я спросил о предварительной обработке Java и Scala с использованием такого инструмента, как m4.Мне нужно добавить возможности __FILE__ и __LINE__ (пожалуйста, не задавайте вопросов по "случаям использования").Кто-то предложил проверить плагины компилятора Java (javax.annotation.processing.Processor).

Как можно поступить с помощью специальных аннотаций (@File, @Line или @FileLine, может быть)?Будем весьма благодарны за любые примеры, подобные этому.

Ответы [ 2 ]

1 голос
/ 04 августа 2010

В комментарии к вашему предыдущему вопросу вы упомянули 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 голосов
/ 04 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...