View Javadoc

1   /***
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd.rules.design;
5   
6   import net.sourceforge.pmd.AbstractRule;
7   import net.sourceforge.pmd.RuleContext;
8   import net.sourceforge.pmd.ast.ASTAssignmentOperator;
9   import net.sourceforge.pmd.ast.ASTNullLiteral;
10  import net.sourceforge.pmd.ast.ASTStatementExpression;
11  import net.sourceforge.pmd.ast.SimpleNode;
12  
13  public class NullAssignmentRule extends AbstractRule {
14  
15      public Object visit(ASTStatementExpression expr, Object data) {
16          if (expr.jjtGetNumChildren() <= 2) {
17              return expr.childrenAccept(this, data);
18          }
19  
20          if (expr.jjtGetChild(1) instanceof ASTAssignmentOperator) {
21              SimpleNode curr = (SimpleNode) expr.jjtGetChild(2);
22              for (int i = 0; i < 8; i++) {
23                  if (curr.jjtGetNumChildren() != 0) {
24                      curr = (SimpleNode) curr.jjtGetChild(0);
25                  }
26              }
27  
28              if (curr instanceof ASTNullLiteral) {
29                  RuleContext ctx = (RuleContext) data;
30                  ctx.getReport().addRuleViolation(createRuleViolation(ctx, expr));
31              }
32  
33              return data;
34          } else {
35              return expr.childrenAccept(this, data);
36          }
37      }
38  }