package org.projectusus.metrics;
import static org.projectusus.core.basis.MetricsResults.PUBLIC_FIELDS;
import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.Modifier;
import org.eclipse.jdt.core.dom.TypeDeclaration;
import org.projectusus.core.metrics.MetricsCollector;
public class PublicFieldCollector extends MetricsCollector {
private Counter count = new Counter();
@Override
public boolean visit( TypeDeclaration node ) {
init( node );
return true;
}
@Override
public void endVisit( TypeDeclaration node ) {
commit( node );
}
@Override
public boolean visit( FieldDeclaration node ) {
calculate( node.getModifiers() );
return true;
}
public void init( @SuppressWarnings( "unused" ) TypeDeclaration node ) {
count.startNewCount();
}
public void calculate( int fieldModifiers ) {
if( isPublic( fieldModifiers ) && isNotStaticFinal( fieldModifiers ) ) {
count.increaseLastCountBy( 1 );
}
}
public void commit( TypeDeclaration node ) {
getMetricsWriter().putData( getFile(), node, PUBLIC_FIELDS, count.getAndClearCount() );
}
private boolean isNotStaticFinal( int modifiers ) {
return (modifiers & Modifier.STATIC) == 0 || (modifiers & Modifier.FINAL) == 0;
}
private boolean isPublic( int modifiers ) {
return (modifiers & Modifier.PUBLIC) != 0;
}
}