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 }