/** * Parse the source for the specified compilation unit and resolve any elements found in it. Any * exceptions thrown by the {@link DartParser} will be added to the given collection. * * @param compilationUnit the compilation unit (not <code>null</code>) * @param parseErrors a collection to which parse errors are added or <code>null</code> if parse * errors should be ignored * @return the parse result */ public static DartUnit resolveUnit( CompilationUnit compilationUnit, Collection<DartCompilationError> parseErrors) throws DartModelException { long start = System.currentTimeMillis(); DartLibraryImpl library = (DartLibraryImpl) compilationUnit.getLibrary(); if (library == null) { // If we cannot get the library, we cannot resolve any elements so we // revert to simply parsing the compilation unit. DartUnit ret = parseUnit(compilationUnit, parseErrors); long elapsed = System.currentTimeMillis() - start; Instrumentation.metric("DartCompilerUtils-resolveUnit", elapsed) .with("ParseOnlyFallback", "true") .log(); Instrumentation.operation("DartCompilerUtils-resolveUnit", elapsed) .with("ParseOnlyFallback", "true") .with("CompilaitonUnit-ElementName", compilationUnit.getElementName()) .log(); return ret; } IResource resource = compilationUnit.getResource(); URI unitUri = null; if (resource != null) { unitUri = resource.getLocationURI(); } if (unitUri == null && compilationUnit instanceof ExternalCompilationUnitImpl) { unitUri = ((ExternalCompilationUnitImpl) compilationUnit).getUri(); } if (unitUri == null) { unitUri = ((CompilationUnitImpl) compilationUnit).getSourceRef().getUri(); } String unitSource = compilationUnit.getSource(); Map<URI, String> suppliedSources = new HashMap<URI, String>(); if (unitSource != null) { suppliedSources.put(unitUri, unitSource); } DartUnit ret = resolveUnit(library.getLibrarySourceFile(), unitUri, suppliedSources, parseErrors); long elapsed = System.currentTimeMillis() - start; Instrumentation.metric("DartCompilerUtils-resolveUnit", elapsed) .with("ParseOnlyFallback", "false") .log(); Instrumentation.operation("DartCompilerUtils-resolveUnit", elapsed) .with("ParseOnlyFallback", "false") .with("CompilaitonUnit-ElementName", compilationUnit.getElementName()) .with("compilationUnit.LastModified", compilationUnit.getModificationStamp()) .log(); return ret; }