Joh*_*Doe 19 java code-analysis for-loop static-analysis pmd
我想确认这是否是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();
}
}
Run Code Online (Sandbox Code Playgroud)
第1-3行被标记为UR异常,而重写它以使用局部变量进行迭代很好.
想要消除尽可能多的PMD违规,但不得不求助于旧的循环结构作为一种解决方法.
虽然有争议,但我不希望禁用此规则,因为我发现DD,并且DU异常标记为有用.
bar*_*uin 16
您似乎遇到了PMD中的错误.该DataflowAnomalyAnalysis规则似乎并没有捕捉各种可能的变量定义的(另一个例子发现这里).UR代表"未定义的引用",这显然是不正确的.
所以,你可以做什么?
由于问题似乎主要影响规则的UR部分,因此您可以禁用它并继续使用DU和DD部分.您需要一个相当新版本的PMD才能执行此操作.在您的规则集文件中,抑制UR结果如下:
<rule ref="rulesets/java/controversial.xml/DataflowAnomalyAnalysis">
<properties>
<property name="violationSuppressRegex" value="^Found 'UR'-anomaly.*"/>
</properties>
</rule>
Run Code Online (Sandbox Code Playgroud)
更新:对于PMD 6. +,规则引用已更改(感谢ZuziaKru):
<rule ref="category/java/errorprone.xml/DataflowAnomalyAnalysis">
<properties>
<property name="violationSuppressRegex" value="^Found 'UR'-anomaly.*"/>
</properties>
</rule>
Run Code Online (Sandbox Code Playgroud)
在我看来,整个UR检查有点过头了,因为编译器不会接受未定义的引用.而现在,运行编译器不再是一件大事.
| 归档时间: |
|
| 查看次数: |
8131 次 |
| 最近记录: |