Affects PMD Version:
6.36.0
Description:
I get an exception running PMD on Gradle 7.1.1 on JDK 16.
Exception Stacktrace:
Exception applying rule InefficientStringBuffering on file /home/boris/code/test/src/main/java/a/A.java, continuing with next rule
java.lang.NullPointerException: Cannot invoke "net.sourceforge.pmd.lang.java.ast.AccessNode.isFinal()" because "accessNodeParent" is null
at net.sourceforge.pmd.lang.java.rule.performance.InefficientStringBufferingRule.visit(InefficientStringBufferingRule.java:86)
at net.sourceforge.pmd.lang.java.ast.ASTAdditiveExpression.jjtAccept(ASTAdditiveExpression.java:40)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visitAll(AbstractJavaRule.java:163)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply(AbstractJavaRule.java:157)
at net.sourceforge.pmd.lang.internal.DefaultRulechainVisitor.visit(DefaultRulechainVisitor.java:26)
at net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor.visitAll(AbstractRuleChainVisitor.java:99)
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:200)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:113)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:95)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:57)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:85)
at net.sourceforge.pmd.processor.MonoThreadProcessor.runAnalysis(MonoThreadProcessor.java:32)
at net.sourceforge.pmd.processor.AbstractPMDProcessor.processFiles(AbstractPMDProcessor.java:139)
at net.sourceforge.pmd.PMD.processFiles(PMD.java:359)
at net.sourceforge.pmd.ant.internal.PMDTaskImpl.doTask(PMDTaskImpl.java:188)
at net.sourceforge.pmd.ant.internal.PMDTaskImpl.execute(PMDTaskImpl.java:279)
at net.sourceforge.pmd.ant.PMDTask.execute(PMDTask.java:50)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at groovy.util.AntBuilder.performTask(AntBuilder.java:335)
at groovy.util.AntBuilder.nodeCompleted(AntBuilder.java:280)
at org.gradle.api.internal.project.ant.BasicAntBuilder.nodeCompleted(BasicAntBuilder.java:90)
at jdk.internal.reflect.GeneratedMethodAccessor93.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:484)
at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:196)
at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:163)
at org.gradle.api.internal.project.antbuilder.AntBuilderDelegate.nodeCompleted(AntBuilderDelegate.java:124)
at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:160)
at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:74)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:44)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:148)
at org.gradle.api.plugins.quality.internal.PmdInvoker$_runPmd_closure1.doCall(PmdInvoker.groovy:119)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
...
Code Sample demonstrating the issue:
build.gradle
:
plugins { id 'java' id 'pmd' } repositories { mavenCentral() } dependencies { pmd 'net.sourceforge.pmd:pmd-core:6.36.0' pmd 'net.sourceforge.pmd:pmd-java:6.36.0' implementation 'com.google.guava:guava:30.1.1-jre' } tasks.withType(Pmd).configureEach { ruleSetFiles = files("${rootDir}/pmd.xml") }
src/main/java/a/A.java
:
package a; import java.io.InputStream; import com.google.common.io.ByteStreams; public record A(long from, long to) { public InputStream a() { return ByteStreams.limit(null, to - from); } }
pmd.xml
:
<?xml version="1.0" encoding="UTF-8"?> <ruleset name="pmd" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://raw.githubusercontent.com/pmd/pmd/master/pmd-core/src/main/resources/ruleset_2_0_0.xsd"> <rule ref="category/java/performance.xml"> </rule> </ruleset>
Steps to reproduce:
Run gradle pmdMain
on the build.gradle
file above.
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