public synchronized void analyseFlow() {
if (!flowAnalyzed) {
compilationUnit.visit(new TypeHierarchyVisitor());
//System.out.println("Validate control flow for " + fileName);
compilationUnit.visit(new ControlFlowVisitor());
//System.out.println("Validate self references for " + fileName);
//System.out.println("Validate specification for " + fileName);
for (Declaration d: unit.getDeclarations()) {
compilationUnit.visit(new SpecificationVisitor(d));
if (d instanceof TypeDeclaration) {