package org.lrg.outcode.builder.ast; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.ASTVisitor; import org.eclipse.jdt.core.dom.Block; import org.eclipse.jdt.core.dom.ConditionalExpression; import org.eclipse.jdt.core.dom.DoStatement; import org.eclipse.jdt.core.dom.EnhancedForStatement; import org.eclipse.jdt.core.dom.ForStatement; import org.eclipse.jdt.core.dom.IfStatement; import org.eclipse.jdt.core.dom.InfixExpression; import org.eclipse.jdt.core.dom.SwitchCase; import org.eclipse.jdt.core.dom.WhileStatement; public class MetricVisitor extends ASTVisitor{ private int cyclo = 1; private int statements = 0; public MetricVisitor() { super(); } public boolean visit(IfStatement loc){ cyclo++; return true; } public boolean visit(SwitchCase loc){ cyclo++; return true; } public boolean visit(ForStatement loc){ cyclo++; return true; } public boolean visit(DoStatement loc){ cyclo++; return true; } public boolean visit(WhileStatement loc){ cyclo++; return true; } public boolean visit(EnhancedForStatement loc){ cyclo++; return true; } public boolean visit(ConditionalExpression loc){ cyclo++; return true; } public boolean visit(Block loc){ statements += loc.statements().size(); return true; } public boolean visit(InfixExpression loc){ if (loc.getOperator() == InfixExpression.Operator.CONDITIONAL_AND || loc.getOperator() == InfixExpression.Operator.CONDITIONAL_OR) cyclo++; return true; } public int getCyclomaticComplexity(){ return cyclo; } public int getNumberOfStatements(){ return statements; } public void process(ASTNode node){ node.accept(this); } }