@Override
  public void typeCheck(java.util.List<PhasedUnit> listOfUnits) {
    for (PhasedUnit pu : listOfUnits) {
      pu.validateTree();
      pu.scanDeclarations();
    }
    for (PhasedUnit pu : listOfUnits) {
      pu.scanTypeDeclarations();
    }
    for (PhasedUnit pu : listOfUnits) {
      pu.validateRefinement();
    }

    for (PhasedUnit pu : listOfUnits) {
      pu.analyseTypes();
    }

    for (PhasedUnit pu : listOfUnits) {
      pu.analyseFlow();
    }

    UnknownTypeCollector utc = new UnknownTypeCollector();
    for (PhasedUnit pu : listOfUnits) {
      pu.getCompilationUnit().visit(utc);
    }
  }