Affects PMD Version:
6.45.0
Description:
UseCollectionIsEmptyRule fails with NPE if:
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:
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