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' hide Resource; | 10 import 'dart:core' hide Resource; |
11 | 11 |
12 import 'package:analysis_server/src/analysis_server.dart'; | 12 import 'package:analysis_server/src/analysis_server.dart'; |
13 import 'package:analyzer/file_system/file_system.dart'; | 13 import 'package:analyzer/file_system/file_system.dart'; |
14 import 'package:analyzer/instrumentation/instrumentation.dart'; | 14 import 'package:analyzer/instrumentation/instrumentation.dart'; |
15 import 'package:analyzer/plugin/embedded_resolver_provider.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/embedder.dart'; | 19 import 'package:analyzer/source/embedder.dart'; |
21 import 'package:analyzer/source/package_map_provider.dart'; | 20 import 'package:analyzer/source/package_map_provider.dart'; |
22 import 'package:analyzer/source/package_map_resolver.dart'; | 21 import 'package:analyzer/source/package_map_resolver.dart'; |
23 import 'package:analyzer/source/path_filter.dart'; | 22 import 'package:analyzer/source/path_filter.dart'; |
24 import 'package:analyzer/source/pub_package_map_provider.dart'; | 23 import 'package:analyzer/source/pub_package_map_provider.dart'; |
25 import 'package:analyzer/source/sdk_ext.dart'; | 24 import 'package:analyzer/source/sdk_ext.dart'; |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 * TODO(scheglov) remove [pathContext]. | 400 * TODO(scheglov) remove [pathContext]. |
402 */ | 401 */ |
403 AbsolutePathContext absolutePathContext; | 402 AbsolutePathContext absolutePathContext; |
404 | 403 |
405 /** | 404 /** |
406 * The context used to work with file system paths. | 405 * The context used to work with file system paths. |
407 */ | 406 */ |
408 pathos.Context pathContext; | 407 pathos.Context pathContext; |
409 | 408 |
410 /** | 409 /** |
411 * A function that will return a [UriResolver] that can be used to resolve | |
412 * URI's for embedded libraries within a given folder, or `null` if we should | |
413 * fall back to the standard URI resolver. | |
414 */ | |
415 final EmbeddedResolverProvider embeddedUriResolverProvider; | |
416 | |
417 /** | |
418 * The list of excluded paths (folders and files) most recently passed to | 410 * The list of excluded paths (folders and files) most recently passed to |
419 * [setRoots]. | 411 * [setRoots]. |
420 */ | 412 */ |
421 List<String> excludedPaths = <String>[]; | 413 List<String> excludedPaths = <String>[]; |
422 | 414 |
423 /** | 415 /** |
424 * The list of included paths (folders and files) most recently passed to | 416 * The list of included paths (folders and files) most recently passed to |
425 * [setRoots]. | 417 * [setRoots]. |
426 */ | 418 */ |
427 List<String> includedPaths = <String>[]; | 419 List<String> includedPaths = <String>[]; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 * Stream subscription we are using to watch each analysis root directory for | 481 * Stream subscription we are using to watch each analysis root directory for |
490 * changes. | 482 * changes. |
491 */ | 483 */ |
492 final Map<Folder, StreamSubscription<WatchEvent>> changeSubscriptions = | 484 final Map<Folder, StreamSubscription<WatchEvent>> changeSubscriptions = |
493 <Folder, StreamSubscription<WatchEvent>>{}; | 485 <Folder, StreamSubscription<WatchEvent>>{}; |
494 | 486 |
495 ContextManagerImpl( | 487 ContextManagerImpl( |
496 this.resourceProvider, | 488 this.resourceProvider, |
497 this.sdkManager, | 489 this.sdkManager, |
498 this.packageResolverProvider, | 490 this.packageResolverProvider, |
499 this.embeddedUriResolverProvider, | |
500 this._packageMapProvider, | 491 this._packageMapProvider, |
501 this.analyzedFilesGlobs, | 492 this.analyzedFilesGlobs, |
502 this._instrumentationService, | 493 this._instrumentationService, |
503 this.defaultContextOptions) { | 494 this.defaultContextOptions) { |
504 absolutePathContext = resourceProvider.absolutePathContext; | 495 absolutePathContext = resourceProvider.absolutePathContext; |
505 pathContext = resourceProvider.pathContext; | 496 pathContext = resourceProvider.pathContext; |
506 } | 497 } |
507 | 498 |
508 @override | 499 @override |
509 Iterable<AnalysisContext> get analysisContexts => folderMap.values; | 500 Iterable<AnalysisContext> get analysisContexts => folderMap.values; |
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1159 /** | 1150 /** |
1160 * Set up a [SourceFactory] that resolves packages as appropriate for the | 1151 * Set up a [SourceFactory] that resolves packages as appropriate for the |
1161 * given [disposition]. | 1152 * given [disposition]. |
1162 */ | 1153 */ |
1163 SourceFactory _createSourceFactory(InternalAnalysisContext context, | 1154 SourceFactory _createSourceFactory(InternalAnalysisContext context, |
1164 AnalysisOptions options, FolderDisposition disposition, Folder folder) { | 1155 AnalysisOptions options, FolderDisposition disposition, Folder folder) { |
1165 List<UriResolver> resolvers = []; | 1156 List<UriResolver> resolvers = []; |
1166 List<UriResolver> packageUriResolvers = | 1157 List<UriResolver> packageUriResolvers = |
1167 disposition.createPackageUriResolvers(resourceProvider); | 1158 disposition.createPackageUriResolvers(resourceProvider); |
1168 | 1159 |
1169 EmbedderUriResolver embedderUriResolver; | 1160 EmbedderUriResolver embedderUriResolver = |
1170 | |
1171 // First check for a resolver provider. | |
1172 if (embeddedUriResolverProvider != null) { | |
1173 embedderUriResolver = embeddedUriResolverProvider(folder); | |
1174 } | |
1175 | |
1176 // If no embedded URI resolver was provided, defer to a locator-backed one. | |
1177 embedderUriResolver ??= | |
1178 new EmbedderUriResolver(context.embedderYamlLocator.embedderYamls); | 1161 new EmbedderUriResolver(context.embedderYamlLocator.embedderYamls); |
1179 if (embedderUriResolver.length == 0) { | 1162 if (embedderUriResolver.length == 0) { |
1180 // The embedder uri resolver has no mappings. Use the default Dart SDK | 1163 // The embedder uri resolver has no mappings. Use the default Dart SDK |
1181 // uri resolver. | 1164 // uri resolver. |
1182 resolvers.add(new DartUriResolver(sdkManager.getSdkForOptions(options))); | 1165 resolvers.add(new DartUriResolver(sdkManager.getSdkForOptions(options))); |
1183 } else { | 1166 } else { |
1184 // The embedder uri resolver has mappings, use it instead of the default | 1167 // The embedder uri resolver has mappings, use it instead of the default |
1185 // Dart SDK uri resolver. | 1168 // Dart SDK uri resolver. |
1186 resolvers.add(embedderUriResolver); | 1169 resolvers.add(embedderUriResolver); |
1187 } | 1170 } |
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1834 ResourceProvider resourceProvider) { | 1817 ResourceProvider resourceProvider) { |
1835 if (packages != null) { | 1818 if (packages != null) { |
1836 // Construct package map for the SdkExtUriResolver. | 1819 // Construct package map for the SdkExtUriResolver. |
1837 Map<String, List<Folder>> packageMap = buildPackageMap(resourceProvider); | 1820 Map<String, List<Folder>> packageMap = buildPackageMap(resourceProvider); |
1838 return <UriResolver>[new SdkExtUriResolver(packageMap)]; | 1821 return <UriResolver>[new SdkExtUriResolver(packageMap)]; |
1839 } else { | 1822 } else { |
1840 return const <UriResolver>[]; | 1823 return const <UriResolver>[]; |
1841 } | 1824 } |
1842 } | 1825 } |
1843 } | 1826 } |
OLD | NEW |