// Copyright (c) 2009-2010 by the projectusus.org contributors
// This software is released under the terms and conditions
// of the Eclipse Public License (EPL) 1.0.
// See http://www.eclipse.org/legal/epl-v10.html for details.
package org.projectusus.core.proportions.rawdata.jdtdriver;
import static org.eclipse.jdt.core.JavaCore.createCompilationUnitFrom;
import static org.eclipse.jdt.core.dom.ASTParser.newParser;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.projectusus.core.metrics.MetricsCollector;
import org.projectusus.core.statistics.UsusModelProvider;
public class JavaFileDriver {
private final IFile file;
public JavaFileDriver( IFile file ) {
this.file = file;
}
public void compute( Set<MetricsCollector> metricsExtensions ) {
CompilationUnit compilationUnit = parseFile();
for( MetricsCollector visitor : metricsExtensions ) {
setup( visitor );
compilationUnit.accept( visitor );
}
}
private void setup( MetricsCollector visitor ) {
visitor.setup( file, UsusModelProvider.getMetricsWriter() );
}
private CompilationUnit parseFile() {
return parse( createCompilationUnitFrom( file ) );
}
private static CompilationUnit parse( ICompilationUnit unit ) {
ASTParser parser = newParser( AST.JLS3 );
parser.setKind( ASTParser.K_COMPILATION_UNIT );
parser.setResolveBindings( true );
parser.setSource( unit );
return (CompilationUnit)parser.createAST( null );
}
}