@ 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 } } }
Add an additional compilation unit into the loop - > build compilation unit declarations their bindings and record their results .