【问题标题】:SonarLint - RedundantThrowsDeclarationCheck - false positive?SonarLint - RedundantThrowsDeclarationCheck - 误报?
【发布时间】:2016-12-25 11:07:57
【问题描述】:

在下面的代码中,我收到来自Foo1Exception(在throws 关键字后面)的squid:RedundantThrowsDeclarationCheck 规则的警告:Remove the redundant '!unknownSymbol!' thrown exception declaration(s).

Foo.java:

public class Foo {

    public static boolean bar(final String test) throws Foo1Exception, Foo2Exception {

        if (test.startsWith("a"))  {
            throw new Foo1Exception();
        } else if (test.startsWith("b")) {
            throw new Foo2Exception();
        } else if (test.startsWith("c")) {
            return true;
        }

        return false;
    }

}

两个例外都在单独的文件中声明:

Foo1Exception.java:

class Foo1Exception extends Exception {}

Foo2Exception.java:

class Foo2Exception extends Exception {}

我认为这是误报,不是吗? 也很有趣:我只在 IntelliJ IDEA 的 SonarLint 插件中没有直接在 SonarQube(Web 界面)中收到此消息。 有什么想法吗?

我正在使用:IntelliJ IDEA 2016.2.2; SonarLint 2.3(带有工作服务器绑定); SonarQube 5.6; SonarQube Java 插件 4.0; Java 8

【问题讨论】:

  • 您是否从同一台服务器(可能是远程服务器)获取规则?还是只使用默认规则集??
  • 您的项目设置如何?这似乎异常的类型没有解决,这就是(错误地)提出问题的原因。该异常的源代码是否在同一模块中?你能分享一下这方面的细节吗?
  • @SupunWijerathne,我已经配置了我的远程服务器并单击了“更新绑定”按钮。它正在工作。几个月以来我一直在使用它,没有任何问题,在更改服务器上的规则后,单击“更新”按钮,我在 SonarLint 中获得了更新的规则。是这个意思吗?
  • @benzonico,我不知道你到底想知道什么,抱歉。我正在开发一个大型多模块 maven 项目,对于上面描述的测试,我刚刚在 one 模块内创建了三个新的 java 类(每个在一个单独的文件中)。如果我将Foo 类中的两个异常类声明为内部类,则它可以正常工作。仅当它们位于单独的文件中时,才会显示误报消息。
  • @CptS 您是否也使用 sonarqube 插件获取了新规则?如果两个插件使用不同的规则集,显然它们生成的问题之间可能存在不匹配。这就是我问的。 :) 一般来说,SonarQube 应该报告更多问题 -> 所有 SonarLint 问题 + 其他一些问题,因为 sonarlint 在每个文件上独立运行,而 sonarqube 是全局的。

标签: java intellij-idea sonarqube sonarlint


【解决方案1】:

这似乎已在 SonarLint 2.3.1 中修复。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2018-08-19
    • 2016-07-02
    • 2017-05-17
    • 1970-01-01
    • 2016-03-05
    • 2018-02-15
    • 2016-10-30
    • 2016-07-01
    相关资源
    最近更新 更多