为什么明显使用未使用的方法会导致 PMD 违规

Why a PMD violation for unused method when it is obviously used

PMD 失败:... Rule:UnusedPrivateMethod Priority:3 避免未使用的私有方法,例如 'printMyString(String)'

private void anyMethod() {
    var myString = "a String";
    printMyString(myString);
}

private void printMyString(String string) {
    System.out.println(string);
}

将此插件用于 maven

            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>3.12.0</version>

这似乎是 PMD 中的一个错误,因为它在通过推断 "var" 跟踪变量类型时存在问题。目标方法有具体定义的参数。

我可以通过禁用特定的 PMD 规则来解决这个问题。在 pom.xml 中,我修改了 PMD 插件以使用本地规则文件。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>3.12.0</version>
            <configuration>
                <linkXRef>false</linkXRef>
                <printFailingErrors>true</printFailingErrors>
                <failOnViolation>true</failOnViolation>
                <rulesets>
                    <ruleset>${basedir}/PMD.xml</ruleset>
                </rulesets>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>check</goal>
                        <goal>cpd-check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

和 PMD.xml 文件(在项目的根目录中)。

<ruleset xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Default Maven PMD Plugin Ruleset" xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
    <description>
        Excluding rules.
    </description>
    <rule ref="category/java/bestpractices.xml">
        <exclude name="UnusedPrivateMethod"/>
    </rule>
</ruleset>