docs: protected void internalBeginToCompile(ICompilationUnit[] sourceUnits, int maxUnits) {
          if (!this.useSingleThread && maxUnits >= ReadManager.THRESHOLD)
              this.parser.readManager = new ReadManager(sourceUnits, maxUnits);
  
          // Switch the current policy and compilation result for this unit to the requested one.
          for (int i = 0; i < maxUnits; i++) {
              CompilationResult unitResult = null;
              try {
                  if (this.options.verbose) {
                      this.out.println(
                          Messages.bind(Messages.compilation_request,
                          new String[] {
                              String.valueOf(i + 1),
                              String.valueOf(maxUnits),
                              new String(sourceUnits[i].getFileName())
                          }));
                  }
                  // diet parsing for large collection of units
                  CompilationUnitDeclaration parsedUnit;
                  unitResult = new CompilationResult(sourceUnits[i], i, maxUnits, this.options.maxProblemsPerUnit);
                  long parseStart = System.currentTimeMillis();
                  if (this.totalUnits < this.parseThreshold) {
                      parsedUnit = this.parser.parse(sourceUnits[i], unitResult);
                  } else {
                      parsedUnit = this.parser.dietParse(sourceUnits[i], unitResult);
                  }
                  long resolveStart = System.currentTimeMillis();
                  this.stats.parseTime += resolveStart - parseStart;
                  // initial type binding creation
                  this.lookupEnvironment.buildTypeBindings(parsedUnit, null /*no access restriction*/);
                  this.stats.resolveTime += System.currentTimeMillis() - resolveStart;
                  addCompilationUnit(sourceUnits[i], parsedUnit);
                  ImportReference currentPackage = parsedUnit.currentPackage;
                  if (currentPackage != null) {
                      unitResult.recordPackageName(currentPackage.tokens);
                  }
                  //} catch (AbortCompilationUnit e) {
                  //	requestor.acceptResult(unitResult.tagAsAccepted());
              } catch (AbortCompilation a) {
                  // best effort to find a way for reporting this problem:
                  if (a.compilationResult == null)
                      a.compilationResult = unitResult;
                  throw a;
              } finally {
                  sourceUnits[i] = null; // no longer hold onto the unit
              }
          }
          if (this.parser.readManager != null) {
              this.parser.readManager.shutdown();
              this.parser.readManager = null;
          }
          // binding resolution
          this.lookupEnvironment.completeTypeBindings();
      }