Skip to content

[core] Select XPath version in violationSuppressXPath #1676

@Vampire

Description

@Vampire

As the rule designer has a toggle for XPath 1.0 vs. 2.0, I assume XPath 2.0 should be supported?
Because if I use some @BeginColumn = (17, 60) in a violationSuppressXPath value, I get a syntax error.

java.lang.RuntimeException: XPath expression
                    .[(ancestor::ClassOrInterfaceDeclaration/@Image = 'DiscordWebhooksDiscordManager')
                        and (@BeginLine = 98)
                        and (@BeginColumn = (17, 60))]"
                 failed: Expected: )
        at net.sourceforge.pmd.lang.ast.AbstractNode.hasDescendantMatchingXPath(AbstractNode.java:432)
        at net.sourceforge.pmd.lang.rule.ParametricRuleViolation.setSuppression(ParametricRuleViolation.java:71)
        at net.sourceforge.pmd.lang.rule.ParametricRuleViolation.<init>(ParametricRuleViolation.java:54)
        at net.sourceforge.pmd.lang.java.rule.JavaRuleViolation.<init>(JavaRuleViolation.java:50)
        at net.sourceforge.pmd.lang.java.rule.JavaRuleViolationFactory.createRuleViolation(JavaRuleViolationFactory.java:24)
        at net.sourceforge.pmd.lang.rule.AbstractRuleViolationFactory.addViolation(AbstractRuleViolationFactory.java:37)
        at net.sourceforge.pmd.lang.rule.AbstractRule.addViolation(AbstractRule.java:359)
        at net.sourceforge.pmd.lang.rule.XPathRule.evaluate(XPathRule.java:116)
        at net.sourceforge.pmd.lang.java.rule.JavaRuleChainVisitor.visit(JavaRuleChainVisitor.java:42)
        at net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor.visitAll(AbstractRuleChainVisitor.java:96)
        at net.sourceforge.pmd.RuleChain.apply(RuleChain.java:67)
        at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:140)
        at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:184)
        at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:96)
        at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:51)
        at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:78)
        at net.sourceforge.pmd.processor.MonoThreadProcessor.runAnalysis(MonoThreadProcessor.java:29)
        at net.sourceforge.pmd.processor.AbstractPMDProcessor.processFiles(AbstractPMDProcessor.java:108)
        at net.sourceforge.pmd.PMD.processFiles(PMD.java:329)
        at net.sourceforge.pmd.ant.internal.PMDTaskImpl.doTask(PMDTaskImpl.java:190)
        at net.sourceforge.pmd.ant.internal.PMDTaskImpl.execute(PMDTaskImpl.java:275)
        at net.sourceforge.pmd.ant.PMDTask.execute(PMDTask.java:50)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at groovy.util.AntBuilder.performTask(AntBuilder.java:338)
        at groovy.util.AntBuilder.nodeCompleted(AntBuilder.java:283)
        at org.gradle.api.internal.project.ant.BasicAntBuilder.nodeCompleted(BasicAntBuilder.java:78)
        at jdk.internal.reflect.GeneratedMethodAccessor1888.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:479)
        at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:191)
        at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:160)
        at org.gradle.api.internal.project.antbuilder.AntBuilderDelegate.nodeCompleted(AntBuilderDelegate.java:118)
        at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:154)
        at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:67)
        at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:47)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:136)
        at org.gradle.api.plugins.quality.internal.PmdInvoker$_invoke_closure2.doCall(PmdInvoker.groovy:62)
        at jdk.internal.reflect.GeneratedMethodAccessor283.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
        at groovy.lang.Closure.call(Closure.java:418)
        at groovy.lang.Closure.call(Closure.java:434)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:71)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:53)
        at org.gradle.api.internal.project.antbuilder.DefaultIsolatedAntBuilder$2.execute(DefaultIsolatedAntBuilder.java:152)
        at org.gradle.api.internal.project.antbuilder.DefaultIsolatedAntBuilder$2.execute(DefaultIsolatedAntBuilder.java:134)
        at org.gradle.api.internal.project.antbuilder.ClassPathToClassLoaderCache.withCachedClassLoader(ClassPathToClassLoaderCache.java:134)
        at org.gradle.api.internal.project.antbuilder.DefaultIsolatedAntBuilder.execute(DefaultIsolatedAntBuilder.java:128)
        at org.gradle.api.internal.project.IsolatedAntBuilder$execute$0.call(Unknown Source)
        at org.gradle.api.plugins.quality.internal.PmdInvoker.invoke(PmdInvoker.groovy:60)
        at org.gradle.api.plugins.quality.Pmd.run(Pmd.java:93)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:801)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:768)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
        at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.jaxen.XPathSyntaxException: Expected: )
        at org.jaxen.BaseXPath.<init>(BaseXPath.java:121)
        at org.jaxen.BaseXPath.<init>(BaseXPath.java:142)
        at net.sourceforge.pmd.lang.ast.AbstractNode.findChildNodesWithXPath(AbstractNode.java:423)
        at net.sourceforge.pmd.lang.ast.AbstractNode.hasDescendantMatchingXPath(AbstractNode.java:430)
        ... 114 more
