Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(951)

Side by Side Diff: pkg/analysis_server/lib/src/context_manager.dart

Issue 2514533002: update ContextManager to support analysis option include directive (Closed)
Patch Set: merge Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/test/context_manager_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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';
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 * to the standard URI resolver. 470 * to the standard URI resolver.
471 */ 471 */
472 final ResolverProvider packageResolverProvider; 472 final ResolverProvider packageResolverProvider;
473 473
474 /** 474 /**
475 * Provider which is used to determine the mapping from package name to 475 * Provider which is used to determine the mapping from package name to
476 * package folder. 476 * package folder.
477 */ 477 */
478 final PubPackageMapProvider _packageMapProvider; 478 final PubPackageMapProvider _packageMapProvider;
479 479
480 /// Provider of analysis options.
481 AnalysisOptionsProvider analysisOptionsProvider =
482 new AnalysisOptionsProvider();
483
484 /** 480 /**
485 * A list of the globs used to determine which files should be analyzed. 481 * A list of the globs used to determine which files should be analyzed.
486 */ 482 */
487 final List<Glob> analyzedFilesGlobs; 483 final List<Glob> analyzedFilesGlobs;
488 484
489 /** 485 /**
490 * The default options used to create new analysis contexts. 486 * The default options used to create new analysis contexts.
491 */ 487 */
492 final AnalysisOptionsImpl defaultContextOptions; 488 final AnalysisOptionsImpl defaultContextOptions;
493 489
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 setIgnorePatternsForContext(info, excludeList); 674 setIgnorePatternsForContext(info, excludeList);
679 } 675 }
680 } 676 }
681 } 677 }
682 678
683 /** 679 /**
684 * Return the options from the analysis options file in the given [folder] 680 * Return the options from the analysis options file in the given [folder]
685 * if exists, or in one of the parent folders, or `null` if no analysis 681 * if exists, or in one of the parent folders, or `null` if no analysis
686 * options file is found or if the contents of the file are not valid YAML. 682 * options file is found or if the contents of the file are not valid YAML.
687 */ 683 */
688 Map<String, Object> readOptions(Folder folder) { 684 Map<String, Object> readOptions(Folder folder, Packages packages) {
689 try { 685 try {
690 return analysisOptionsProvider.getOptions(folder, crawlUp: true); 686 Map<String, List<Folder>> packageMap =
687 new ContextBuilder(resourceProvider, null, null)
688 .convertPackagesToMap(packages);
689 List<UriResolver> resolvers = <UriResolver>[
690 new ResourceUriResolver(resourceProvider),
691 new PackageMapUriResolver(resourceProvider, packageMap),
692 ];
693 SourceFactory sourceFactory =
694 new SourceFactory(resolvers, packages, resourceProvider);
695 return new AnalysisOptionsProvider(sourceFactory)
696 .getOptions(folder, crawlUp: true);
691 } catch (_) { 697 } catch (_) {
692 // Parse errors are reported by GenerateOptionsErrorsTask. 698 // Parse errors are reported by GenerateOptionsErrorsTask.
693 } 699 }
694 return null; 700 return null;
695 } 701 }
696 702
697 @override 703 @override
698 void refresh(List<Resource> roots) { 704 void refresh(List<Resource> roots) {
699 // Destroy old contexts 705 // Destroy old contexts
700 List<ContextInfo> contextInfos = rootInfo.descendants.toList(); 706 List<ContextInfo> contextInfos = rootInfo.descendants.toList();
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 _addSourceFiles(changeSet, child, info); 915 _addSourceFiles(changeSet, child, info);
910 } 916 }
911 } 917 }
912 } 918 }
913 919
914 void _checkForAnalysisOptionsUpdate( 920 void _checkForAnalysisOptionsUpdate(
915 String path, ContextInfo info, ChangeType changeType) { 921 String path, ContextInfo info, ChangeType changeType) {
916 if (AnalysisEngine.isAnalysisOptionsFileName(path, pathContext)) { 922 if (AnalysisEngine.isAnalysisOptionsFileName(path, pathContext)) {
917 var analysisContext = info.context; 923 var analysisContext = info.context;
918 if (analysisContext is context.AnalysisContextImpl) { 924 if (analysisContext is context.AnalysisContextImpl) {
919 Map<String, Object> options = readOptions(info.folder); 925 Map<String, Object> options =
926 readOptions(info.folder, info.disposition.packages);
920 processOptionsForContext(info, options, 927 processOptionsForContext(info, options,
921 optionsRemoved: changeType == ChangeType.REMOVE); 928 optionsRemoved: changeType == ChangeType.REMOVE);
922 analysisContext.sourceFactory = _createSourceFactory( 929 analysisContext.sourceFactory = _createSourceFactory(
923 analysisContext, analysisContext.analysisOptions, info.folder); 930 analysisContext, analysisContext.analysisOptions, info.folder);
924 callbacks.applyChangesToContext(info.folder, new ChangeSet()); 931 callbacks.applyChangesToContext(info.folder, new ChangeSet());
925 } 932 }
926 } 933 }
927 } 934 }
928 935
929 void _checkForPackagespecUpdate( 936 void _checkForPackagespecUpdate(
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 * [parent] and using [packagespecFile] to resolve package URI's. 1069 * [parent] and using [packagespecFile] to resolve package URI's.
1063 */ 1070 */
1064 ContextInfo _createContext( 1071 ContextInfo _createContext(
1065 ContextInfo parent, Folder folder, File packagespecFile) { 1072 ContextInfo parent, Folder folder, File packagespecFile) {
1066 List<String> dependencies = <String>[]; 1073 List<String> dependencies = <String>[];
1067 FolderDisposition disposition = 1074 FolderDisposition disposition =
1068 _computeFolderDisposition(folder, dependencies.add, packagespecFile); 1075 _computeFolderDisposition(folder, dependencies.add, packagespecFile);
1069 ContextInfo info = new ContextInfo(this, parent, folder, packagespecFile, 1076 ContextInfo info = new ContextInfo(this, parent, folder, packagespecFile,
1070 normalizedPackageRoots[folder.path], disposition); 1077 normalizedPackageRoots[folder.path], disposition);
1071 1078
1072 Map<String, Object> optionMap = readOptions(info.folder); 1079 Map<String, Object> optionMap =
1080 readOptions(info.folder, disposition.packages);
1073 AnalysisOptions options = 1081 AnalysisOptions options =
1074 new AnalysisOptionsImpl.from(defaultContextOptions); 1082 new AnalysisOptionsImpl.from(defaultContextOptions);
1075 applyToAnalysisOptions(options, optionMap); 1083 applyToAnalysisOptions(options, optionMap);
1076 1084
1077 info.setDependencies(dependencies); 1085 info.setDependencies(dependencies);
1078 if (enableNewAnalysisDriver) { 1086 if (enableNewAnalysisDriver) {
1079 info.analysisDriver = callbacks.addAnalysisDriver(folder, options); 1087 info.analysisDriver = callbacks.addAnalysisDriver(folder, options);
1080 } else { 1088 } else {
1081 info.context = callbacks.addContext(folder, options); 1089 info.context = callbacks.addContext(folder, options);
1082 _folderMap[folder] = info.context; 1090 _folderMap[folder] = info.context;
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after
1883 } 1891 }
1884 return _embedderLocator; 1892 return _embedderLocator;
1885 } 1893 }
1886 1894
1887 @override 1895 @override
1888 SdkExtensionFinder getSdkExtensionFinder(ResourceProvider resourceProvider) { 1896 SdkExtensionFinder getSdkExtensionFinder(ResourceProvider resourceProvider) {
1889 return _sdkExtensionFinder ??= 1897 return _sdkExtensionFinder ??=
1890 new SdkExtensionFinder(buildPackageMap(resourceProvider)); 1898 new SdkExtensionFinder(buildPackageMap(resourceProvider));
1891 } 1899 }
1892 } 1900 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/test/context_manager_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698