Мне генерировал проект знатока Кенгуру Spring и использую несколько инструментов (checkstyle, pmd и т.д.) для сбора информации о моем проекте. (а именно, я использую гидролокатор codehau для этого),
Кенгуру делает интенсивное использование Описаний типа Интера (ITD) AspectJ для разделения проблем как персистентность, javabeans-getter/setters и т.д.
В этих ITDs ткут во время компиляции так инструментах как checkstyle и pmd (кто работает на исходном уровне), имеют много ложных положительных сторон.
Единственное решение, которое я в настоящее время вижу, должен деактивировать проверки на Классы то использование ITDs.
Какие-либо лучшие идеи?
Не могли бы вы добавить аннотации / комментарии для конкретных инструментов в код Java для подавления ложных срабатываний? Например, у FindBugs есть собственная аннотация @SuppressWarnings.
Сомневаюсь, что это будет "нишевой проблемой" еще долго :-) Надеюсь, производители инструментов рассмотрят необходимые усовершенствования.
Если вы хотите рассуждать об исходном коде после того, как аспекты были вплетены в код, вам следует вплетать аспекты в исходный код, а не в двоичный.
Многие специалисты по вплетению аспектов используют двоичный код, потому что у них нет доступа к информации (таблица символов, имена, типы, типы выражений...), создаваемой фронт-эндом компилятора. Поэтому, хак заключается в том, чтобы использовать код виртуальной машины, производимый компилятором (этот трюк в основном работает только для наборов инструкций VM, таких как .net IL и коды классов java), который часто легко декодируется (красивый, регулярный набор инструкций), украшенный информацией о таблице символов.
Но если вы не можете рассуждать о двоичных результатах такого процесса плетения, то вы не можете быть уверены в том, что созданная программа не является баговой, что и является сутью первоначального вопроса ОП: "Как мне запустить инструменты SCA на (эффективном) сплетенном исходнике?".
Вы можете решить эту проблему двумя способами:
Я не могу помочь вам заставить сообщество сделать выбор.
Я могу предложить сильную поддержку, чтобы помочь сообществу выбрать второй путь: наш DMS Software Reengineering Toolkit. Это система преобразования программ, которая выполняет директивы вида "если вы видите это, замените его на то", но с соблюдением синтаксиса и семантики языка, фактически применяя такие изменения к структурам данных компилятора, создаваемых полными фронтэндами языка. (Это версия программной инженерии уравнительной подстановки в математике). Измененные структуры данных могут быть реэкспортированы в виде компилируемого исходного текста, снабженного комментариями.
Если вы понимаете, что могут делать преобразования в целом, вы можете увидеть, что аспектные ткачи - это частный случай систем преобразования программ. Таким образом, легко реализовать аспектные ткачи, используя DMS, и результаты являются исходным кодом, что означает, что можно применять инструменты анализа исходного кода.
Я сомневаюсь, что это действительно решит проблему ОП по анализу кода, сгенерированного Roo, в краткосрочной перспективе :-{
И FindBugs, и Cobertura НЕ работают на уровне исходного кода, а работают на уровне байт-кода.Таким образом, вы должны махать своими аспектами статически (что также улучшило бы время запуска приложения) во время компиляции (например, с использованием плагина Maven AspectJ), а не во время загрузки, а затем запускать инструменты статического анализа для полученного байт-кода.
Этот ответ не поможет вам прямо сейчас, но, надеюсь, он может быть вам интересен, так как обещает решение вашей проблемы в ближайшем будущем. Я не знаю, знакомы ли вы с IntelliJ IDEA - Java IDE от JetBrains, но работа в этом направлении уже ведется, и вот ссылка на специальный выпуск, который вы, возможно, захотите проследить: http://youtrack.jetbrains.net/issue/IDEA-26959. Просто установите на него наблюдение - и получите уведомление, когда функция будет реализована. IntelliJ IDEA предоставляет действительно мощный SCA. Поэтому поддержка ITD также должна быть высокого качества.