docs: @Override
      public void accept(ICompilationUnit sourceUnit, AccessRestriction accessRestriction) {
          // Switch the current policy and compilation result for this unit to the requested one.
          CompilationResult unitResult =
              new CompilationResult(sourceUnit, this.totalUnits, this.totalUnits, this.options.maxProblemsPerUnit);
          unitResult.checkSecondaryTypes = true;
          try {
              if (this.options.verbose) {
                  String count = String.valueOf(this.totalUnits + 1);
                  this.out.println(
                      Messages.bind(Messages.compilation_request,
                          new String[] {
                              count,
                              count,
                              new String(sourceUnit.getFileName())
                          }));
              }
              // diet parsing for large collection of unit
              CompilationUnitDeclaration parsedUnit;
              if (this.totalUnits < this.parseThreshold) {
                  parsedUnit = this.parser.parse(sourceUnit, unitResult);
              } else {
                  parsedUnit = this.parser.dietParse(sourceUnit, unitResult);
              }
              // initial type binding creation
              this.lookupEnvironment.buildTypeBindings(parsedUnit, accessRestriction);
              addCompilationUnit(sourceUnit, parsedUnit);
  
              // binding resolution
              this.lookupEnvironment.completeTypeBindings(parsedUnit);
          } catch (AbortCompilationUnit e) {
              // at this point, currentCompilationUnitResult may not be sourceUnit, but some other
              // one requested further along to resolve sourceUnit.
              if (unitResult.compilationUnit == sourceUnit) { // only report once
                  this.requestor.acceptResult(unitResult.tagAsAccepted());
              } else {
                  throw e; // want to abort enclosing request to compile
              }
          }
      }