Skip to content

PMD issue with Java 21 switch #1450

@RoRoche

Description

@RoRoche

Hi team,

Here is an error I'm facing on my project:

[INFO] PMD: src/test/java/fr/guddy/roombookings/infra/matchers/DeepMatches.java[unknown]: PMDException: Error while parsing /Users/romain.rochegude/workspace/github/RoomBookingsBackEnd/src/test/java/fr/guddy/roombookings/infra/matchers/DeepMatches.java: net.sourceforge.pmd.PMDException: Error while parsing /Users/romain.rochegude/workspace/github/RoomBookingsBackEnd/src/test/java/fr/guddy/roombookings/infra/matchers/DeepMatches.java
	at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:124)
	at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:100)
	at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:62)
	at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:89)
	at net.sourceforge.pmd.processor.MonoThreadProcessor.runAnalysis(MonoThreadProcessor.java:32)
	at net.sourceforge.pmd.processor.AbstractPMDProcessor.processFiles(AbstractPMDProcessor.java:143)
	at net.sourceforge.pmd.processor.AbstractPMDProcessor.processFiles(AbstractPMDProcessor.java:123)
	at net.sourceforge.pmd.PMD.processFiles(PMD.java:322)
	at com.qulice.pmd.SourceValidator.validateOne(SourceValidator.java:112)
	at com.qulice.pmd.SourceValidator.validate(SourceValidator.java:87)
	at com.qulice.pmd.PmdValidator.validate(PmdValidator.java:41)
	at com.qulice.maven.CheckMojo$ValidatorCallable.call(CheckMojo.java:211)
	at com.qulice.maven.CheckMojo$ValidatorCallable.call(CheckMojo.java:179)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: net.sourceforge.pmd.lang.java.ast.ParseException: Line 36, Column 28: Null case labels in switch are only supported with JDK 19 Preview or JDK 20 Preview.
	at net.sourceforge.pmd.lang.java.ast.JavaParser.throwParseException(JavaParser.java:30)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.checkForNullCaseLabel(JavaParser.java:283)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.CaseLabelElement(JavaParser.java:6495)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.SwitchLabel(JavaParser.java:6436)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.SwitchBlock(JavaParser.java:6232)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.SwitchExpression(JavaParser.java:4638)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.UnaryExpressionNotPlusMinus(JavaParser.java:4396)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.UnaryExpression(JavaParser.java:4269)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.MultiplicativeExpression(JavaParser.java:4184)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.AdditiveExpression(JavaParser.java:4131)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.ShiftExpression(JavaParser.java:4074)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.RelationalExpression(JavaParser.java:4013)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.InstanceOfExpression(JavaParser.java:3941)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.EqualityExpression(JavaParser.java:3686)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.AndExpression(JavaParser.java:3646)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.ExclusiveOrExpression(JavaParser.java:3606)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.InclusiveOrExpression(JavaParser.java:3566)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.ConditionalAndExpression(JavaParser.java:3526)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.ConditionalOrExpression(JavaParser.java:3486)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.ConditionalExpression(JavaParser.java:3448)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.Expression(JavaParser.java:3307)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.ReturnStatement(JavaParser.java:6990)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.Statement(JavaParser.java:5799)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.BlockStatement(JavaParser.java:5971)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.Block(JavaParser.java:5888)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.MethodDeclaration(JavaParser.java:2201)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceBodyDeclaration(JavaParser.java:1855)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceBody(JavaParser.java:1808)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceDeclaration(JavaParser.java:936)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.TypeDeclaration(JavaParser.java:838)
	at net.sourceforge.pmd.lang.java.ast.JavaParser.CompilationUnit(JavaParser.java:558)
	at net.sourceforge.pmd.lang.java.AbstractJavaParser.parse(AbstractJavaParser.java:62)
	at net.sourceforge.pmd.lang.AbstractParser.doParse(AbstractParser.java:45)
	at net.sourceforge.pmd.SourceCodeProcessor.parse(SourceCodeProcessor.java:136)
	at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:200)
	at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:118)
	... 16 more
 (ProcessingError)

Here is the project: https://github.com/RoRoche/RoomBookingsBackEnd

Here is the class with the switch: https://github.com/RoRoche/RoomBookingsBackEnd/blob/main/src/test/java/fr/guddy/roombookings/infra/matchers/DeepMatches.java

Do you think an upgrade of PMD is necessary/possible?

Thank you.
Fyi @yegor256, @fabriciofx

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions