Как применить существующее правило sonarQube только для данного типа класса - PullRequest
0 голосов
/ 26 мая 2019

Пожалуйста, помогите мне решить эти проблемы.Просто Я хочу применить существующее правило sonarqube только для определенного типа классов .Насколько я знаю, мы можем использовать дерево классов, чтобы получить классы и идентифицировать целевой класс.Вот что я хочу знать: как я могу включить или отключить существующее правило сонара в пользовательском правиле? .

Следующий вопрос - определить базовый класс, который является дочерним классомпродлен .В качестве примера класс A расширяет класс B, B расширяет класс C, и теперь я хочу определить все классы, которые расширены из класса C (базовый класс).

Даже небольшая инструкция, ссылка, советбыть действительно ценным.

1 Ответ

1 голос
/ 27 мая 2019
  1. Я думаю, что вы не можете отключить существующее правило из стандартного Java-плагина в вашем пользовательском плагине.Вы можете отключить правило в своем профиле и заменить правило по умолчанию на пользовательское.(На самом деле может быть способ создания настраиваемого фильтра проблем в вашем плагине)

  2. Правило реализовано следующим образом.

    @ Rule (key = "S1948") publicКласс SerializableFieldInSerializableClassCheck расширяет IssuableSubscriptionVisitor

     public List<Tree.Kind> nodesToVisit() {
        return ImmutableList.of(Tree.Kind.CLASS);
      }
    
      public void visitNode(Tree tree) {
        if(!hasSemantic()) {
          return;
        }
       ... rule logic
      }
    

, просто скопируйте (и измените ключ правила и т. д.) существующее правило в свой пользовательский плагин и добавьте проверку на супертип класса

if(!classTree.symbol().type().isSubtypeOf("your.supertype.C")) || !hasSemantic()) {
  return;
}
...