A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/pmd/pmd/issues/2738 below:

[java] Custom rule with @ExhaustiveEnumSwitch throws NPE · Issue #2738 · pmd/pmd · GitHub

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