Я написал обработчик аннотации клиента для генерации различных исходных файлов, завернутых в плагин Eclipse. В рамках этого процесса он также регистрирует различные ошибки и предупреждения с помощью обычного вызова ProcessingEnvironment#getMessager().printMesssage(Kind, String, Element)
.
Я тестировал процессор, отлаживая плагин в Eclipse. В запущенном подэкзамене Eclipse процессор работает как ожидалось - исходные файлы генерируются, подбираются и интерпретируются компилятором по желанию. Любые компиляторы (то есть нестандартные) ошибки в сгенерированных и не сгенерированных появятся в редакторе, "Проблемы" и т.д., Как и ожидалось.
Однако я вижу много несоответствий в том, как появляются пользовательские ошибки и предупреждения. Поведение, которое я вижу, выглядит следующим образом:
- Если ни один элемент не указан, все сообщения появляются в журнале ошибок в типе Info, независимо от типа, указанного при регистрации ошибки.
- Если сообщение имеет вид
NOTE
, оно всегда появляется в журнале ошибок в типе Info, независимо от того, указан ли элемент. - В противном случае, если элемент указан, ошибки и предупреждения периодически появляются в представлении "Проблемы" и в редакторе; иногда они не появляются нигде. Они никогда не появляются в журнале ошибок, является ли тип
ERROR
илиWARNING
В соответствии с вышеизложенным, настоящая проблема - пункт 3 - что в определенных ситуациях я просто не могу получить ошибки, чтобы появляться в редакторе, несмотря на то, что они вошли в действительные элементы. Фактически, мне удалось достоверно сделать ошибки и не появляться, просто изменив имя определенного сгенерированного исходного файла.
Конечно, проблема заключается не в самом имени файла, а в том, что создание класса с именем, которое соответствует ссылкам, уже имевшимся в коде, приводит к тому, что ошибки становятся скрытыми, в то же время генерируя их другим именем (или вообще не ) вызывает ошибки (как и все обычные ошибки компилятора, вызванные отсутствующим классом). Самое странное, что нет ничего принципиально иного в этом сгенерированном классе по сравнению с любым из других (которого их много), хотя он уникален по своей структуре и как он ссылается. Он также достаточно длинный (около 400 методов), но искусственное сокращение его не имело никакого значения. Другие сгенерированные классы также имеют существующие ссылки в коде и не подавляют ошибки.
К сожалению, я еще не успел проверить, возникает ли эта проблема при развертывании плагина Eclipse (т.е. работает в "реальном" экземпляре Eclipse), или действительно, если проблема возникает при вызове javac
явно или вызывая сборку Maven.
Без публикации полного кода плагина я не ожидаю, что кто-то сможет напрямую помочь, но я очень открыт для любых предложений или советов, если у кого-то есть проблемы с ошибками, вызванными обработкой аннотаций. Мне кажется, как ошибка в Eclipse, но я не смог найти ссылку на нее в Интернете. Я также не могу найти никаких ошибок в файлах .metadata/.log как основного экземпляра Eclipse, так и запущенного подэкзамена Eclipse. Наконец, я убедился, что в коде процессора аннотаций не было исключено или не указано исключение.
Сведения о версии Eclipse:
Version: Luna Service Release 1a (4.4.1)
Build id: 20150109-0600
Любая помощь приветствуется и благодарит заранее:)