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.
Affects PMD Version:
6.36.0
Description:
I get an exception running PMD on Gradle 7.1.1 on JDK 16.
Exception Stacktrace:
Code Sample demonstrating the issue:
build.gradle:src/main/java/a/A.java:pmd.xml:Steps to reproduce:
Run
gradle pmdMainon thebuild.gradlefile above.