我想确认这是否是 PMD 的错误?如果是,我如何提交票证。
public static void main(final String[] args) {
for (final String string : args) {
string.getBytes(); //UR Anomaly
}
for (int i = 0; i < args.length; i++) {
args[i].getBytes();
}
}
第 1-3 行被标记为 UR 异常,而重写它以使用局部变量进行迭代很好。
希望尽可能多地消除 PMD 违规,但不得不求助于旧循环构造作为解决方法很不方便。
虽然存在争议,但我不希望禁用此规则,因为我发现 DD 和 DU 异常标记很有用。
最佳答案
您似乎遇到了 PMD 中的错误。 DataflowAnomalyAnalysis rule 似乎没有捕捉到所有可能类型的变量定义(找到另一个示例 here )。 UR 代表“ undefined reference ”,这显然是不正确的。
那么,你能做什么呢?
由于问题似乎主要影响规则的 UR 部分,您可以禁用它并继续使用 DU 和 DD 部分。您需要一个相当新的 PMD 版本来执行此操作。在您的规则集文件中,抑制 UR 的发现,如下所示:
<rule ref="rulesets/java/controversial.xml/DataflowAnomalyAnalysis">
<properties>
<property name="violationSuppressRegex" value="^Found 'UR'-anomaly.*"/>
</properties>
</rule>
更新: 对于 PMD 6.+,规则 ref 已更改(感谢 ZuziaKru):
<rule ref="category/java/errorprone.xml/DataflowAnomalyAnalysis">
<properties>
<property name="violationSuppressRegex" value="^Found 'UR'-anomaly.*"/>
</properties>
</rule>
在我看来,整个 UR 检查有点过头了,因为编译器不会接受 undefined reference 。而如今,运行编译器已不再是什么大不了的事。
关于每个循环的 Java 都被 PMD 标记为 UR 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592497/