Как я могу статически обнаруживать отсутствующие аннотации @Override?

Между Java 5 и Java 6 правила относительно аннотаций @Override для методов, возникающих в интерфейсах (в отличие от суперклассов), были изменены - прежде чем они не были разрешены, но после того, как они были. Однако они не требуются javac.

Некоторые IDE, например eclipse, могут генерировать ошибки или предупреждения для таких отсутствующих переопределений. Я ищу какой-либо инструмент статического анализа, который может обнаруживать недостающие переопределения, поэтому я могу сообщать/блокировать их программно.

Это не похоже на то, что я знаю, как findbugs, и многие могут это сделать - возможно, потому, что @Override имеет только уровень хранения источника, инструменты работают, а инструменты уровня источника, такие как checkstyle, не понимают полную иерархию классов.

Ответ 1

Вы можете просто включить действие сохранения в Eclipse, чтобы автоматически добавить отсутствующую аннотацию @Override - см. "Окно" > "Настройки" > "Java" > "Редактор" > "Сохранить действия" > "Отсутствует код" > Добавить отсутствующие аннотации.

Ответ 2

Вам, очевидно, нужно что-то, что обрабатывает исходный код Java, и дает вам доступ к структурам кода и атрибутам.

Я понимаю, что у Eclipse есть несколько синтаксических машин в JDT, и вы могли бы использовать их.

В нашем DMS Software Reengineering Toolkit имеется полный парсер Java-источников (включая захват атрибутов), полное имя и тип разрешения, а также возможность читать сразу несколько исходных файлов. DMS предназначен для создания собственного инструмента для анализа, поэтому вы можете определить условия, при которых вы настаиваете на наличии атрибутов.

Поскольку DMS также предоставляет возможности преобразования программы, вы даже можете определить правила настройки, которые будут изменять исходный код, где ясно, какие атрибуты должны присутствовать.

DMS и правила языков Java не являются тривиальными для изучения; это требует некоторых усилий для настройки. Но если у вас действительно есть тысячи разработчиков, эта стоимость затухает из-за невозможности контролировать то, что они делают, поэтому инвестиции имеют смысл.

Ответ 3

JArchitect Могло решить вашу проблему, используя запрос CQLinq и exceute, подобный этому

из t в типах, где! t.HasAnnotation( "Override" ) выберите t

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