gpt4 book ai didi

java - 如何为鱿鱼 :S1161 rule: "@Override" annotation should be used on any method 强制执行正确的行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:35 26 4
gpt4 key购买 nike

我开发了一个 Java 库,用于基于 JDK5 的应用程序。用于构建应用程序的工具需要 JDK7 或更高版本。我使用版本 8 更新 45:

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

分析后,我收到了很多关于实现接口(interface)规范的方法的误报,例如:

public interface FileScanner {

Collection<File> getFiles(File directory, String[] includes, String[] excludes);
}

False Positive Example

(查看完整来源:https://github.com/gabrysbiz/maven-plugin-utils)

我发现该规则根据字节码做出决定(参见 Jira ticket)。我的类(class)主要版本等于 49,这与 JDK5 有关(参见 major version numbers )

$ javap -verbose AntFileScanner.class
Classfile /D:/Projects/maven-plugin-utils/sources/plugin-utils/target/classes/biz/gabrys/maven/plugin/util/io/AntFileScanner.class
Last modified 2015-07-16; size 1881 bytes
MD5 checksum 7ea340377469b44df88d5936c2ff4134
Compiled from "AntFileScanner.java"
class biz.gabrys.maven.plugin.util.io.AntFileScanner implements biz.gabrys.maven.plugin.util.io.FileScanner
minor version: 0
major version: 49
flags: ACC_SUPER

我使用 Jenkins 运行分析1.619 与 SonarQube Plugin 2.2.1.我用 SonarQube 5.1.1 与 Java Plugin 3.4.

我该如何纠正它?

最佳答案

其他人也有同样的问题,您可以在链接中看到:

http://blog.gmane.org/gmane.comp.java.sonar.general/page=91

我尝试按照建议使用“sonar.java.source”和“sonar.java.target”来解决:

http://docs.sonarqube.org/display/SONAR/Features+details

但我认为它现在只适用于 PMD 插件:

http://docs.sonarqube.org/display/PLUG/PMD+Plugin

然后,我看到了 JIRA 票证。因此,实际上在这种情况下存在错误。 JIRA CR 关闭了,但问题仍然出现在 Java 5 上: https://jira.sonarsource.com/browse/SONARJAVA-249

“事实上,我们现在无法实现此规则。@Override 注释具有源代码保留并被编译器删除。所以我们检测它的唯一机会是来自 AST。但是,我们目前只能从字节码中检测出一个方法是否真的覆盖了另一个方法。因此,此规则取决于可从检查中获得的符号表。”

有一个新的 Unresolved CR 来解决这个问题,https://jira.sonarsource.com/browse/SONARJAVA-818 .

修复后,它将使用我之前说过的属性“sonar.java.source”。

因此,要在修复程序尚未准备好时解决此问题,我们有两个选择:

1) 在服务器上将其标记为“误报”; 2) 使用规则引用 (S1161) 使用“@SuppressWarnings”注释:

http://docs.sonarqube.org/display/PLUG/Java+FAQ

在这种情况下,您的代码将是:

public class FileScannerImpl implements FileScanner {
@SuppressWarnings("squid:S1161")
Collection<File> getFiles(File directory, String[] includes, String[] excludes) {
[...]
}
}

关于java - 如何为鱿鱼 :S1161 rule: "@Override" annotation should be used on any method 强制执行正确的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com