I'm a developer of the Salesforce Code Analyzer and we use PMD as one of our engines of our product.
We have a gradle build file that sets as a dependency all of the pmd-* modules that we care so that it'll download the pmd jar files for us. We upgrade our version each month, but this month when specifying the dependency on
net.sourceforge.pmd:pmd-apex:7.9.0
we see that it is automatically pulling in apex-parser-4.3.1.jar which differs from what the release archive for PMD has - apex-parser-4.3.0.jar. And it seems to be causing an error when attempting to run PMD.
When we run a test like:
java -cp "/Users/stephen.carter/whatWeGetFromGradle/dist/pmd7/lib/*" net.sourceforge.pmd.cli.PmdCli check --file-list /tmp/file-list.txt --format xml -r /tmp/pmd-results.xml --rulesets category/apex/errorprone.xml
I'm getting the following error:
Exception in thread "main" java.lang.NoSuchMethodError: 'java.util.List io.github.apexdevtools.apexparser.ApexParser$WhenValueContext.id()'
at com.google.summit.translation.Translate.visitWhenControl(Translate.kt:879)
at com.google.summit.translation.Translate.visitSwitchStatement(Translate.kt:1750)
at com.google.summit.translation.Translate.visitSwitchStatement(Translate.kt:106)
at io.github.apexdevtools.apexparser.ApexParser$SwitchStatementContext.accept(ApexParser.java:4346)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
at com.google.summit.translation.Translate.visitStatement(Translate.kt:1733)
at com.google.summit.translation.Translate.visitBlock(Translate.kt:786)
at com.google.summit.translation.Translate.visitBlock(Translate.kt:106)
at io.github.apexdevtools.apexparser.ApexParser$BlockContext.accept(ApexParser.java:3848)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
at com.google.summit.translation.Translate.visitStatement(Translate.kt:1733)
at com.google.summit.translation.Translate.visitIfStatement(Translate.kt:1741)
at com.google.summit.translation.Translate.visitIfStatement(Translate.kt:106)
at io.github.apexdevtools.apexparser.ApexParser$IfStatementContext.accept(ApexParser.java:4276)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
at com.google.summit.translation.Translate.visitStatement(Translate.kt:1733)
at com.google.summit.translation.Translate.visitBlock(Translate.kt:786)
at com.google.summit.translation.Translate.visitMethodDeclaration(Translate.kt:480)
at com.google.summit.translation.Translate.visitMemberDeclaration(Translate.kt:440)
at com.google.summit.translation.Translate.visitClassBodyDeclaration(Translate.kt:399)
at com.google.summit.translation.Translate.visitClassBody(Translate.kt:391)
at com.google.summit.translation.Translate.visitClassDeclaration(Translate.kt:219)
at com.google.summit.translation.Translate.visitTypeDeclaration(Translate.kt:259)
at com.google.summit.translation.Translate.visitCompilationUnit(Translate.kt:158)
at com.google.summit.translation.Translate.translate(Translate.kt:121)
at com.google.summit.SummitAST.parseAndTranslate$_maven_lib(SummitAST.kt:153)
at com.google.summit.SummitAST.parseAndTranslate(SummitAST.kt:110)
at net.sourceforge.pmd.lang.apex.ast.ApexParser.parse(ApexParser.java:34)
at net.sourceforge.pmd.lang.apex.ast.ApexParser.parse(ApexParser.java:18)
at net.sourceforge.pmd.lang.impl.PmdRunnable.parse(PmdRunnable.java:112)
at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource(PmdRunnable.java:132)
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:829)
But if I swap out the apex-parser-4.3.1.jar file with apex-parser-4.3.0.jar file then everything works fine.
Is this an issue with https://github.com/apex-dev-tools/apex-parser missing a dependency or something?
Either way, users who depend on the pmd modules directly in their gradle or maven builds will have this issue. It doesn't appear with users who download the release archive and unzip because your pmd-dist-7.9.0-bin.zip file contains apex-parser-4.3.0 instead of apex-parser-4.3.1.
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