看来您遇到了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>
更新: 对于PMD 6. +,规则ref已更改(感谢ZuziaKru):
<rule ref="category/java/errorprone.xml/DataflowAnomalyAnalysis">
<properties>
<property name="violationSuppressRegex" value="^Found 'UR'-anomaly.*"/>
</properties>
</rule>
在我看来,整个UR检查有点过头,因为编译器将不接受未定义的引用。如今,运行编译器已不再是一件大事。