public static SemanticModel createFor(CompilationUnitTree tree, List<File> projectClasspath) {
ParametrizedTypeCache parametrizedTypeCache = new ParametrizedTypeCache();
BytecodeCompleter bytecodeCompleter = new BytecodeCompleter(projectClasspath, parametrizedTypeCache);
Symbols symbols = new Symbols(bytecodeCompleter);
SemanticModel semanticModel = new SemanticModel();
semanticModel.bytecodeCompleter = bytecodeCompleter;
semanticModel.createParentLink((JavaTree) tree);
try {
Resolve resolve = new Resolve(symbols, bytecodeCompleter, parametrizedTypeCache);
TypeAndReferenceSolver typeAndReferenceSolver = new TypeAndReferenceSolver(semanticModel, symbols, resolve, parametrizedTypeCache);
new FirstPass(semanticModel, symbols, resolve, parametrizedTypeCache, typeAndReferenceSolver).visitCompilationUnit(tree);
typeAndReferenceSolver.visitCompilationUnit(tree);
new LabelsVisitor(semanticModel).visitCompilationUnit(tree);
} finally {
handleMissingTypes(tree);
}
return semanticModel;
}