На работе мы используем несколько инструментов для захвата нескольких показателей (в основном, циклической сложности и LCOM). Мы используем их для получения предупреждающих флагов и для руководства упреждающими усилиями по рефакторингу. Это было очень полезно в повышении качества кода.Аннотации для обеспечения циклической сложности и ограничений 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 необходимо смягчить ... и т. Д. И т. Д.
Взгляд и поиск, как я мог, я не смог найти ничего (надеюсь, с открытым исходным кодом). Но я мог бы также спросить здесь, на всякий случай, если кто-то знает об этом.
Спасибо.
My bad, by "compilation" Я имею в виду шаг, на котором javac начинает выплескивать байт-код. Мы используем проприетарный инструмент на работе, который сканирует исходный код Java и выводит из него показатели (никакой компиляции не требуется), но инструмент не поддается, чтобы сделать его частью процесса сборки. Что касается идеи использования аннотации для добавления заданного порога, это более или менее продукт процесса. Строка прерывается, если класс имеет метод с циклической сложностью, например, 10, за исключением документированных случаев, которые представлены, рассмотрены и приняты (и, таким образом, аннотируются таким образом, чтобы сборка продолжалась.) –