| 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 library context.directory.manager; | 5 library context.directory.manager; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 import 'dart:convert'; | 9 import 'dart:convert'; |
| 10 import 'dart:core'; | 10 import 'dart:core'; |
| 11 | 11 |
| 12 import 'package:analysis_server/src/analysis_server.dart'; | |
| 13 import 'package:analyzer/exception/exception.dart'; | 12 import 'package:analyzer/exception/exception.dart'; |
| 14 import 'package:analyzer/file_system/file_system.dart'; | 13 import 'package:analyzer/file_system/file_system.dart'; |
| 15 import 'package:analyzer/instrumentation/instrumentation.dart'; | 14 import 'package:analyzer/instrumentation/instrumentation.dart'; |
| 16 import 'package:analyzer/plugin/options.dart'; | 15 import 'package:analyzer/plugin/options.dart'; |
| 17 import 'package:analyzer/plugin/resolver_provider.dart'; | 16 import 'package:analyzer/plugin/resolver_provider.dart'; |
| 18 import 'package:analyzer/source/analysis_options_provider.dart'; | 17 import 'package:analyzer/source/analysis_options_provider.dart'; |
| 19 import 'package:analyzer/source/config.dart'; | 18 import 'package:analyzer/source/config.dart'; |
| 20 import 'package:analyzer/source/package_map_provider.dart'; | |
| 21 import 'package:analyzer/source/package_map_resolver.dart'; | 19 import 'package:analyzer/source/package_map_resolver.dart'; |
| 22 import 'package:analyzer/source/path_filter.dart'; | 20 import 'package:analyzer/source/path_filter.dart'; |
| 23 import 'package:analyzer/source/pub_package_map_provider.dart'; | |
| 24 import 'package:analyzer/source/sdk_ext.dart'; | 21 import 'package:analyzer/source/sdk_ext.dart'; |
| 25 import 'package:analyzer/src/context/builder.dart'; | 22 import 'package:analyzer/src/context/builder.dart'; |
| 26 import 'package:analyzer/src/context/context.dart' as context; | 23 import 'package:analyzer/src/context/context.dart' as context; |
| 27 import 'package:analyzer/src/dart/sdk/sdk.dart'; | 24 import 'package:analyzer/src/dart/sdk/sdk.dart'; |
| 28 import 'package:analyzer/src/generated/engine.dart'; | 25 import 'package:analyzer/src/generated/engine.dart'; |
| 29 import 'package:analyzer/src/generated/java_io.dart'; | 26 import 'package:analyzer/src/generated/java_io.dart'; |
| 30 import 'package:analyzer/src/generated/sdk.dart'; | 27 import 'package:analyzer/src/generated/sdk.dart'; |
| 31 import 'package:analyzer/src/generated/source.dart'; | 28 import 'package:analyzer/src/generated/source.dart'; |
| 32 import 'package:analyzer/src/generated/source_io.dart'; | 29 import 'package:analyzer/src/generated/source_io.dart'; |
| 33 import 'package:analyzer/src/task/options.dart'; | 30 import 'package:analyzer/src/task/options.dart'; |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 AnalysisContext addContext(Folder folder, AnalysisOptions options); | 324 AnalysisContext addContext(Folder folder, AnalysisOptions options); |
| 328 | 325 |
| 329 /** | 326 /** |
| 330 * Called when the set of files associated with a context have changed (or | 327 * Called when the set of files associated with a context have changed (or |
| 331 * some of those files have been modified). [changeSet] is the set of | 328 * some of those files have been modified). [changeSet] is the set of |
| 332 * changes that need to be applied to the context. | 329 * changes that need to be applied to the context. |
| 333 */ | 330 */ |
| 334 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet); | 331 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet); |
| 335 | 332 |
| 336 /** | 333 /** |
| 337 * Signals that the context manager has started to compute a package map (if | |
| 338 * [computing] is `true`) or has finished (if [computing] is `false`). | |
| 339 */ | |
| 340 void computingPackageMap(bool computing); | |
| 341 | |
| 342 /** | |
| 343 * Create and return a context builder that can be used to create a context | 334 * Create and return a context builder that can be used to create a context |
| 344 * for the files in the given [folder] when analyzed using the given [options]
. | 335 * for the files in the given [folder] when analyzed using the given [options]
. |
| 345 */ | 336 */ |
| 346 ContextBuilder createContextBuilder(Folder folder, AnalysisOptions options); | 337 ContextBuilder createContextBuilder(Folder folder, AnalysisOptions options); |
| 347 | 338 |
| 348 /** | 339 /** |
| 349 * Called when the context manager changes the folder with which a context is | 340 * Called when the context manager changes the folder with which a context is |
| 350 * associated. Currently this is mostly FYI, and used only in tests. | 341 * associated. Currently this is mostly FYI, and used only in tests. |
| 351 */ | 342 */ |
| 352 void moveContext(Folder from, Folder to); | 343 void moveContext(Folder from, Folder to); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 Map<String, String> normalizedPackageRoots = <String, String>{}; | 439 Map<String, String> normalizedPackageRoots = <String, String>{}; |
| 449 | 440 |
| 450 /** | 441 /** |
| 451 * A function that will return a [UriResolver] that can be used to resolve | 442 * A function that will return a [UriResolver] that can be used to resolve |
| 452 * `package:` URI's within a given folder, or `null` if we should fall back | 443 * `package:` URI's within a given folder, or `null` if we should fall back |
| 453 * to the standard URI resolver. | 444 * to the standard URI resolver. |
| 454 */ | 445 */ |
| 455 final ResolverProvider packageResolverProvider; | 446 final ResolverProvider packageResolverProvider; |
| 456 | 447 |
| 457 /** | 448 /** |
| 458 * Provider which is used to determine the mapping from package name to | 449 * Provider of analysis options. |
| 459 * package folder. | |
| 460 */ | 450 */ |
| 461 final PubPackageMapProvider _packageMapProvider; | |
| 462 | |
| 463 /// Provider of analysis options. | |
| 464 AnalysisOptionsProvider analysisOptionsProvider = | 451 AnalysisOptionsProvider analysisOptionsProvider = |
| 465 new AnalysisOptionsProvider(); | 452 new AnalysisOptionsProvider(); |
| 466 | 453 |
| 467 /** | 454 /** |
| 468 * A list of the globs used to determine which files should be analyzed. | 455 * A list of the globs used to determine which files should be analyzed. |
| 469 */ | 456 */ |
| 470 final List<Glob> analyzedFilesGlobs; | 457 final List<Glob> analyzedFilesGlobs; |
| 471 | 458 |
| 472 /** | 459 /** |
| 473 * The default options used to create new analysis contexts. | 460 * The default options used to create new analysis contexts. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 499 * Stream subscription we are using to watch each analysis root directory for | 486 * Stream subscription we are using to watch each analysis root directory for |
| 500 * changes. | 487 * changes. |
| 501 */ | 488 */ |
| 502 final Map<Folder, StreamSubscription<WatchEvent>> changeSubscriptions = | 489 final Map<Folder, StreamSubscription<WatchEvent>> changeSubscriptions = |
| 503 <Folder, StreamSubscription<WatchEvent>>{}; | 490 <Folder, StreamSubscription<WatchEvent>>{}; |
| 504 | 491 |
| 505 ContextManagerImpl( | 492 ContextManagerImpl( |
| 506 this.resourceProvider, | 493 this.resourceProvider, |
| 507 this.sdkManager, | 494 this.sdkManager, |
| 508 this.packageResolverProvider, | 495 this.packageResolverProvider, |
| 509 this._packageMapProvider, | |
| 510 this.analyzedFilesGlobs, | 496 this.analyzedFilesGlobs, |
| 511 this._instrumentationService, | 497 this._instrumentationService, |
| 512 this.defaultContextOptions) { | 498 this.defaultContextOptions) { |
| 513 absolutePathContext = resourceProvider.absolutePathContext; | 499 absolutePathContext = resourceProvider.absolutePathContext; |
| 514 pathContext = resourceProvider.pathContext; | 500 pathContext = resourceProvider.pathContext; |
| 515 } | 501 } |
| 516 | 502 |
| 517 @override | 503 @override |
| 518 Iterable<AnalysisContext> get analysisContexts => folderMap.values; | 504 Iterable<AnalysisContext> get analysisContexts => folderMap.values; |
| 519 | 505 |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 return new PackagesFileDisposition(packages); | 962 return new PackagesFileDisposition(packages); |
| 977 } | 963 } |
| 978 } | 964 } |
| 979 // The package root does not exist (or is not a folder). Since | 965 // The package root does not exist (or is not a folder). Since |
| 980 // [setRoots] ignores any package roots that don't exist (or aren't | 966 // [setRoots] ignores any package roots that don't exist (or aren't |
| 981 // folders), the only way we should be able to get here is due to a race | 967 // folders), the only way we should be able to get here is due to a race |
| 982 // condition. In any case, the package root folder is gone, so we can't | 968 // condition. In any case, the package root folder is gone, so we can't |
| 983 // resolve packages. | 969 // resolve packages. |
| 984 return new NoPackageFolderDisposition(packageRoot: packageRoot); | 970 return new NoPackageFolderDisposition(packageRoot: packageRoot); |
| 985 } else { | 971 } else { |
| 986 PackageMapInfo packageMapInfo; | 972 // Try .packages first. |
| 987 callbacks.computingPackageMap(true); | 973 if (absolutePathContext.basename(packagespecFile.path) == |
| 988 try { | 974 PACKAGE_SPEC_NAME) { |
| 989 // Try .packages first. | 975 Packages packages = _readPackagespec(packagespecFile); |
| 990 if (absolutePathContext.basename(packagespecFile.path) == | 976 return new PackagesFileDisposition(packages); |
| 991 PACKAGE_SPEC_NAME) { | 977 } |
| 992 Packages packages = _readPackagespec(packagespecFile); | 978 if (packageResolverProvider != null) { |
| 993 return new PackagesFileDisposition(packages); | 979 UriResolver resolver = packageResolverProvider(folder); |
| 980 if (resolver != null) { |
| 981 return new CustomPackageResolverDisposition(resolver); |
| 994 } | 982 } |
| 995 if (packageResolverProvider != null) { | |
| 996 UriResolver resolver = packageResolverProvider(folder); | |
| 997 if (resolver != null) { | |
| 998 return new CustomPackageResolverDisposition(resolver); | |
| 999 } | |
| 1000 } | |
| 1001 | |
| 1002 ServerPerformanceStatistics.pub.makeCurrentWhile(() { | |
| 1003 packageMapInfo = _packageMapProvider.computePackageMap(folder); | |
| 1004 }); | |
| 1005 } finally { | |
| 1006 callbacks.computingPackageMap(false); | |
| 1007 } | 983 } |
| 1008 for (String dependencyPath in packageMapInfo.dependencies) { | 984 return new NoPackageFolderDisposition(); |
| 1009 addDependency(dependencyPath); | |
| 1010 } | |
| 1011 if (packageMapInfo.packageMap == null) { | |
| 1012 return new NoPackageFolderDisposition(); | |
| 1013 } | |
| 1014 return new PackageMapDisposition(packageMapInfo.packageMap); | |
| 1015 } | 985 } |
| 1016 } | 986 } |
| 1017 | 987 |
| 1018 /** | 988 /** |
| 1019 * Create a new empty context associated with [folder], having parent | 989 * Create a new empty context associated with [folder], having parent |
| 1020 * [parent] and using [packagespecFile] to resolve package URI's. | 990 * [parent] and using [packagespecFile] to resolve package URI's. |
| 1021 */ | 991 */ |
| 1022 ContextInfo _createContext( | 992 ContextInfo _createContext( |
| 1023 ContextInfo parent, Folder folder, File packagespecFile) { | 993 ContextInfo parent, Folder folder, File packagespecFile) { |
| 1024 List<String> dependencies = <String>[]; | 994 List<String> dependencies = <String>[]; |
| (...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1815 } | 1785 } |
| 1816 return _embedderLocator; | 1786 return _embedderLocator; |
| 1817 } | 1787 } |
| 1818 | 1788 |
| 1819 @override | 1789 @override |
| 1820 SdkExtensionFinder getSdkExtensionFinder(ResourceProvider resourceProvider) { | 1790 SdkExtensionFinder getSdkExtensionFinder(ResourceProvider resourceProvider) { |
| 1821 return _sdkExtensionFinder ??= | 1791 return _sdkExtensionFinder ??= |
| 1822 new SdkExtensionFinder(buildPackageMap(resourceProvider)); | 1792 new SdkExtensionFinder(buildPackageMap(resourceProvider)); |
| 1823 } | 1793 } |
| 1824 } | 1794 } |
| OLD | NEW |