【发布时间】: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