Clover coverage report - PMD - 3.7
Coverage timestamp: Wed May 31 2006 09:25:59 EDT
file stats: LOC: 44   Methods: 1
NCLOC: 33   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
ExceptionAsFlowControl.java 100% 100% 100% 100%
coverage
 1    package net.sourceforge.pmd.rules.design;
 2   
 3    import net.sourceforge.pmd.AbstractRule;
 4    import net.sourceforge.pmd.ast.ASTCatchStatement;
 5    import net.sourceforge.pmd.ast.ASTClassOrInterfaceType;
 6    import net.sourceforge.pmd.ast.ASTFormalParameter;
 7    import net.sourceforge.pmd.ast.ASTThrowStatement;
 8    import net.sourceforge.pmd.ast.ASTTryStatement;
 9    import net.sourceforge.pmd.ast.ASTType;
 10   
 11    import java.util.Iterator;
 12    import java.util.List;
 13   
 14    /**
 15    * Catches the use of exception statements as a flow control device.
 16    *
 17    * @author Will Sargent
 18    */
 19    public class ExceptionAsFlowControl extends AbstractRule {
 20   
 21  4 public Object visit(ASTThrowStatement node, Object data) {
 22  4 ASTTryStatement parent = (ASTTryStatement) node.getFirstParentOfType(ASTTryStatement.class);
 23  4 if (parent == null) {
 24  1 return data;
 25    }
 26  3 for (parent = (ASTTryStatement) parent.getFirstParentOfType(ASTTryStatement.class)
 27  4 ; parent != null
 28    ; parent = (ASTTryStatement) parent.getFirstParentOfType(ASTTryStatement.class)) {
 29   
 30  1 List list = parent.findChildrenOfType(ASTCatchStatement.class);
 31  1 for (Iterator iter = list.iterator(); iter.hasNext();) {
 32  2 ASTCatchStatement catchStmt = (ASTCatchStatement) iter.next();
 33  2 ASTFormalParameter fp = (ASTFormalParameter) catchStmt.jjtGetChild(0);
 34  2 ASTType type = (ASTType) fp.findChildrenOfType(ASTType.class).get(0);
 35  2 ASTClassOrInterfaceType name = (ASTClassOrInterfaceType) type.findChildrenOfType(ASTClassOrInterfaceType.class).get(0);
 36  2 if (node.getFirstClassOrInterfaceTypeImage() != null && node.getFirstClassOrInterfaceTypeImage().equals(name.getImage())) {
 37  1 addViolation(data, name);
 38    }
 39    }
 40    }
 41  3 return data;
 42    }
 43   
 44    }