Clover coverage report - PMD - 3.7
Coverage timestamp: Wed May 31 2006 09:25:59 EDT
file stats: LOC: 65   Methods: 2
NCLOC: 50   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
TooManyFields.java 85.7% 100% 100% 95%
coverage coverage
 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.ast.ASTClassOrInterfaceDeclaration;
 8    import net.sourceforge.pmd.ast.ASTCompilationUnit;
 9    import net.sourceforge.pmd.ast.ASTFieldDeclaration;
 10    import net.sourceforge.pmd.ast.SimpleNode;
 11   
 12    import java.util.HashMap;
 13    import java.util.Iterator;
 14    import java.util.List;
 15    import java.util.Map;
 16   
 17   
 18    public class TooManyFields extends AbstractRule {
 19   
 20    private static final int DEFAULT_MAXFIELDS = 15;
 21   
 22    private Map stats;
 23    private Map nodes;
 24    private int maxFields;
 25   
 26  9 public Object visit(ASTCompilationUnit node, Object data) {
 27  9 maxFields = hasProperty("maxfields") ? getIntProperty("maxfields") : DEFAULT_MAXFIELDS;
 28   
 29  9 stats = new HashMap(5);
 30  9 nodes = new HashMap(5);
 31   
 32  9 List l = node.findChildrenOfType(ASTFieldDeclaration.class);
 33   
 34  9 for (Iterator it = l.iterator(); it.hasNext();) {
 35  105 ASTFieldDeclaration fd = (ASTFieldDeclaration) it.next();
 36  105 if (fd.isFinal() && fd.isStatic()) {
 37  32 continue;
 38    }
 39  73 ASTClassOrInterfaceDeclaration clazz = (ASTClassOrInterfaceDeclaration) fd.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class);
 40  73 if (clazz != null && !clazz.isInterface()) {
 41  73 bumpCounterFor(clazz);
 42    }
 43    }
 44  9 for (Iterator it = stats.keySet().iterator(); it.hasNext();) {
 45  9 String k = (String) it.next();
 46  9 int val = ((Integer) stats.get(k)).intValue();
 47  9 SimpleNode n = (SimpleNode) nodes.get(k);
 48  9 if (val > maxFields) {
 49  4 addViolation(data, n);
 50    }
 51    }
 52  9 return data;
 53    }
 54   
 55  73 private void bumpCounterFor(ASTClassOrInterfaceDeclaration clazz) {
 56  73 String key = clazz.getImage();
 57  73 if (!stats.containsKey(key)) {
 58  9 stats.put(key, new Integer(0));
 59  9 nodes.put(key, clazz);
 60    }
 61  73 Integer i = new Integer(((Integer) stats.get(key)).intValue() + 1);
 62  73 stats.put(key, i);
 63    }
 64   
 65    }