如何仅对给定的类类型应用现有的 sonarQube 规则

Posted

技术标签:

【中文标题】如何仅对给定的类类型应用现有的 sonarQube 规则【英文标题】:How to apply an existing sonarQube rule for only given class type 【发布时间】:2019-10-12 10:06:29 【问题描述】:

请帮我解决这些问题。只是我只想将现有的声纳规则应用于某些类型的类。据我所知,我们可以使用类树来获取类并识别目标类。我想知道的是如何在自定义规则中启用或禁用现有的声纳规则?

下一个问题是确定作为子类扩展的基类。例如,A 类扩展 B 类,B 类扩展 C 类,现在我想识别从 C 类扩展的所有类(基类)。

即使是一个小的指南、链接、提示也会非常感激。

【问题讨论】:

你想应用什么规则? @Todd 这是规则““可序列化”类中的字段应该是瞬态的或可序列化的”rules.sonarsource.com/java/RSPEC-1948 【参考方案1】:

    我认为您无法从自定义插件中的默认 Java 插件禁用现有规则。您可以在您的配置文件中禁用该规则,并将默认规则替换为自定义规则。 (实际上可能有办法在您的插件中创建自定义问题过滤器)

    规则是这样实现的。

    @Rule(key = "S1948") 公共类 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;

【讨论】:

以上是关于如何仅对给定的类类型应用现有的 sonarQube 规则的主要内容,如果未能解决你的问题,请参考以下文章

如何使用现有的和更新的类微调 keras 模型?

使用 SonarQube 自定义 Fxcop 规则

如何使 .NET Web Api 仅对我的应用程序私有

如何注册现有的 Jersey MessageBodyReader Provider 来处理其他内容类型?

反射机制,反射的性能,如何优化?

XMPP:使客户端仅对该客户端的其他实例在线显示