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

时间:2019-05-26 17:16:24

标签: java sonarqube sonarqube-scan sonarlint sonarcloud

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

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

即使是小的指南,链接,技巧也将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

  2. 规则是这样实现的。

    @Rule(key =“ S1948”)     公共类SerializableFieldInSerializableClassCheck扩展了IssuableSubscriptionVisitor

    @Service
    public class AlmConnectivity {
    
        Logger log = LoggerFactory.getLogger(AlmConnectivity.class);
    
        @Autowired
        @Qualifier("config")
        Config config;
    
        private Proxy proxy;
    
        private OkHttpClient client;
    
        @PostConstruct
        private void initProxyBean() {
            System.err.println("Config: " + config);
            proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(config.getProxyHost(), config.getProxyPort()));
        }
    }
    

只需将现有规则复制(并更改规则键等)到您的自定义插件中,并添加对类超类型的检查

 public List<Tree.Kind> nodesToVisit() {
    return ImmutableList.of(Tree.Kind.CLASS);
  }

  public void visitNode(Tree tree) {
    if(!hasSemantic()) {
      return;
    }
   ... rule logic
  }