Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 // This code was auto-generated, is not intended to be edited, and is subject to | 5 // This code was auto-generated, is not intended to be edited, and is subject to |
| 6 // significant change. Please see the README file for more information. | 6 // significant change. Please see the README file for more information. |
| 7 | 7 |
| 8 library engine; | 8 library engine; |
| 9 | 9 |
| 10 import "dart:math" as math; | 10 import "dart:math" as math; |
| (...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 961 * The set of declared variables used when computing constant values. | 961 * The set of declared variables used when computing constant values. |
| 962 */ | 962 */ |
| 963 DeclaredVariables _declaredVariables = new DeclaredVariables(); | 963 DeclaredVariables _declaredVariables = new DeclaredVariables(); |
| 964 | 964 |
| 965 /** | 965 /** |
| 966 * A source representing the core library. | 966 * A source representing the core library. |
| 967 */ | 967 */ |
| 968 Source _coreLibrarySource; | 968 Source _coreLibrarySource; |
| 969 | 969 |
| 970 /** | 970 /** |
| 971 * A source representing the async library. | |
| 972 */ | |
| 973 Source _asyncLibrarySource; | |
| 974 | |
| 975 /** | |
| 971 * The partition that contains analysis results that are not shared with other contexts. | 976 * The partition that contains analysis results that are not shared with other contexts. |
| 972 */ | 977 */ |
| 973 CachePartition _privatePartition; | 978 CachePartition _privatePartition; |
| 974 | 979 |
| 975 /** | 980 /** |
| 976 * A table mapping the sources known to the context to the information known a bout the source. | 981 * A table mapping the sources known to the context to the information known a bout the source. |
| 977 */ | 982 */ |
| 978 AnalysisCache _cache; | 983 AnalysisCache _cache; |
| 979 | 984 |
| 980 /** | 985 /** |
| (...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1396 } else if (factory.context != null) { | 1401 } else if (factory.context != null) { |
| 1397 throw new IllegalStateException( | 1402 throw new IllegalStateException( |
| 1398 "Source factories cannot be shared between contexts"); | 1403 "Source factories cannot be shared between contexts"); |
| 1399 } | 1404 } |
| 1400 if (_sourceFactory != null) { | 1405 if (_sourceFactory != null) { |
| 1401 _sourceFactory.context = null; | 1406 _sourceFactory.context = null; |
| 1402 } | 1407 } |
| 1403 factory.context = this; | 1408 factory.context = this; |
| 1404 _sourceFactory = factory; | 1409 _sourceFactory = factory; |
| 1405 _coreLibrarySource = _sourceFactory.forUri(DartSdk.DART_CORE); | 1410 _coreLibrarySource = _sourceFactory.forUri(DartSdk.DART_CORE); |
| 1411 _asyncLibrarySource = _sourceFactory.forUri(DartSdk.DART_ASYNC); | |
| 1406 _cache = createCacheFromSourceFactory(factory); | 1412 _cache = createCacheFromSourceFactory(factory); |
| 1407 _invalidateAllLocalResolutionInformation(true); | 1413 _invalidateAllLocalResolutionInformation(true); |
| 1408 } | 1414 } |
| 1409 | 1415 |
| 1410 /** | 1416 /** |
| 1411 * Return a list of the sources that would be processed by [performAnalysisTas k]. This | 1417 * Return a list of the sources that would be processed by [performAnalysisTas k]. This |
| 1412 * method duplicates, and must therefore be kept in sync with, [getNextAnalysi sTask]. | 1418 * method duplicates, and must therefore be kept in sync with, [getNextAnalysi sTask]. |
| 1413 * This method is intended to be used for testing purposes only. | 1419 * This method is intended to be used for testing purposes only. |
| 1414 * | 1420 * |
| 1415 * @return a list of the sources that would be processed by [performAnalysisTa sk] | 1421 * @return a list of the sources that would be processed by [performAnalysisTa sk] |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1470 @override | 1476 @override |
| 1471 TypeProvider get typeProvider { | 1477 TypeProvider get typeProvider { |
| 1472 Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE); | 1478 Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE); |
| 1473 if (coreSource == null) { | 1479 if (coreSource == null) { |
| 1474 throw new AnalysisException("Could not create a source for dart:core"); | 1480 throw new AnalysisException("Could not create a source for dart:core"); |
| 1475 } | 1481 } |
| 1476 LibraryElement coreElement = computeLibraryElement(coreSource); | 1482 LibraryElement coreElement = computeLibraryElement(coreSource); |
| 1477 if (coreElement == null) { | 1483 if (coreElement == null) { |
| 1478 throw new AnalysisException("Could not create an element for dart:core"); | 1484 throw new AnalysisException("Could not create an element for dart:core"); |
| 1479 } | 1485 } |
| 1480 return new TypeProviderImpl(coreElement); | 1486 Source asyncSource = sourceFactory.forUri(DartSdk.DART_ASYNC); |
| 1487 if (asyncSource == null) { | |
| 1488 throw new AnalysisException("Could not create a source for dart:async"); | |
| 1489 } | |
| 1490 LibraryElement asyncElement = computeLibraryElement(asyncSource); | |
| 1491 if (asyncElement == null) { | |
| 1492 throw new AnalysisException("Could not create an element for dart:async"); | |
| 1493 } | |
| 1494 return new TypeProviderImpl(coreElement, asyncElement); | |
| 1481 } | 1495 } |
| 1482 | 1496 |
| 1483 @override | 1497 @override |
| 1484 void addListener(AnalysisListener listener) { | 1498 void addListener(AnalysisListener listener) { |
| 1485 if (!_listeners.contains(listener)) { | 1499 if (!_listeners.contains(listener)) { |
| 1486 _listeners.add(listener); | 1500 _listeners.add(listener); |
| 1487 } | 1501 } |
| 1488 } | 1502 } |
| 1489 | 1503 |
| 1490 @override | 1504 @override |
| (...skipping 3859 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5350 if (_taskData != null) { | 5364 if (_taskData != null) { |
| 5351 // At least one part needs to be parsed. | 5365 // At least one part needs to be parsed. |
| 5352 return; | 5366 return; |
| 5353 } | 5367 } |
| 5354 // All of the AST's necessary to perform a resolution of the library cycle | 5368 // All of the AST's necessary to perform a resolution of the library cycle |
| 5355 // have been gathered, so it is no longer necessary to retain them in the | 5369 // have been gathered, so it is no longer necessary to retain them in the |
| 5356 // cache. | 5370 // cache. |
| 5357 AnalysisContextImpl_this._neededForResolution = null; | 5371 AnalysisContextImpl_this._neededForResolution = null; |
| 5358 } | 5372 } |
| 5359 | 5373 |
| 5374 bool _addDependency(ResolvableLibrary dependant, Source dependency, | |
| 5375 List<ResolvableLibrary> dependencyList) { | |
| 5376 if (dependant.librarySource == dependency) { | |
| 5377 // Don't add a dependency of a library on itself; there's no point. | |
| 5378 return true; | |
| 5379 } | |
| 5380 ResolvableLibrary importedLibrary = _libraryMap[dependency]; | |
| 5381 if (importedLibrary == null) { | |
| 5382 importedLibrary = _createLibraryOrNull(dependency); | |
| 5383 if (importedLibrary != null) { | |
| 5384 _computeLibraryDependencies(importedLibrary); | |
| 5385 if (_taskData != null) { | |
| 5386 return false; | |
| 5387 } | |
| 5388 } | |
| 5389 } | |
| 5390 if (importedLibrary != null) { | |
| 5391 if (dependencyList != null) { | |
| 5392 dependencyList.add(importedLibrary); | |
| 5393 } | |
| 5394 _dependencyGraph.addEdge(dependant, importedLibrary); | |
| 5395 } | |
| 5396 return true; | |
| 5397 } | |
| 5398 | |
| 5360 /** | 5399 /** |
| 5361 * Recursively traverse the libraries reachable from the given library, creati ng instances of | 5400 * Recursively traverse the libraries reachable from the given library, creati ng instances of |
| 5362 * the class [Library] to represent them, and record the references in the lib rary | 5401 * the class [Library] to represent them, and record the references in the lib rary |
| 5363 * objects. | 5402 * objects. |
| 5364 * | 5403 * |
| 5365 * @param library the library to be processed to find libraries that have not yet been traversed | 5404 * @param library the library to be processed to find libraries that have not yet been traversed |
| 5366 * @throws AnalysisException if some portion of the library graph could not be traversed | 5405 * @throws AnalysisException if some portion of the library graph could not be traversed |
| 5367 */ | 5406 */ |
| 5368 void _computeLibraryDependencies(ResolvableLibrary library) { | 5407 void _computeLibraryDependencies(ResolvableLibrary library) { |
| 5369 Source librarySource = library.librarySource; | 5408 Source librarySource = library.librarySource; |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 5392 * | 5431 * |
| 5393 * @param library the library to be processed to find libraries that have not yet been traversed | 5432 * @param library the library to be processed to find libraries that have not yet been traversed |
| 5394 * @param importedSources an array containing the sources that are imported in to the given | 5433 * @param importedSources an array containing the sources that are imported in to the given |
| 5395 * library | 5434 * library |
| 5396 * @param exportedSources an array containing the sources that are exported fr om the given | 5435 * @param exportedSources an array containing the sources that are exported fr om the given |
| 5397 * library | 5436 * library |
| 5398 */ | 5437 */ |
| 5399 void _computeLibraryDependenciesFromDirectives(ResolvableLibrary library, | 5438 void _computeLibraryDependenciesFromDirectives(ResolvableLibrary library, |
| 5400 List<Source> importedSources, List<Source> exportedSources) { | 5439 List<Source> importedSources, List<Source> exportedSources) { |
| 5401 int importCount = importedSources.length; | 5440 int importCount = importedSources.length; |
| 5402 if (importCount > 0) { | 5441 List<ResolvableLibrary> importedLibraries = new List<ResolvableLibrary>(); |
| 5403 List<ResolvableLibrary> importedLibraries = new List<ResolvableLibrary>(); | 5442 bool explicitlyImportsCore = false; |
| 5404 bool explicitlyImportsCore = false; | 5443 bool importsAsync = false; |
| 5405 for (int i = 0; i < importCount; i++) { | 5444 for (int i = 0; i < importCount; i++) { |
| 5406 Source importedSource = importedSources[i]; | 5445 Source importedSource = importedSources[i]; |
| 5407 if (importedSource == AnalysisContextImpl_this._coreLibrarySource) { | 5446 if (importedSource == AnalysisContextImpl_this._coreLibrarySource) { |
| 5408 explicitlyImportsCore = true; | 5447 explicitlyImportsCore = true; |
| 5409 } | 5448 } else if (importedSource == |
| 5410 ResolvableLibrary importedLibrary = _libraryMap[importedSource]; | 5449 AnalysisContextImpl_this._asyncLibrarySource) { |
| 5411 if (importedLibrary == null) { | 5450 importsAsync = true; |
| 5412 importedLibrary = _createLibraryOrNull(importedSource); | |
| 5413 if (importedLibrary != null) { | |
| 5414 _computeLibraryDependencies(importedLibrary); | |
| 5415 if (_taskData != null) { | |
| 5416 return; | |
| 5417 } | |
| 5418 } | |
| 5419 } | |
| 5420 if (importedLibrary != null) { | |
| 5421 importedLibraries.add(importedLibrary); | |
| 5422 _dependencyGraph.addEdge(library, importedLibrary); | |
| 5423 } | |
| 5424 } | 5451 } |
| 5425 library.explicitlyImportsCore = explicitlyImportsCore; | 5452 if (!_addDependency(library, importedSource, importedLibraries)) { |
| 5426 if (!explicitlyImportsCore && | 5453 return; |
| 5427 AnalysisContextImpl_this._coreLibrarySource != library.librarySource) { | |
| 5428 ResolvableLibrary importedLibrary = | |
| 5429 _libraryMap[AnalysisContextImpl_this._coreLibrarySource]; | |
| 5430 if (importedLibrary == null) { | |
| 5431 importedLibrary = | |
| 5432 _createLibraryOrNull(AnalysisContextImpl_this._coreLibrarySource); | |
| 5433 if (importedLibrary != null) { | |
| 5434 _computeLibraryDependencies(importedLibrary); | |
| 5435 if (_taskData != null) { | |
| 5436 return; | |
| 5437 } | |
| 5438 } | |
| 5439 } | |
| 5440 if (importedLibrary != null) { | |
| 5441 importedLibraries.add(importedLibrary); | |
| 5442 _dependencyGraph.addEdge(library, importedLibrary); | |
| 5443 } | |
| 5444 } | |
| 5445 library.importedLibraries = importedLibraries; | |
| 5446 } else { | |
| 5447 library.explicitlyImportsCore = false; | |
| 5448 ResolvableLibrary importedLibrary = | |
| 5449 _libraryMap[AnalysisContextImpl_this._coreLibrarySource]; | |
| 5450 if (importedLibrary == null) { | |
| 5451 importedLibrary = | |
| 5452 _createLibraryOrNull(AnalysisContextImpl_this._coreLibrarySource); | |
| 5453 if (importedLibrary != null) { | |
| 5454 _computeLibraryDependencies(importedLibrary); | |
| 5455 if (_taskData != null) { | |
| 5456 return; | |
| 5457 } | |
| 5458 } | |
| 5459 } | |
| 5460 if (importedLibrary != null) { | |
| 5461 _dependencyGraph.addEdge(library, importedLibrary); | |
| 5462 library.importedLibraries = <ResolvableLibrary>[importedLibrary]; | |
| 5463 } | 5454 } |
| 5464 } | 5455 } |
| 5456 library.explicitlyImportsCore = explicitlyImportsCore; | |
| 5457 if (!explicitlyImportsCore) { | |
| 5458 if (!_addDependency( | |
| 5459 library, | |
| 5460 AnalysisContextImpl_this._coreLibrarySource, | |
| 5461 importedLibraries)) { | |
| 5462 return; | |
| 5463 } | |
| 5464 } | |
| 5465 if (!importsAsync) { | |
| 5466 // Add a dependency on async to ensure that the Future element will be | |
| 5467 // built before we generate errors and warnings for async methods. Also | |
| 5468 // include it in importedLibraries, so that it will be picked up by | |
| 5469 // LibraryResolver2._buildLibraryMap(). | |
| 5470 // TODO(paulberry): this is a bit of a hack, since the async library | |
| 5471 // isn't actually being imported. | |
|
Brian Wilkerson
2015/02/02 19:41:48
I don't think this is (or should be) necessary und
Paul Berry
2015/02/02 20:55:38
Hmm, your reasoning seems valid. However, if I re
| |
| 5472 if (!_addDependency( | |
| 5473 library, | |
| 5474 AnalysisContextImpl_this._asyncLibrarySource, | |
| 5475 importedLibraries)) { | |
| 5476 return; | |
| 5477 } | |
| 5478 } | |
| 5479 library.importedLibraries = importedLibraries; | |
| 5465 int exportCount = exportedSources.length; | 5480 int exportCount = exportedSources.length; |
| 5466 if (exportCount > 0) { | 5481 if (exportCount > 0) { |
| 5467 List<ResolvableLibrary> exportedLibraries = new List<ResolvableLibrary>(); | 5482 List<ResolvableLibrary> exportedLibraries = new List<ResolvableLibrary>(); |
| 5468 for (int i = 0; i < exportCount; i++) { | 5483 for (int i = 0; i < exportCount; i++) { |
| 5469 Source exportedSource = exportedSources[i]; | 5484 Source exportedSource = exportedSources[i]; |
| 5470 ResolvableLibrary exportedLibrary = _libraryMap[exportedSource]; | 5485 if (!_addDependency(library, exportedSource, exportedLibraries)) { |
| 5471 if (exportedLibrary == null) { | 5486 return; |
| 5472 exportedLibrary = _createLibraryOrNull(exportedSource); | |
| 5473 if (exportedLibrary != null) { | |
| 5474 _computeLibraryDependencies(exportedLibrary); | |
| 5475 if (_taskData != null) { | |
| 5476 return; | |
| 5477 } | |
| 5478 } | |
| 5479 } | |
| 5480 if (exportedLibrary != null) { | |
| 5481 exportedLibraries.add(exportedLibrary); | |
| 5482 _dependencyGraph.addEdge(library, exportedLibrary); | |
| 5483 } | 5487 } |
| 5484 } | 5488 } |
| 5485 library.exportedLibraries = exportedLibraries; | 5489 library.exportedLibraries = exportedLibraries; |
| 5486 } | 5490 } |
| 5487 } | 5491 } |
| 5488 | 5492 |
| 5489 /** | 5493 /** |
| 5490 * Gather the resolvable AST structures for each of the compilation units in e ach of the | 5494 * Gather the resolvable AST structures for each of the compilation units in e ach of the |
| 5491 * libraries in the cycle. This is done in two phases: first we ensure that we have cached an | 5495 * libraries in the cycle. This is done in two phases: first we ensure that we have cached an |
| 5492 * AST structure for each compilation unit, then we gather them. We split the work this way | 5496 * AST structure for each compilation unit, then we gather them. We split the work this way |
| (...skipping 6821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 12314 if (element.id == _id) { | 12318 if (element.id == _id) { |
| 12315 result = element; | 12319 result = element; |
| 12316 throw new _ElementByIdFinderException(); | 12320 throw new _ElementByIdFinderException(); |
| 12317 } | 12321 } |
| 12318 super.visitElement(element); | 12322 super.visitElement(element); |
| 12319 } | 12323 } |
| 12320 } | 12324 } |
| 12321 | 12325 |
| 12322 class _ElementByIdFinderException { | 12326 class _ElementByIdFinderException { |
| 12323 } | 12327 } |
| OLD | NEW |