compilerDelegate.typeCheck(listOfUnits);
// This phase is proper to the Java backend
for (PhasedUnit pu : listOfUnits) {
Unit unit = pu.getUnit();
final CompilationUnit compilationUnit = pu.getCompilationUnit();
for (Declaration d: unit.getDeclarations()) {
if (d instanceof TypedDeclaration && !(d instanceof Setter)) {
compilationUnit.visit(new MethodOrValueReferenceVisitor((TypedDeclaration) d));
}
}
}
UnsupportedVisitor uv = new UnsupportedVisitor();
MissingNativeVisitor mnv = new MissingNativeVisitor(modelLoader);
BoxingDeclarationVisitor boxingDeclarationVisitor = new CompilerBoxingDeclarationVisitor(gen);
BoxingVisitor boxingVisitor = new CompilerBoxingVisitor(gen);
DeferredVisitor deferredVisitor = new DeferredVisitor();
AnnotationModelVisitor amv = new AnnotationModelVisitor(gen);
DefiniteAssignmentVisitor dav = new DefiniteAssignmentVisitor();
TypeParameterCaptureVisitor tpCaptureVisitor = new TypeParameterCaptureVisitor();
InterfaceVisitor localInterfaceVisitor = new InterfaceVisitor();
// Extra phases for the compiler
// boxing visitor depends on boxing decl
for (PhasedUnit pu : listOfUnits) {
pu.getCompilationUnit().visit(uv);
}
for (PhasedUnit pu : listOfUnits) {
pu.getCompilationUnit().visit(boxingDeclarationVisitor);
}
// the others can run at the same time
for (PhasedUnit pu : listOfUnits) {
CompilationUnit compilationUnit = pu.getCompilationUnit();
compilationUnit.visit(mnv);
compilationUnit.visit(boxingVisitor);
compilationUnit.visit(deferredVisitor);
compilationUnit.visit(amv);
compilationUnit.visit(dav);
compilationUnit.visit(tpCaptureVisitor);
compilationUnit.visit(localInterfaceVisitor);
}
collectTreeErrors(true, true);
}