Affects PMD Version: 6.32.0
Description:
It looks like PMD is not accepting the pattern matching variables in the source code.
Exception Stacktrace:
java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because the return value of "net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId.getUsages()" is null
at net.sourceforge.pmd.lang.java.rule.errorprone.CheckSkipResultRule.visit (CheckSkipResultRule.java:27)
at net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId.jjtAccept (ASTVariableDeclaratorId.java:58)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:842)
at net.sourceforge.pmd.lang.java.ast.ASTTypePattern.jjtAccept (ASTTypePattern.java:36)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:552)
at net.sourceforge.pmd.lang.java.ast.ASTInstanceOfExpression.jjtAccept (ASTInstanceOfExpression.java:41)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:527)
at net.sourceforge.pmd.lang.java.ast.ASTConditionalAndExpression.jjtAccept (ASTConditionalAndExpression.java:41)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:507)
at net.sourceforge.pmd.lang.java.ast.ASTExpression.jjtAccept (ASTExpression.java:37)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:702)
at net.sourceforge.pmd.lang.java.ast.ASTIfStatement.jjtAccept (ASTIfStatement.java:93)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:657)
at net.sourceforge.pmd.lang.java.ast.ASTStatement.jjtAccept (ASTStatement.java:25)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:672)
at net.sourceforge.pmd.lang.java.ast.ASTBlockStatement.jjtAccept (ASTBlockStatement.java:25)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:667)
at net.sourceforge.pmd.lang.java.ast.ASTBlock.jjtAccept (ASTBlock.java:27)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:447)
at net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration.jjtAccept (ASTMethodDeclaration.java:37)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:267)
at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDeclaration.jjtAccept (ASTClassOrInterfaceBodyDeclaration.java:44)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:262)
at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBody.jjtAccept (ASTClassOrInterfaceBody.java:35)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:232)
at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration.jjtAccept (ASTClassOrInterfaceDeclaration.java:56)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:417)
at net.sourceforge.pmd.lang.java.ast.ASTTypeDeclaration.jjtAccept (ASTTypeDeclaration.java:39)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:220)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:392)
at net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit.jjtAccept (ASTCompilationUnit.java:44)
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.rule.AbstractDelegateRule.apply (AbstractDelegateRule.java:336)
at net.sourceforge.pmd.RuleSet.apply (RuleSet.java:659)
at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:163)
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.PmdRunnable.call (PmdRunnable.java:29)
at java.util.concurrent.FutureTask.run (FutureTask.java:264)
at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:515)
at java.util.concurrent.FutureTask.run (FutureTask.java:264)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1135)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
at java.lang.Thread.run (Thread.java:831)
Code Sample demonstrating the issue:
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException { Iterator<Filter> iterator = filters.descendingIterator(); NanoFilterChain chain = new NanoFilterChain(servlet); while (iterator.hasNext()) { Filter filter = iterator.next(); NanoFilterChain previousChain = chain; chain = new NanoFilterChain(filter, previousChain); } if (servletRequest.getServletContext() == null && servletRequest instanceof NanoRequest nanoRequest) { nanoRequest.setWebApplication(webApplication); } if (servletResponse instanceof NanoResponse nanoResponse) { nanoResponse.setWebApplication(webApplication); } chain.doFilter(servletRequest, servletResponse); servletResponse.flushBuffer(); }
Steps to reproduce:
Please provide detailed steps for how we can reproduce the bug.
Running PMD through: Maven
openjdk version "16" 2021-03-16
OpenJDK Runtime Environment (build 16+36-2231)
OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)
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