SonarQube-可以通过提示使其静音吗?

时间:2019-01-13 15:19:35

标签: sonarqube

我想找到一种提示SonarQube的方法,以免对某些代码段发出警告。

示例1:“可以删除空语句块”-实际上,不能将其删除:

static void closeNX (java.io.FileInputStream is) {
    try {
        is.close ();
    } catch (Exception e) {} <Warning comes here>
}

(编辑:当is.readis.write已经抛出异常时调用此方法,因此不再需要is.close中的任何异常。)

示例2:finalize已过时,因为即使您的图书馆用户忘记调用close / dispose也会最终释放内存,但是本机资源(打开的文件,套接字,IPC等)不会被释放,这就是为什么java.io.FileInputStream确实具有finalize方法的原因:

protected void finalize() throws IOException {
    if ((fd != null) &&  (fd != FileDescriptor.in)) {
        close();
    }
}

(编辑:即使拥有finalize也不保证如果用户不致电close / dispose但没有{{1} }确实保证,如果用户不调用finalize / close

,则不会释放本机资源。

1 个答案:

答案 0 :(得分:1)

要使消息静音,您可以通过配置quality profile来配置SonarQube中启用了哪些规则,也可以为特定文件添加an exclusion

第三种方法是在问题所在行添加// NOSONAR评论。但是,通过这种方式,您将忽略所有规则。

现在,您提供了有关示例的信息-无法删除空的catch块,但是,它被认为是代码异味。也许至少应该记录一个异常?有关更多讨论,请参见此处Why are empty catch blocks a bad idea?

对于finalize,使用它们来释放资源不是一个好主意,因为无法保证何时调用finalize或是否将其完全调用。最好显式释放资源,而不要依赖垃圾回收来调用finalize。您可以在JDK中检查这些错误,为什么连Java作者也不想在java.io.FileInputStream https://bugs.openjdk.java.net/browse/JDK-8187325https://bugs.openjdk.java.net/browse/JDK-8212050

中使用finalize。