Clover coverage report - PMD - 3.7
Coverage timestamp: Wed May 31 2006 09:25:59 EDT
file stats: LOC: 99   Methods: 4
NCLOC: 53   Classes: 2
 
 Source file Conditionals Statements Methods TOTAL
UselessAssignment.java 0% 0% 0% 0%
coverage
 1    package net.sourceforge.pmd.rules;
 2   
 3    import net.sourceforge.pmd.AbstractRule;
 4    import net.sourceforge.pmd.RuleContext;
 5    import net.sourceforge.pmd.ast.ASTMethodDeclaration;
 6    import net.sourceforge.pmd.dfa.IDataFlowNode;
 7    import net.sourceforge.pmd.dfa.pathfinder.CurrentPath;
 8    import net.sourceforge.pmd.dfa.pathfinder.DAAPathFinder;
 9    import net.sourceforge.pmd.dfa.pathfinder.Executable;
 10    import net.sourceforge.pmd.dfa.variableaccess.VariableAccess;
 11   
 12    import java.util.HashMap;
 13    import java.util.Iterator;
 14    import java.util.Map;
 15   
 16    public class UselessAssignment extends AbstractRule implements Executable {
 17   
 18    private RuleContext rc;
 19   
 20  0 public Object visit(ASTMethodDeclaration node, Object data) {
 21  0 this.rc = (RuleContext) data;
 22   
 23    /*
 24    IDataFlowNode n1 = node.getDataFlowNode();
 25    List f = n1.getFlow();
 26    for (Iterator i = f.iterator(); i.hasNext();) {
 27    DataFlowNode dfan = (DataFlowNode)i.next();
 28    System.out.println(dfan);
 29    List va = dfan.getVariableAccess();
 30    for (Iterator j = va.iterator(); j.hasNext();) {
 31    VariableAccess o = (VariableAccess)j.next();
 32    System.out.println(o);
 33    }
 34    }
 35    */
 36   
 37  0 DAAPathFinder a = new DAAPathFinder((IDataFlowNode) node.getDataFlowNode().getFlow().get(0), this);
 38  0 a.run();
 39   
 40  0 return data;
 41    }
 42   
 43    private static class Usage {
 44    public int accessType;
 45    public IDataFlowNode node;
 46   
 47  0 public Usage(int accessType, IDataFlowNode node) {
 48  0 this.accessType = accessType;
 49  0 this.node = node;
 50    }
 51   
 52  0 public String toString() {
 53  0 return "accessType = " + accessType + ", line = " + node.getLine();
 54    }
 55    }
 56   
 57  0 public void execute(CurrentPath path) {
 58  0 Map hash = new HashMap();
 59    //System.out.println("path size is " + path.size());
 60  0 for (Iterator i = path.iterator(); i.hasNext();) {
 61    //System.out.println("i = " + i);
 62  0 IDataFlowNode inode = (IDataFlowNode) i.next();
 63  0 if (inode.getVariableAccess() == null) {
 64  0 continue;
 65    }
 66  0 for (int j = 0; j < inode.getVariableAccess().size(); j++) {
 67  0 VariableAccess va = (VariableAccess) inode.getVariableAccess().get(j);
 68    //System.out.println("inode = " + inode + ", va = " + va);
 69  0 Object o = hash.get(va.getVariableName());
 70  0 if (o != null) {
 71  0 Usage u = (Usage) o;
 72    // At some point investigate and possibly reintroduce this line2 thing
 73    //int line2 = ((Integer) array.get(1)).intValue();
 74   
 75    // DD - definition followed by another definition
 76    // FIXME need to check for assignment as well!
 77  0 if (va.isDefinition() && va.accessTypeMatches(u.accessType)) {
 78    //System.out.println(va.getVariableName() + ":" + u);
 79  0 addViolation(rc, u.node.getSimpleNode(), va.getVariableName());
 80    }
 81    /* // UR - ??
 82    else if (last == VariableAccess.UNDEFINITION && va.isReference()) {
 83    //this.rc.getReport().addRuleViolation(createRuleViolation(rc, inode.getSimpleNode(), va.getVariableName(), "UR"));
 84    }
 85    // DU - variable is defined and then goes out of scope
 86    // i.e., unused parameter
 87    else if (last == VariableAccess.DEFINITION && va.isUndefinition()) {
 88    if (inode.getSimpleNode() != null) {
 89    this.rc.getReport().addRuleViolation(createRuleViolation(rc, tmp, va.getVariableName(), "DU"));
 90    }
 91    }
 92    */
 93    }
 94  0 Usage u = new Usage(va.getAccessType(), inode);
 95  0 hash.put(va.getVariableName(), u);
 96    }
 97    }
 98    }
 99    }