package org.projectusus.wip.metrics;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.core.dom.Initializer;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.MethodInvocation;
import org.projectusus.core.basis.MetricsResults;
import org.projectusus.core.metrics.MetricsCollector;
import org.projectusus.metrics.Counter;
@SuppressWarnings( "unused" )
public class TrainWreckCollector extends MetricsCollector {
private List<Integer> trainWrecksPerMethod;
private Counter trainWrecksPerInvocation = new Counter();
public TrainWreckCollector() {
super();
}
@Override
public boolean visit( MethodDeclaration node ) {
initMethodCount();
return true;
}
@Override
public boolean visit( Initializer node ) {
initMethodCount();
return true;
}
@Override
public void endVisit( MethodDeclaration node ) {
submit( node );
}
@Override
public void endVisit( Initializer node ) {
submit( node );
}
@Override
public boolean visit( MethodInvocation node ) {
if( node.getExpression() instanceof MethodInvocation ) {
increase();
} else {
carryOverToMethod();
initInvocationCount();
}
return true;
}
private void submit( MethodDeclaration node ) {
getMetricsWriter().putData( getFile(), node, MetricsResults.TRAIN_WRECKS, trainWrecksPerMethod );
}
private void submit( Initializer node ) {
getMetricsWriter().putData( getFile(), node, MetricsResults.TRAIN_WRECKS, trainWrecksPerMethod );
}
private void increase() {
trainWrecksPerInvocation.increaseLastCountBy( 1 );
}
private void carryOverToMethod() {
int wreckCount = trainWrecksPerInvocation.getAndClearCount();
if( wreckCount > 1 ) {
trainWrecksPerMethod.add( Integer.valueOf( wreckCount ) );
}
}
private void initMethodCount() {
trainWrecksPerMethod = new ArrayList<Integer>();
}
private void initInvocationCount() {
trainWrecksPerInvocation.startNewCount( 1 );
}
}