Affects PMD Version: 6.8.0
Rule: SignatureDeclareThrowsException (maybe others, too)
Description:
An annotation used on a base class in the extends
clause causes PMD to fail with a ClassCastException
.
Code Sample demonstrating the issue:
package com.example;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
public final class Namespace {
@Target(ElementType.TYPE_USE)
public @interface Weird {
}
public class WeirdException extends @Weird Exception {
}
}
Output:
[INFO] --- maven-pmd-plugin:3.10.0:pmd (pmd) @ re-managers-impl ---
[INFO] Analysis cache invalidated, rulesets changed.
[INFO] Analysis cache invalidated, execution classpath changed.
[WARNING] Exception applying rule SignatureDeclareThrowsException on file .../Namespace.java, continuing with next rule
java.lang.ClassCastException: class net.sourceforge.pmd.lang.java.ast.ASTAnnotation cannot be cast to class net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType (net.sourceforge.pmd.lang.java.ast.ASTAnnotation and net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType are in unnamed module of loader org.codehaus.plexus.classworlds.realm.ClassRealm @c7e16b1)
at net.sourceforge.pmd.lang.java.rule.design.SignatureDeclareThrowsExceptionRule.visit (SignatureDeclareThrowsExceptionRule.java:80)
at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration.jjtAccept (ASTClassOrInterfaceDeclaration.java:55)
at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept (AbstractJavaNode.java:60)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:84)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:130)
at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDeclaration.jjtAccept (ASTClassOrInterfaceBodyDeclaration.java:43)
at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept (AbstractJavaNode.java:60)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:84)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:125)
at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBody.jjtAccept (ASTClassOrInterfaceBody.java:32)
at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept (AbstractJavaNode.java:60)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:84)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:95)
at net.sourceforge.pmd.lang.java.rule.design.SignatureDeclareThrowsExceptionRule.visit (SignatureDeclareThrowsExceptionRule.java:87)
at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration.jjtAccept (ASTClassOrInterfaceDeclaration.java:55)
at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept (AbstractJavaNode.java:60)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:84)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:280)
at net.sourceforge.pmd.lang.java.ast.ASTTypeDeclaration.jjtAccept (ASTTypeDeclaration.java:37)
at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept (AbstractJavaNode.java:60)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:84)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit (AbstractJavaRule.java:255)
at net.sourceforge.pmd.lang.java.rule.design.SignatureDeclareThrowsExceptionRule.visit (SignatureDeclareThrowsExceptionRule.java:54)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visitAll (AbstractJavaRule.java:39)
at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply (AbstractJavaRule.java:27)
at net.sourceforge.pmd.lang.rule.AbstractDelegateRule.apply (AbstractDelegateRule.java:336)
at net.sourceforge.pmd.RuleSet.apply (RuleSet.java:499)
at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:143)
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.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)
[INFO] Analysis cache updated
[ERROR] PMD processing errors:
[ERROR] Namespace.java: class net.sourceforge.pmd.lang.java.ast.ASTAnnotation cannot be cast to class net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType (net.sourceforge.pmd.lang.java.ast.ASTAnnotation and net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType are in unnamed module of loader org.codehaus.plexus.classworlds.realm.ClassRealm @c7e16b1)
Running PMD through: Maven
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