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/options.dart'; | 15 import 'package:analyzer/plugin/options.dart'; |
16 import 'package:analyzer/plugin/resolver_provider.dart'; | 16 import 'package:analyzer/plugin/resolver_provider.dart'; |
17 import 'package:analyzer/source/analysis_options_provider.dart'; | 17 import 'package:analyzer/source/analysis_options_provider.dart'; |
18 import 'package:analyzer/source/config.dart'; | 18 import 'package:analyzer/source/config.dart'; |
19 import 'package:analyzer/source/embedder.dart'; | |
20 import 'package:analyzer/source/package_map_provider.dart'; | 19 import 'package:analyzer/source/package_map_provider.dart'; |
21 import 'package:analyzer/source/package_map_resolver.dart'; | 20 import 'package:analyzer/source/package_map_resolver.dart'; |
22 import 'package:analyzer/source/path_filter.dart'; | 21 import 'package:analyzer/source/path_filter.dart'; |
23 import 'package:analyzer/source/pub_package_map_provider.dart'; | 22 import 'package:analyzer/source/pub_package_map_provider.dart'; |
24 import 'package:analyzer/source/sdk_ext.dart'; | 23 import 'package:analyzer/source/sdk_ext.dart'; |
| 24 import 'package:analyzer/src/context/builder.dart'; |
25 import 'package:analyzer/src/context/context.dart' as context; | 25 import 'package:analyzer/src/context/context.dart' as context; |
26 import 'package:analyzer/src/context/source.dart'; | 26 import 'package:analyzer/src/context/source.dart'; |
| 27 import 'package:analyzer/src/dart/sdk/sdk.dart'; |
27 import 'package:analyzer/src/generated/engine.dart'; | 28 import 'package:analyzer/src/generated/engine.dart'; |
28 import 'package:analyzer/src/generated/java_engine.dart'; | 29 import 'package:analyzer/src/generated/java_engine.dart'; |
29 import 'package:analyzer/src/generated/java_io.dart'; | 30 import 'package:analyzer/src/generated/java_io.dart'; |
30 import 'package:analyzer/src/generated/sdk.dart'; | 31 import 'package:analyzer/src/generated/sdk.dart'; |
31 import 'package:analyzer/src/generated/source.dart'; | 32 import 'package:analyzer/src/generated/source.dart'; |
32 import 'package:analyzer/src/generated/source_io.dart'; | 33 import 'package:analyzer/src/generated/source_io.dart'; |
33 import 'package:analyzer/src/task/options.dart'; | 34 import 'package:analyzer/src/task/options.dart'; |
34 import 'package:analyzer/src/util/absolute_path.dart'; | 35 import 'package:analyzer/src/util/absolute_path.dart'; |
35 import 'package:analyzer/src/util/glob.dart'; | 36 import 'package:analyzer/src/util/glob.dart'; |
36 import 'package:analyzer/src/util/yaml.dart'; | 37 import 'package:analyzer/src/util/yaml.dart'; |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 * File name of pubspec files. | 385 * File name of pubspec files. |
385 */ | 386 */ |
386 static const String PUBSPEC_NAME = 'pubspec.yaml'; | 387 static const String PUBSPEC_NAME = 'pubspec.yaml'; |
387 | 388 |
388 /** | 389 /** |
389 * File name of package spec files. | 390 * File name of package spec files. |
390 */ | 391 */ |
391 static const String PACKAGE_SPEC_NAME = '.packages'; | 392 static const String PACKAGE_SPEC_NAME = '.packages'; |
392 | 393 |
393 /** | 394 /** |
| 395 * The name of the key in an embedder file whose value is the list of |
| 396 * libraries in the SDK. |
| 397 * TODO(brianwilkerson) This is also defined in sdk.dart. |
| 398 */ |
| 399 static const String _EMBEDDED_LIB_MAP_KEY = 'embedded_libs'; |
| 400 |
| 401 /** |
394 * The [ResourceProvider] using which paths are converted into [Resource]s. | 402 * The [ResourceProvider] using which paths are converted into [Resource]s. |
395 */ | 403 */ |
396 final ResourceProvider resourceProvider; | 404 final ResourceProvider resourceProvider; |
397 | 405 |
398 /** | 406 /** |
399 * The manager used to access the SDK that should be associated with a | 407 * The manager used to access the SDK that should be associated with a |
400 * particular context. | 408 * particular context. |
401 */ | 409 */ |
402 final DartSdkManager sdkManager; | 410 final DartSdkManager sdkManager; |
403 | 411 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 | 516 |
509 @override | 517 @override |
510 List<AnalysisContext> contextsInAnalysisRoot(Folder analysisRoot) { | 518 List<AnalysisContext> contextsInAnalysisRoot(Folder analysisRoot) { |
511 List<AnalysisContext> contexts = <AnalysisContext>[]; | 519 List<AnalysisContext> contexts = <AnalysisContext>[]; |
512 ContextInfo innermostContainingInfo = | 520 ContextInfo innermostContainingInfo = |
513 _getInnermostContextInfoFor(analysisRoot.path); | 521 _getInnermostContextInfoFor(analysisRoot.path); |
514 void addContextAndDescendants(ContextInfo info) { | 522 void addContextAndDescendants(ContextInfo info) { |
515 contexts.add(info.context); | 523 contexts.add(info.context); |
516 info.children.forEach(addContextAndDescendants); | 524 info.children.forEach(addContextAndDescendants); |
517 } | 525 } |
| 526 |
518 if (innermostContainingInfo != null) { | 527 if (innermostContainingInfo != null) { |
519 if (analysisRoot == innermostContainingInfo.folder) { | 528 if (analysisRoot == innermostContainingInfo.folder) { |
520 addContextAndDescendants(innermostContainingInfo); | 529 addContextAndDescendants(innermostContainingInfo); |
521 } else { | 530 } else { |
522 for (ContextInfo info in innermostContainingInfo.children) { | 531 for (ContextInfo info in innermostContainingInfo.children) { |
523 if (analysisRoot.isOrContains(info.folder.path)) { | 532 if (analysisRoot.isOrContains(info.folder.path)) { |
524 addContextAndDescendants(info); | 533 addContextAndDescendants(info); |
525 } | 534 } |
526 } | 535 } |
527 } | 536 } |
528 } | 537 } |
529 return contexts; | 538 return contexts; |
530 } | 539 } |
531 | 540 |
| 541 /** |
| 542 * Check if this map defines embedded libraries. |
| 543 */ |
| 544 bool definesEmbeddedLibs(Map map) => map[_EMBEDDED_LIB_MAP_KEY] != null; |
| 545 |
532 @override | 546 @override |
533 AnalysisContext getContextFor(String path) { | 547 AnalysisContext getContextFor(String path) { |
534 return _getInnermostContextInfoFor(path)?.context; | 548 return _getInnermostContextInfoFor(path)?.context; |
535 } | 549 } |
536 | 550 |
537 /** | 551 /** |
538 * For testing: get the [ContextInfo] object for the given [folder], if any. | 552 * For testing: get the [ContextInfo] object for the given [folder], if any. |
539 */ | 553 */ |
540 ContextInfo getContextInfoFor(Folder folder) { | 554 ContextInfo getContextInfoFor(Folder folder) { |
541 ContextInfo info = _getInnermostContextInfoFor(folder.path); | 555 ContextInfo info = _getInnermostContextInfoFor(folder.path); |
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
906 // Check for library embedders. | 920 // Check for library embedders. |
907 if (embedderYamls.values.any(definesEmbeddedLibs)) { | 921 if (embedderYamls.values.any(definesEmbeddedLibs)) { |
908 // If there is no embedded URI resolver, a new source factory needs to | 922 // If there is no embedded URI resolver, a new source factory needs to |
909 // be recreated. | 923 // be recreated. |
910 if (sourceFactory is SourceFactoryImpl) { | 924 if (sourceFactory is SourceFactoryImpl) { |
911 // Get all but the dart: Uri resolver. | 925 // Get all but the dart: Uri resolver. |
912 List<UriResolver> resolvers = sourceFactory.resolvers | 926 List<UriResolver> resolvers = sourceFactory.resolvers |
913 .where((r) => r is! DartUriResolver) | 927 .where((r) => r is! DartUriResolver) |
914 .toList(); | 928 .toList(); |
915 // Add an embedded URI resolver in its place. | 929 // Add an embedded URI resolver in its place. |
916 resolvers.add(new DartUriResolver(new EmbedderSdk(embedderYamls))); | 930 resolvers.add(new DartUriResolver( |
| 931 new EmbedderSdk(resourceProvider, embedderYamls))); |
917 | 932 |
918 // Set a new source factory. | 933 // Set a new source factory. |
919 SourceFactoryImpl newFactory = sourceFactory.clone(); | 934 SourceFactoryImpl newFactory = sourceFactory.clone(); |
920 newFactory.resolvers.clear(); | 935 newFactory.resolvers.clear(); |
921 newFactory.resolvers.addAll(resolvers); | 936 newFactory.resolvers.addAll(resolvers); |
922 info.context.sourceFactory = newFactory; | 937 info.context.sourceFactory = newFactory; |
923 return; | 938 return; |
924 } | 939 } |
925 } | 940 } |
926 | 941 |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1151 */ | 1166 */ |
1152 SourceFactory _createSourceFactory(InternalAnalysisContext context, | 1167 SourceFactory _createSourceFactory(InternalAnalysisContext context, |
1153 AnalysisOptions options, FolderDisposition disposition, Folder folder) { | 1168 AnalysisOptions options, FolderDisposition disposition, Folder folder) { |
1154 List<UriResolver> resolvers = []; | 1169 List<UriResolver> resolvers = []; |
1155 List<UriResolver> packageUriResolvers = | 1170 List<UriResolver> packageUriResolvers = |
1156 disposition.createPackageUriResolvers(resourceProvider); | 1171 disposition.createPackageUriResolvers(resourceProvider); |
1157 | 1172 |
1158 EmbedderYamlLocator locator = | 1173 EmbedderYamlLocator locator = |
1159 disposition.getEmbedderLocator(resourceProvider); | 1174 disposition.getEmbedderLocator(resourceProvider); |
1160 Map<Folder, YamlMap> embedderYamls = locator.embedderYamls; | 1175 Map<Folder, YamlMap> embedderYamls = locator.embedderYamls; |
1161 EmbedderSdk embedderSdk = new EmbedderSdk(embedderYamls); | 1176 EmbedderSdk embedderSdk = new EmbedderSdk(resourceProvider, embedderYamls); |
1162 if (embedderSdk.libraryMap.size() == 0) { | 1177 if (embedderSdk.libraryMap.size() == 0) { |
1163 // There was no embedder file, or the file was empty, so used the default | 1178 // There was no embedder file, or the file was empty, so used the default |
1164 // SDK. | 1179 // SDK. |
1165 resolvers.add(new DartUriResolver(sdkManager.getSdkForOptions(options))); | 1180 resolvers.add(new DartUriResolver(sdkManager.getSdkForOptions(options))); |
1166 } else { | 1181 } else { |
1167 // The embedder file defines an alternate SDK, so use it. | 1182 // The embedder file defines an alternate SDK, so use it. |
1168 List<String> paths = <String>[]; | 1183 List<String> paths = <String>[]; |
1169 for (Folder folder in embedderYamls.keys) { | 1184 for (Folder folder in embedderYamls.keys) { |
1170 paths.add(folder | 1185 paths.add(folder |
1171 .getChildAssumingFile(EmbedderYamlLocator.EMBEDDER_FILE_NAME) | 1186 .getChildAssumingFile(EmbedderYamlLocator.EMBEDDER_FILE_NAME) |
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1847 | 1862 |
1848 @override | 1863 @override |
1849 EmbedderYamlLocator getEmbedderLocator(ResourceProvider resourceProvider) { | 1864 EmbedderYamlLocator getEmbedderLocator(ResourceProvider resourceProvider) { |
1850 if (_embedderLocator == null) { | 1865 if (_embedderLocator == null) { |
1851 _embedderLocator = | 1866 _embedderLocator = |
1852 new EmbedderYamlLocator(buildPackageMap(resourceProvider)); | 1867 new EmbedderYamlLocator(buildPackageMap(resourceProvider)); |
1853 } | 1868 } |
1854 return _embedderLocator; | 1869 return _embedderLocator; |
1855 } | 1870 } |
1856 } | 1871 } |
OLD | NEW |