package org.projectusus.metrics; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.CatchClause; 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.InfixExpression.Operator; import org.eclipse.jdt.core.dom.Initializer; import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.jdt.core.dom.SwitchCase; import org.eclipse.jdt.core.dom.WhileStatement; import org.projectusus.core.basis.MetricsResults; import org.projectusus.core.metrics.MetricsCollector; @SuppressWarnings( "unused" ) public class CCCollector extends MetricsCollector { private Counter ccCount = new Counter(); @Override public boolean visit( MethodDeclaration node ) { init( node ); return true; } @Override public boolean visit( Initializer node ) { init( node ); return true; } @Override public void endVisit( MethodDeclaration node ) { commit( node ); } @Override public void endVisit( Initializer node ) { commit( node ); } @Override public boolean visit( WhileStatement node ) { calculate( node, 1 ); return true; } @Override public boolean visit( DoStatement node ) { calculate( node, 1 ); return true; } @Override public boolean visit( ForStatement node ) { calculate( node, 1 ); return true; } @Override public boolean visit( EnhancedForStatement node ) { calculate( node, 1 ); return true; } @Override public boolean visit( IfStatement node ) { calculate( node, 1 ); return true; } @Override public boolean visit( SwitchCase node ) { calculate( node, 1 ); return true; } @Override public boolean visit( CatchClause node ) { calculate( node, 1 ); return true; } @Override public boolean visit( ConditionalExpression node ) { calculate( node, 1 ); return true; } @Override public boolean visit( InfixExpression node ) { Operator operator = node.getOperator(); if( operator.equals( Operator.CONDITIONAL_AND ) || operator.equals( Operator.CONDITIONAL_OR ) ) { calculate( node, 1 + node.extendedOperands().size() ); } return true; } public void init( MethodDeclaration node ) { ccCount.startNewCount( 1 ); } public void init( Initializer node ) { ccCount.startNewCount( 1 ); } public void calculate( ASTNode node, int amount ) { ccCount.increaseLastCountBy( amount ); } public void commit( MethodDeclaration node ) { getMetricsWriter().putData( getFile(), node, MetricsResults.CC, ccCount.getAndClearCount() ); } public void commit( Initializer node ) { getMetricsWriter().putData( getFile(), node, MetricsResults.CC, ccCount.getAndClearCount() ); } }