Affects PMD Version:7.0.0-rc4
Rule: CloseResource
Please provide the rule name and a link to the rule documentation:
https://docs.pmd-code.org/latest/pmd_rules_java_errorprone.html#closeresource
Description:
I observed a crash when performing static analysis with PMD. When analyzing a directory containing SubClass.java and BaseClass.java, PMD crashes. Input classes are listed below:
Code Sample demonstrating the issue:
BaseClass.java
import java.io.InputStream; public abstract class BaseClass { final InputStream _config; protected BaseClass(InputStream _config) { this._config = _config; } }
SubClass.java
import java.io.*; public final class SubClass extends BaseClass { protected SubClass(InputStream in) { super(in); } public void doBootstrap() throws IOException { Reader r = new InputStreamReader(_config); } }
Expected outcome: I expect PMD to run successfully when analyzing a directory containing SubClass.java and BaseClass.java, similar to when they are written in the same file.
Exception Stacktrace:
org.apache.commons.lang3.exception.ContextedRuntimeException: java.lang.NullPointerException Exception Context: [1:Rule applied on node=!debug only! [CompilationUnit:1:1]import java.io.*; public final class SubClass extends BaseClass { protected SubClass(InputStream in) { super(in); } pu(truncated)] --------------------------------- at net.sourceforge.pmd.util.AssertionUtil.contexted(AssertionUtil.java:232) at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex(RuleApplicator.java:77) at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.apply(RuleApplicator.java:55) at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:158) at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource(PmdRunnable.java:140) at net.sourceforge.pmd.lang.impl.PmdRunnable.run(PmdRunnable.java:80) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.NullPointerException at net.sourceforge.pmd.lang.java.rule.errorprone.CloseResourceRule.isWrappingResourceSpecifiedInTry(CloseResourceRule.java:289) at net.sourceforge.pmd.lang.java.rule.errorprone.CloseResourceRule.checkForResources(CloseResourceRule.java:174) at net.sourceforge.pmd.lang.java.rule.errorprone.CloseResourceRule.visit(CloseResourceRule.java:162) at net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration.acceptVisitor(ASTMethodDeclaration.java:58) at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.acceptVisitor(AbstractJavaNode.java:38) at net.sourceforge.pmd.lang.java.ast.JavaParserVisitor.visitNode(JavaParserVisitor.java:22) at net.sourceforge.pmd.lang.java.ast.JavaVisitor.visitJavaNode(JavaVisitor.java:6) at net.sourceforge.pmd.lang.java.ast.JavaVisitor.visit(JavaVisitor.java:25) at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBody.acceptVisitor(ASTClassOrInterfaceBody.java:26) at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.acceptVisitor(AbstractJavaNode.java:38) at net.sourceforge.pmd.lang.java.ast.JavaParserVisitor.visitNode(JavaParserVisitor.java:22) at net.sourceforge.pmd.lang.java.ast.JavaVisitor.visitJavaNode(JavaVisitor.java:6) at net.sourceforge.pmd.lang.java.ast.JavaVisitor.visit(JavaVisitor.java:11) at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration.acceptVisitor(ASTClassOrInterfaceDeclaration.java:38) at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.acceptVisitor(AbstractJavaNode.java:38) at net.sourceforge.pmd.lang.java.ast.JavaParserVisitor.visitNode(JavaParserVisitor.java:22) at net.sourceforge.pmd.lang.java.ast.JavaVisitor.visitJavaNode(JavaVisitor.java:6) at net.sourceforge.pmd.lang.java.ast.JavaVisitor.visit(JavaVisitor.java:7) at net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit.acceptVisitor(ASTCompilationUnit.java:83) at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.acceptVisitor(AbstractJavaNode.java:38) at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply(AbstractJavaRule.java:24) at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex(RuleApplicator.java:75) ... 9 more
Running PMD through: CLI
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