| Index: pkg/analysis_server/lib/src/context_manager.dart
|
| diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
|
| index 2f115f671677a67e3585cfa789dea89e79d93357..d7a903ad387ebc3c20fdd4e92a2bff8346d3df3b 100644
|
| --- a/pkg/analysis_server/lib/src/context_manager.dart
|
| +++ b/pkg/analysis_server/lib/src/context_manager.dart
|
| @@ -750,30 +750,6 @@ class ContextManagerImpl implements ContextManager {
|
| }
|
| }
|
|
|
| - /**
|
| - * Return the options from the analysis options file in the given [folder]
|
| - * if exists, or in one of the parent folders, or `null` if no analysis
|
| - * options file is found or if the contents of the file are not valid YAML.
|
| - */
|
| - Map<String, Object> readOptions(Folder folder, Packages packages) {
|
| - try {
|
| - Map<String, List<Folder>> packageMap =
|
| - new ContextBuilder(resourceProvider, null, null)
|
| - .convertPackagesToMap(packages);
|
| - List<UriResolver> resolvers = <UriResolver>[
|
| - new ResourceUriResolver(resourceProvider),
|
| - new PackageMapUriResolver(resourceProvider, packageMap),
|
| - ];
|
| - SourceFactory sourceFactory =
|
| - new SourceFactory(resolvers, packages, resourceProvider);
|
| - return new AnalysisOptionsProvider(sourceFactory)
|
| - .getOptions(folder, crawlUp: true);
|
| - } catch (_) {
|
| - // Parse errors are reported by GenerateOptionsErrorsTask.
|
| - }
|
| - return null;
|
| - }
|
| -
|
| @override
|
| void refresh(List<Resource> roots) {
|
| // Destroy old contexts
|
| @@ -1119,6 +1095,23 @@ class ContextManagerImpl implements ContextManager {
|
| }
|
|
|
| /**
|
| + * Create an object that can be used to find and read the analysis options
|
| + * file for code being analyzed using the given [packages].
|
| + */
|
| + AnalysisOptionsProvider _createAnalysisOptionsProvider(Packages packages) {
|
| + Map<String, List<Folder>> packageMap =
|
| + new ContextBuilder(resourceProvider, null, null)
|
| + .convertPackagesToMap(packages);
|
| + List<UriResolver> resolvers = <UriResolver>[
|
| + new ResourceUriResolver(resourceProvider),
|
| + new PackageMapUriResolver(resourceProvider, packageMap),
|
| + ];
|
| + SourceFactory sourceFactory =
|
| + new SourceFactory(resolvers, packages, resourceProvider);
|
| + return new AnalysisOptionsProvider(sourceFactory);
|
| + }
|
| +
|
| + /**
|
| * Create a new empty context associated with [folder], having parent
|
| * [parent] and using [packagesFile] to resolve package URI's.
|
| */
|
| @@ -1130,8 +1123,18 @@ class ContextManagerImpl implements ContextManager {
|
| ContextInfo info = new ContextInfo(this, parent, folder, packagesFile,
|
| normalizedPackageRoots[folder.path], disposition);
|
|
|
| - Map<String, Object> optionMap =
|
| - readOptions(info.folder, disposition.packages);
|
| + File optionsFile = null;
|
| + Map<String, Object> optionMap = null;
|
| + try {
|
| + AnalysisOptionsProvider provider =
|
| + _createAnalysisOptionsProvider(disposition.packages);
|
| + optionsFile = provider.getOptionsFile(info.folder, crawlUp: true);
|
| + if (optionsFile != null) {
|
| + optionMap = provider.getOptionsFromFile(optionsFile);
|
| + }
|
| + } catch (_) {
|
| + // Parse errors are reported elsewhere.
|
| + }
|
| AnalysisOptions options =
|
| new AnalysisOptionsImpl.from(defaultContextOptions);
|
| applyToAnalysisOptions(options, optionMap);
|
| @@ -1143,8 +1146,13 @@ class ContextManagerImpl implements ContextManager {
|
| pathContext.isWithin(includedPath, excludedPath))
|
| .toList();
|
| processOptionsForDriver(info, options, optionMap);
|
| - info.analysisDriver = callbacks.addAnalysisDriver(
|
| - folder, new ContextRoot(folder.path, containedExcludedPaths), options);
|
| + ContextRoot contextRoot =
|
| + new ContextRoot(folder.path, containedExcludedPaths);
|
| + if (optionsFile != null) {
|
| + contextRoot.optionsFilePath = optionsFile.path;
|
| + }
|
| + info.analysisDriver =
|
| + callbacks.addAnalysisDriver(folder, contextRoot, options);
|
| return info;
|
| }
|
|
|
|
|