Menu

#1084 NPE at UselessStringValueOfRule.java:36

PMD-5.0.5
closed
None
PMD
3-Major
Bug
2014-10-04
2013-04-12
BCW banker
No

Getting this repetitively on a PMD ant execution:
[pmd-task] WARNING: Exception applying rule UselessStringValueOf, continuing with next rule
[pmd-task] java.lang.NullPointerException
[pmd-task] at net.sourceforge.pmd.lang.java.rule.strings.UselessStringValueOfRule.visit(UselessStringValueOfRule.java:36)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTPrimaryPrefix.jjtAccept(ASTPrimaryPrefix.java:37)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:370)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTPrimaryExpression.jjtAccept(ASTPrimaryExpression.java:19)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:290)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTExpression.jjtAccept(ASTExpression.java:19)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:482)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTReturnStatement.jjtAccept(ASTReturnStatement.java:19)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:410)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTStatement.jjtAccept(ASTStatement.java:19)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:422)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTBlockStatement.jjtAccept(ASTBlockStatement.java:19)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:418)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTBlock.jjtAccept(ASTBlock.java:19)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:242)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration.jjtAccept(ASTMethodDeclaration.java:19)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:106)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDeclaration.jjtAccept(ASTClassOrInterfaceBodyDeclaration.java:38)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:102)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBody.jjtAccept(ASTClassOrInterfaceBody.java:19)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:78)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration.jjtAccept(ASTClassOrInterfaceDeclaration.java:23)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:218)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.ASTTypeDeclaration.jjtAccept(ASTTypeDeclaration.java:33)
[pmd-task] at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:52)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:69)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visit(AbstractJavaRule.java:198)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.visitAll(AbstractJavaRule.java:30)
[pmd-task] at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply(AbstractJavaRule.java:24)
[pmd-task] at net.sourceforge.pmd.lang.rule.AbstractDelegateRule.apply(AbstractDelegateRule.java:215)
[pmd-task] at net.sourceforge.pmd.RuleSet.apply(RuleSet.java:234)
[pmd-task] at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:122)
[pmd-task] at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:144)
[pmd-task] at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:75)
[pmd-task] at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:42)
[pmd-task] at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:75)
[pmd-task] at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:22)
[pmd-task] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
[pmd-task] at java.util.concurrent.FutureTask.run(FutureTask.java:166)
[pmd-task] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
[pmd-task] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
[pmd-task] at java.lang.Thread.run(Thread.java:722)
[pmd-task]

Discussion

  • Andreas Dangel

    Andreas Dangel - 2013-04-25
    • summary: NPE in PMD rule --> NPE at net.sourceforge.pmd.lang.java.rule.strings.UselessStringValueOfRule.visit(UselessStringValueOfRule.java:36)
    • status: open --> more-info-needed
     
  • Andreas Dangel

    Andreas Dangel - 2013-04-25

    Hi,
    Which version of PMD are you using?
    And do you know the code part, that triggers this NPE?
    From the stack trace, it looks roughly like this:

    public class Foo {
      int a
      public String test(int b) {
       int a = 1;
        return String.valueOf(a);
      }
    }
    

    You can search for a return statement, that contains a "String.valueOf" expression.

    Thanks,
    Andreas

     
  • Andreas Dangel

    Andreas Dangel - 2013-04-27
    • summary: NPE at net.sourceforge.pmd.lang.java.rule.strings.UselessStringValueOfRule.visit(UselessStringValueOfRule.java:36) --> NPE at UselessStringValueOfRule.java:36
     
  • Rudolf Schürer

    Rudolf Schürer - 2013-07-24

    I've got the same problem in PMD 5.0.4.

    Reduced code for triggering is as follows:

    import android.os.Build;
    
    public class Test {
    
        public String test() {
            print(String.valueOf(Build.TIME));
            print(String.valueOf(Build.VERSION.SDK_INT));
        }
    
        private void print(String s) {
            System.out.println(s);
        }
    }
    

    Note that Build.TIME and Build.VERSION.SDK_INT are public static final long and int, respectively, but no constant expressions, i.e., they get set/initialized at runtime and cannot be inlined at compiletime.

     

    Last edit: Rudolf Schürer 2013-08-02
  • Andreas Dangel

    Andreas Dangel - 2013-08-03
    • status: more-info-needed --> in-progress
    • assigned_to: Andreas Dangel
    • Milestone: New Tickets --> PMD-5.0.5
     
  • Andreas Dangel

    Andreas Dangel - 2013-08-04
    • status: in-progress --> closed
     

Log in to post a comment.