docs: public void process(CompilationUnitDeclaration unit, int i) {
          this.lookupEnvironment.unitBeingCompleted = unit;
          long parseStart = System.currentTimeMillis();
  
          this.parser.getMethodBodies(unit);
  
          long resolveStart = System.currentTimeMillis();
          this.stats.parseTime += resolveStart - parseStart;
  
          // fault in fields & methods
          if (unit.scope != null)
              unit.scope.faultInTypes();
  
          // verify inherited methods
          if (unit.scope != null)
              unit.scope.verifyMethods(this.lookupEnvironment.methodVerifier());
  
          // type checking
          unit.resolve();
  
          long analyzeStart = System.currentTimeMillis();
          this.stats.resolveTime += analyzeStart - resolveStart;
  
          //No need of analysis or generation of code if statements are not required
          if (!this.options.ignoreMethodBodies) unit.analyseCode(); // flow analysis
  
          long generateStart = System.currentTimeMillis();
          this.stats.analyzeTime += generateStart - analyzeStart;
  
          if (!this.options.ignoreMethodBodies) unit.generateCode(); // code generation
  
          // reference info
          if (this.options.produceReferenceInfo && unit.scope != null)
              unit.scope.storeDependencyInfo();
  
          // finalize problems (suppressWarnings)
          unit.finalizeProblems();
  
          this.stats.generateTime += System.currentTimeMillis() - generateStart;
  
          // refresh the total number of units known at this stage
          unit.compilationResult.totalUnitsKnown = this.totalUnits;
  
          this.lookupEnvironment.unitBeingCompleted = null;
      }