На работе мы используем несколько инструментов для сбора нескольких показателей (в основном цикломатическая сложность и LCOM). Мы используем их, чтобы получать предупреждающие флаги и направлять упреждающие усилия по рефакторингу. Это очень помогло повысить качество кода.
Однако этот процесс не привязан к процессу сборки. Проводится отдельно. Более того, я ищу что-то, что можно сделать встроенным в исходный код (в отличие от запуска внешнего процесса).
Кто-нибудь знает о группе аннотаций и настраиваемых процессорах аннотаций, которые можно запускать из компилятора и которые сделают сборку неудачной, если код не соответствует пороговым показателям цикломатики/LCOM?
Думаю, я мог бы запустить ckjm, checkstyle и pmd из maven/ant, НО некоторые работают с исходным кодом, а другие работают с байт-кодом. Было бы неплохо иметь один консолидированный инструмент, который работает с исходным кодом до начала компиляции.
Другое дело, что было бы неплохо, если бы были наборы аннотаций, которые могли бы управлять этим (чтобы разрешить настройку, которая неизбежно потребуется для крайних случаев).
@LCOM3(Threshold=1.5)
public class SomeDumbPojo {... buch of gets/sets...}
// by default would be measured against a strict LCOM3
public class ActualBizClass
{
@CYCLOMATIC_COMPLEXITY(Threshold=15)
public void someFatIrreducibleMethod(){...}
}
Затем, когда мы запускаем инструмент, по умолчанию применяется строгий (и настраиваемый) порог метрики, за исключением тех артефактов, которые аннотированы (надеюсь, задокументированными и законными) более мягкими порогами. Для некоторых методов, которые нельзя/не следует сокращать, имеет смысл упрощенная цикломатическая сложность. Для простых POJO без поведения LCOM должны быть расслаблены... и так далее и тому подобное.
Я искал и гуглил, как мог, я ничего не смог найти (надеюсь, с открытым исходным кодом). Но я мог бы также спросить здесь, на всякий случай, если кто-то знает что-то в этом роде.
Спасибо.