Affects PMD Version: 6.26.0
Description:
When an enum switch is exhaustive, there is no reason it should have the default
case.
I added this custom rule to prevent that occurence:
<rule name="ExhaustiveSwitchStmtsShouldHaveNotHaveDefault" language="java" message="Exhaustive switch statements should not have default as it is unreachable" typeResolution="true" class="net.sourceforge.pmd.lang.rule.XPathRule"> <description> The default case on exhaustive enum switch is unnecessary. The rule bestpractices.xml/SwitchStmtsShouldHaveDefault guarantees all enum switches are always exhaustive. </description> <priority>3</priority> <properties> <property name="version" value="2.0"/> <property name="xpath"> <value> <![CDATA[//SwitchStatement[@ExhaustiveEnumSwitch = true() and @DefaultCase = true()]]]> </value> </property> </properties> </rule>
Exception Stacktrace:
[WARNING] Exception applying rule ExhaustiveSwitchStmtsShouldHaveNotHaveDefault on file <redacted-file-name>.java, continuing with next rule
java.lang.RuntimeException:
//SwitchStatement[@ExhaustiveEnumSwitch = true() and @DefaultCase = true()]
had problem: The string "" cannot be cast to a boolean
at net.sourceforge.pmd.lang.rule.xpath.SaxonXPathRuleQuery.evaluate (SaxonXPathRuleQuery.java:145)
at net.sourceforge.pmd.lang.rule.XPathRule.evaluate (XPathRule.java:176)
at net.sourceforge.pmd.lang.rule.XPathRule.apply (XPathRule.java:158)
at net.sourceforge.pmd.lang.internal.DefaultRulechainVisitor.visit (DefaultRulechainVisitor.java:26)
at net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor.visitAll (AbstractRuleChainVisitor.java:99)
at net.sourceforge.pmd.RuleChain.apply (RuleChain.java:72)
at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:145)
at net.sourceforge.pmd.SourceCodeProcessor.processSource (SourceCodeProcessor.java:194)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache (SourceCodeProcessor.java:107)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode (SourceCodeProcessor.java:89)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode (SourceCodeProcessor.java:51)
at net.sourceforge.pmd.processor.PmdRunnable.call (PmdRunnable.java:78)
at net.sourceforge.pmd.processor.PmdRunnable.call (PmdRunnable.java:24)
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:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
at java.lang.Thread.run (Thread.java:834)
Caused by: net.sf.saxon.type.ValidationException: The string "" cannot be cast to a boolean
at net.sf.saxon.type.ValidationFailure.makeException (ValidationFailure.java:233)
at net.sf.saxon.type.ValidationFailure.asAtomic (ValidationFailure.java:254)
at net.sf.saxon.expr.GeneralComparison.compare (GeneralComparison.java:607)
at net.sf.saxon.expr.SingletonComparison.effectiveBooleanValue (SingletonComparison.java:102)
at net.sf.saxon.expr.QuantifiedExpression.effectiveBooleanValue (QuantifiedExpression.java:226)
at net.sf.saxon.expr.BooleanExpression.effectiveBooleanValue (BooleanExpression.java:182)
at net.sf.saxon.expr.FilterIterator$NonNumeric.matches (FilterIterator.java:182)
at net.sf.saxon.expr.FilterIterator.getNextMatchingItem (FilterIterator.java:65)
at net.sf.saxon.expr.FilterIterator.next (FilterIterator.java:44)
at net.sourceforge.pmd.lang.rule.xpath.SaxonXPathRuleQuery.evaluate (SaxonXPathRuleQuery.java:127)
at net.sourceforge.pmd.lang.rule.XPathRule.evaluate (XPathRule.java:176)
at net.sourceforge.pmd.lang.rule.XPathRule.apply (XPathRule.java:158)
at net.sourceforge.pmd.lang.internal.DefaultRulechainVisitor.visit (DefaultRulechainVisitor.java:26)
at net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor.visitAll (AbstractRuleChainVisitor.java:99)
at net.sourceforge.pmd.RuleChain.apply (RuleChain.java:72)
at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:145)
at net.sourceforge.pmd.SourceCodeProcessor.processSource (SourceCodeProcessor.java:194)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache (SourceCodeProcessor.java:107)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode (SourceCodeProcessor.java:89)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode (SourceCodeProcessor.java:51)
at net.sourceforge.pmd.processor.PmdRunnable.call (PmdRunnable.java:78)
at net.sourceforge.pmd.processor.PmdRunnable.call (PmdRunnable.java:24)
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:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
at java.lang.Thread.run (Thread.java:834)
java.lang.reflect.InvocationTargetException
at jdk.internal.reflect.GeneratedMethodAccessor44.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 net.sourceforge.pmd.lang.ast.xpath.Attribute.getValue(Attribute.java:98)
at net.sourceforge.pmd.lang.ast.xpath.saxon.AttributeNode.atomize(AttributeNode.java:60)
at net.sf.saxon.om.SingleNodeIterator.atomize(SingleNodeIterator.java:129)
at net.sf.saxon.expr.AxisAtomizingIterator.next(AxisAtomizingIterator.java:43)
at net.sf.saxon.expr.QuantifiedExpression.effectiveBooleanValue(QuantifiedExpression.java:221)
at net.sf.saxon.expr.BooleanExpression.effectiveBooleanValue(BooleanExpression.java:182)
at net.sf.saxon.expr.FilterIterator$NonNumeric.matches(FilterIterator.java:182)
at net.sf.saxon.expr.FilterIterator.getNextMatchingItem(FilterIterator.java:65)
at net.sf.saxon.expr.FilterIterator.next(FilterIterator.java:44)
at net.sourceforge.pmd.lang.rule.xpath.SaxonXPathRuleQuery.evaluate(SaxonXPathRuleQuery.java:127)
at net.sourceforge.pmd.lang.rule.XPathRule.evaluate(XPathRule.java:176)
at net.sourceforge.pmd.lang.rule.XPathRule.apply(XPathRule.java:158)
at net.sourceforge.pmd.lang.internal.DefaultRulechainVisitor.visit(DefaultRulechainVisitor.java:26)
at net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor.visitAll(AbstractRuleChainVisitor.java:99)
at net.sourceforge.pmd.RuleChain.apply(RuleChain.java:72)
at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:145)
at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:194)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:107)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:89)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:51)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:78)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:24)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
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.ast.ASTSwitchStatement.isExhaustiveEnumSwitch(ASTSwitchStatement.java:89)
... 31 more
java.lang.reflect.InvocationTargetException
at jdk.internal.reflect.GeneratedMethodAccessor44.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 net.sourceforge.pmd.lang.ast.xpath.Attribute.getValue(Attribute.java:98)
at net.sourceforge.pmd.lang.ast.xpath.saxon.AttributeNode.atomize(AttributeNode.java:64)
at net.sf.saxon.om.SingleNodeIterator.atomize(SingleNodeIterator.java:129)
at net.sf.saxon.expr.AxisAtomizingIterator.next(AxisAtomizingIterator.java:43)
at net.sf.saxon.expr.QuantifiedExpression.effectiveBooleanValue(QuantifiedExpression.java:221)
at net.sf.saxon.expr.BooleanExpression.effectiveBooleanValue(BooleanExpression.java:182)
at net.sf.saxon.expr.FilterIterator$NonNumeric.matches(FilterIterator.java:182)
at net.sf.saxon.expr.FilterIterator.getNextMatchingItem(FilterIterator.java:65)
at net.sf.saxon.expr.FilterIterator.next(FilterIterator.java:44)
at net.sourceforge.pmd.lang.rule.xpath.SaxonXPathRuleQuery.evaluate(SaxonXPathRuleQuery.java:127)
at net.sourceforge.pmd.lang.rule.XPathRule.evaluate(XPathRule.java:176)
at net.sourceforge.pmd.lang.rule.XPathRule.apply(XPathRule.java:158)
at net.sourceforge.pmd.lang.internal.DefaultRulechainVisitor.visit(DefaultRulechainVisitor.java:26)
at net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor.visitAll(AbstractRuleChainVisitor.java:99)
at net.sourceforge.pmd.RuleChain.apply(RuleChain.java:72)
at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:145)
at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:194)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:107)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:89)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:51)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:78)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:24)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
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.ast.ASTSwitchStatement.isExhaustiveEnumSwitch(ASTSwitchStatement.java:89)
... 31 more
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