package org.projectusus.core.proportions.rawdata.jdtdriver.ml; import java.util.ArrayList; import java.util.Stack; import org.eclipse.jdt.core.dom.Initializer; import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.jdt.core.dom.Modifier; import org.projectusus.metrics.MLCollector; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; public class MLInspector extends MLCollector { private static final String STATIC_INITIALIZER = "static initializer"; private static final String INITIALIZER = "initializer"; private Multimap<String, Integer> values = ArrayListMultimap.create(); private Stack<String> names = new Stack<String>(); @Override public void init( MethodDeclaration node ) { initWithEmptyListFor( node.getName().toString() ); } @Override public void init( Initializer node ) { if( (node.getModifiers() & Modifier.STATIC) == 0 ) { initWithEmptyListFor( INITIALIZER ); } else { initWithEmptyListFor( STATIC_INITIALIZER ); } } @Override public void calculate( int count ) { values.put( names.peek(), Integer.valueOf( count ) ); } @Override public void commit( MethodDeclaration node ) { names.pop(); } @Override public void commit( Initializer node ) { names.pop(); } public Multimap<String, Integer> getValues() { return values; } private void initWithEmptyListFor( String name ) { names.push( name ); values.putAll( names.peek(), new ArrayList<Integer>() ); } }