如何在Sonar中为类或方法禁用SQUID:UnusedProtectedMethod?

时间:2012-03-28 17:24:58

标签: java sonarqube

我有一些Hadoop映射并减少覆盖受保护方法的类。声纳将这些标记为:

Unused protected method
Plugin: squid    Key: UnusedProtectedMethod

我知道Sonar中有一个解决方案可以解决这个问题,而且在某些时候我的组织会使用带有该修复的版本。与此同时,我想禁用警告。我试过了:

@SuppressWarnings("UnusedProtectedMethod")

@SuppressWarnings("SQUID.UnusedProtectedMethod")

无济于事。

@SuppressWarnings适用于PMD问题,@ edu.umd.cs.findbugs.annotations.SuppressWarnings(value =“blah”)适用于findbugs问题。是否有另一种鱿鱼问题的变种,或者它还没有得到支持?

2 个答案:

答案 0 :(得分:4)

使用

@SuppressWarnings("squid:UnusedProtectedMethod")

另见SonarQube Java Plugin FAQ - SuprressWarnings

这已在SonarQube Java插件版本2.8中实现。

答案 1 :(得分:3)

我发现Squid只支持“all”。来自squid插件源,在SuppressWarningsAnnotationUtils.java中:

private static final String VALUE = "\"all\"";
...


  public static boolean isSuppressAllWarnings(DetailAST ast) {
    DetailAST suppressWarningsAnnotation = getSuppressWarningsAnnotation(ast);
    if (suppressWarningsAnnotation != null) {
      DetailAST warningHolder = findWarningsHolder(suppressWarningsAnnotation);
      for (DetailAST warning = warningHolder.findFirstToken(TokenTypes.EXPR); warning != null; warning = warning.getNextSibling()) {
        if (warning.getType() == TokenTypes.EXPR) {
          DetailAST fChild = warning.getFirstChild();
          if (fChild.getType() == TokenTypes.STRING_LITERAL) {
            String text = warning.getFirstChild().getText();
            if (VALUE.equals(text)) {
              return true;
            }
          }
        }
      }
    }
    return false;
  }

这里有讨论:Support the annotation "@SuppressWarnings" at class and method level