Repro:
Run PMD 5.1.0 against the following java source
public enum Testing
{
Test;
public void test(ITesting tester) { tester.test(); } public static interface ITesting { void test(); }
}
Expected result:
PMD UnusedModifier rule should complain about the redundant static modifier. Note the source is compiled by Java compiler without problems.
Actual result:
The following exception occurred
[pmd] Exception applying rule UnusedModifier, continuing with next rule
[pmd] java.lang.NullPointerException
[pmd] at net.sourceforge.pmd.lang.java.rule.unusedcode.UnusedModifierR
ule.visit(UnusedModifierRule.java:22)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclarat
ion.jjtAccept(ASTClassOrInterfaceDeclaration.java:26)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:106)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDecl
aration.jjtAccept(ASTClassOrInterfaceBodyDeclaration.java:41)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:110)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTEnumBody.jjtAccept(ASTEn
umBody.java:22)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:202)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTEnumDeclaration.jjtAccep
t(ASTEnumDeclaration.java:18)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:218)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTTypeDeclaration.jjtAccep
t(ASTTypeDeclaration.java:36)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:198)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visitAll(
AbstractJavaRule.java:30)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply(Abs
tractJavaRule.java:24)
[pmd] at net.sourceforge.pmd.lang.rule.AbstractDelegateRule.apply(Abst
ractDelegateRule.java:215)
[pmd] at net.sourceforge.pmd.RuleSet.apply(RuleSet.java:280)
[pmd] at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:125)
[pmd] at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceC
odeProcessor.java:150)
[pmd] at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(Sou
rceCodeProcessor.java:80)
[pmd] at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(Sou
rceCodeProcessor.java:47)
[pmd] at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.ja
va:78)
[pmd] at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.ja
va:25)
[pmd] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java
:334)
[pmd] at java.util.concurrent.FutureTask.run(FutureTask.java:166)
[pmd] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolE
xecutor.java:1110)
[pmd] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPool
Executor.java:603)
[pmd] at java.lang.Thread.run(Thread.java:722)
[pmd] Apr 10, 2014 1:20:26 PM net.sourceforge.pmd.RuleSet apply
[pmd] WARNING: Exception applying rule UnusedModifier, continuing with nex
t rule
[pmd] java.lang.NullPointerException
[pmd] at net.sourceforge.pmd.lang.java.rule.unusedcode.UnusedModifierR
ule.visit(UnusedModifierRule.java:22)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclarat
ion.jjtAccept(ASTClassOrInterfaceDeclaration.java:26)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:106)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDecl
aration.jjtAccept(ASTClassOrInterfaceBodyDeclaration.java:41)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:110)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTEnumBody.jjtAccept(ASTEn
umBody.java:22)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:202)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTEnumDeclaration.jjtAccep
t(ASTEnumDeclaration.java:18)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:218)
[pmd] at net.sourceforge.pmd.lang.java.ast.ASTTypeDeclaration.jjtAccep
t(ASTTypeDeclaration.java:36)
[pmd] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAc
cept(AbstractJavaNode.java:55)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:69)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(Abs
tractJavaRule.java:198)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visitAll(
AbstractJavaRule.java:30)
[pmd] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply(Abs
tractJavaRule.java:24)
[pmd] at net.sourceforge.pmd.lang.rule.AbstractDelegateRule.apply(Abst
ractDelegateRule.java:215)
[pmd] at net.sourceforge.pmd.RuleSet.apply(RuleSet.java:280)
[pmd] at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:125)
[pmd] at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceC
odeProcessor.java:150)
[pmd] at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(Sou
rceCodeProcessor.java:80)
[pmd] at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(Sou
rceCodeProcessor.java:47)
[pmd] at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.ja
va:78)
[pmd] at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.ja
va:25)
[pmd] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java
:334)
[pmd] at java.util.concurrent.FutureTask.run(FutureTask.java:166)
[pmd] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolE
xecutor.java:1110)
[pmd] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPool
Executor.java:603)
[pmd] at java.lang.Thread.run(Thread.java:722)
[pmd]
Will be fixed with the next PMD release.