A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/pmd/pmd/issues/3954 below:

[java] NPE in UseCollectionIsEmptyRule when .size() is called in a record · Issue #3954 · pmd/pmd · GitHub

Affects PMD Version:

6.45.0

Description:

UseCollectionIsEmptyRule fails with NPE if:

  1. object under test is declared as record (in case of class NPE does not occur)
  2. it has a field, which is a collection type
  3. size() method is called

Exception Stacktrace:

[WARNING] Exception applying rule UseCollectionIsEmpty on file C:\size-npe\src\main\java\example\Record.java, continuing with next rule
java.lang.NullPointerException: Cannot invoke "net.sourceforge.pmd.lang.ast.Node.findDescendantsOfType(java.lang.Class)" because "classOrEnumBody" is null
    at net.sourceforge.pmd.lang.java.rule.bestpractices.UseCollectionIsEmptyRule.getTypeOfVariableByName (UseCollectionIsEmptyRule.java:127)
    at net.sourceforge.pmd.lang.java.rule.bestpractices.UseCollectionIsEmptyRule.getTypeOfVariable (UseCollectionIsEmptyRule.java:109)
    at net.sourceforge.pmd.lang.java.rule.bestpractices.UseCollectionIsEmptyRule.isCalledOnCollection (UseCollectionIsEmptyRule.java:94)
    at net.sourceforge.pmd.lang.java.rule.bestpractices.UseCollectionIsEmptyRule.visit (UseCollectionIsEmptyRule.java:81)
    at net.sourceforge.pmd.lang.java.ast.ASTPrimarySuffix.jjtAccept (ASTPrimarySuffix.java:63)
    at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visitAll (AbstractJavaRule.java:164)
    at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply (AbstractJavaRule.java:158)
    at net.sourceforge.pmd.lang.internal.DefaultRulechainVisitor.visit (DefaultRulechainVisitor.java:26)
    at net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor.visitAll (AbstractRuleChainVisitor.java:101)
    at net.sourceforge.pmd.RuleChain.apply (RuleChain.java:72)
    at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:160)
    at net.sourceforge.pmd.SourceCodeProcessor.processSource (SourceCodeProcessor.java:209)
    at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache (SourceCodeProcessor.java:118)
    at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode (SourceCodeProcessor.java:100)
    at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode (SourceCodeProcessor.java:62)
    at net.sourceforge.pmd.processor.PmdRunnable.call (PmdRunnable.java:85)
    at net.sourceforge.pmd.processor.PmdRunnable.call (PmdRunnable.java:29)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:833)

Code Sample demonstrating the issue:

public record Record(Set<String> stringSet) {

    public boolean hasMoreThanOneItem() {
        return this.stringSet.size() > 1;
    }
}

Steps to reproduce:

  1. mvn clean verify

Running PMD through: Maven
Java version: 17


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4