Почему нарушение PMD для неиспользованного метода, когда он явно используется - PullRequest
0 голосов
/ 23 октября 2019

Отказ PMD: ... Правило: UnusedPrivateMethod Приоритет: 3 Избегайте неиспользуемых частных методов, таких как 'processDocument (SolrInputDocument, Map, LongAdder)'

Это использует Java11 и ключевое слово "var" для определенияrowAdder. Если я использую LongAdder в качестве типа, вместо PMD не произойдет сбой. Как я могу использовать «var», а также, чтобы PMD не вызывал ошибку?

private int addProducts(SolrInputDocument autofillDocument,
                        Document doc,
                        int rows) {

    var rowAdder = new LongAdder();
    rowAdder.add(rows);

    processDocument(autofillDocument,
                    doc.getRecord(),
                    rowAdder);

    return rowAdder.intValue();
}

private void processDocument(SolrInputDocument autofillDocument,
                             Map<String, Object> docMap,
                             LongAdder rowAdder) {

1 Ответ

0 голосов
/ 23 октября 2019

Кажется, что это ошибка в 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>
...