Caused by: class org.jaxen.saxpath.XPathSyntaxException:
                    .[(ancestor::ClassOrInterfaceDeclaration/@Image = 'DiscordWebhooksDiscordManager')
                        and (@BeginLine = 98)
                        and (@BeginColumn = (17, 60))]"
                : 197: Expected: )
        at org.jaxen.saxpath.base.XPathReader.createSyntaxException(XPathReader.java:1085)
        at org.jaxen.saxpath.base.XPathReader.match(XPathReader.java:1038)
        at org.jaxen.saxpath.base.XPathReader.filterExpr(XPathReader.java:274)
        at org.jaxen.saxpath.base.XPathReader.pathExpr(XPathReader.java:142)
        at org.jaxen.saxpath.base.XPathReader.unionExpr(XPathReader.java:1007)
        at org.jaxen.saxpath.base.XPathReader.unaryExpr(XPathReader.java:995)
        at org.jaxen.saxpath.base.XPathReader.multiplicativeExpr(XPathReader.java:943)
        at org.jaxen.saxpath.base.XPathReader.additiveExpr(XPathReader.java:913)
        at org.jaxen.saxpath.base.XPathReader.relationalExpr(XPathReader.java:860)
        at org.jaxen.saxpath.base.XPathReader.equalityExpr(XPathReader.java:840)
        at org.jaxen.saxpath.base.XPathReader.andExpr(XPathReader.java:809)
        at org.jaxen.saxpath.base.XPathReader.orExpr(XPathReader.java:787)
        at org.jaxen.saxpath.base.XPathReader.expr(XPathReader.java:780)
        at org.jaxen.saxpath.base.XPathReader.filterExpr(XPathReader.java:273)
        at org.jaxen.saxpath.base.XPathReader.pathExpr(XPathReader.java:142)
        at org.jaxen.saxpath.base.XPathReader.unionExpr(XPathReader.java:1007)
        at org.jaxen.saxpath.base.XPathReader.unaryExpr(XPathReader.java:995)
        at org.jaxen.saxpath.base.XPathReader.multiplicativeExpr(XPathReader.java:943)
        at org.jaxen.saxpath.base.XPathReader.additiveExpr(XPathReader.java:913)
        at org.jaxen.saxpath.base.XPathReader.relationalExpr(XPathReader.java:860)
        at org.jaxen.saxpath.base.XPathReader.equalityExpr(XPathReader.java:829)
        at org.jaxen.saxpath.base.XPathReader.andExpr(XPathReader.java:809)
        at org.jaxen.saxpath.base.XPathReader.andExpr(XPathReader.java:819)
        at org.jaxen.saxpath.base.XPathReader.andExpr(XPathReader.java:819)
        at org.jaxen.saxpath.base.XPathReader.orExpr(XPathReader.java:787)
        at org.jaxen.saxpath.base.XPathReader.expr(XPathReader.java:780)
        at org.jaxen.saxpath.base.XPathReader.predicateExpr(XPathReader.java:775)
        at org.jaxen.saxpath.base.XPathReader.predicate(XPathReader.java:766)
        at org.jaxen.saxpath.base.XPathReader.predicates(XPathReader.java:751)
        at org.jaxen.saxpath.base.XPathReader.abbrStep(XPathReader.java:730)
        at org.jaxen.saxpath.base.XPathReader.step(XPathReader.java:514)
        at org.jaxen.saxpath.base.XPathReader.steps(XPathReader.java:442)
        at org.jaxen.saxpath.base.XPathReader.relativeLocationPath(XPathReader.java:426)
        at org.jaxen.saxpath.base.XPathReader.locationPath(XPathReader.java:340)
        at org.jaxen.saxpath.base.XPathReader.pathExpr(XPathReader.java:179)
        at org.jaxen.saxpath.base.XPathReader.unionExpr(XPathReader.java:1007)
        at org.jaxen.saxpath.base.XPathReader.unaryExpr(XPathReader.java:995)
        at org.jaxen.saxpath.base.XPathReader.multiplicativeExpr(XPathReader.java:943)
        at org.jaxen.saxpath.base.XPathReader.additiveExpr(XPathReader.java:913)
        at org.jaxen.saxpath.base.XPathReader.relationalExpr(XPathReader.java:860)
        at org.jaxen.saxpath.base.XPathReader.equalityExpr(XPathReader.java:829)
        at org.jaxen.saxpath.base.XPathReader.andExpr(XPathReader.java:809)
        at org.jaxen.saxpath.base.XPathReader.orExpr(XPathReader.java:787)
        at org.jaxen.saxpath.base.XPathReader.expr(XPathReader.java:780)
        at org.jaxen.saxpath.base.XPathReader.parse(XPathReader.java:100)
        at org.jaxen.BaseXPath.<init>(BaseXPath.java:116)
        ... 117 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    an:enhancementAn improvement on existing features / rulesin:ruleset-xmlAbout the ruleset schema/parserin:xpathRelating to xpath support at large, eg Jaxen / Saxon, custom functions, attribute resolution

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions