OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 analyzer.src.context.context_builder; | 5 library analyzer.src.context.context_builder; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'dart:core'; | 8 import 'dart:core'; |
9 | 9 |
10 import 'package:analyzer/context/declared_variables.dart'; | 10 import 'package:analyzer/context/declared_variables.dart'; |
11 import 'package:analyzer/file_system/file_system.dart'; | 11 import 'package:analyzer/file_system/file_system.dart'; |
12 import 'package:analyzer/plugin/options.dart'; | |
13 import 'package:analyzer/plugin/resolver_provider.dart'; | 12 import 'package:analyzer/plugin/resolver_provider.dart'; |
14 import 'package:analyzer/source/analysis_options_provider.dart'; | 13 import 'package:analyzer/source/analysis_options_provider.dart'; |
15 import 'package:analyzer/source/package_map_resolver.dart'; | 14 import 'package:analyzer/source/package_map_resolver.dart'; |
16 import 'package:analyzer/src/dart/sdk/sdk.dart'; | 15 import 'package:analyzer/src/dart/sdk/sdk.dart'; |
17 import 'package:analyzer/src/generated/bazel.dart'; | 16 import 'package:analyzer/src/generated/bazel.dart'; |
18 import 'package:analyzer/src/generated/engine.dart'; | 17 import 'package:analyzer/src/generated/engine.dart'; |
19 import 'package:analyzer/src/generated/sdk.dart'; | 18 import 'package:analyzer/src/generated/sdk.dart'; |
20 import 'package:analyzer/src/generated/source.dart'; | 19 import 'package:analyzer/src/generated/source.dart'; |
21 import 'package:analyzer/src/summary/package_bundle_reader.dart'; | 20 import 'package:analyzer/src/summary/package_bundle_reader.dart'; |
22 import 'package:analyzer/src/summary/pub_summary.dart'; | 21 import 'package:analyzer/src/summary/pub_summary.dart'; |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 | 94 |
96 /** | 95 /** |
97 * Return an analysis context that is configured correctly to analyze code in | 96 * Return an analysis context that is configured correctly to analyze code in |
98 * the directory with the given [path]. | 97 * the directory with the given [path]. |
99 * | 98 * |
100 * *Note:* This method is not yet fully implemented and should not be used. | 99 * *Note:* This method is not yet fully implemented and should not be used. |
101 */ | 100 */ |
102 AnalysisContext buildContext(String path) { | 101 AnalysisContext buildContext(String path) { |
103 InternalAnalysisContext context = | 102 InternalAnalysisContext context = |
104 AnalysisEngine.instance.createAnalysisContext(); | 103 AnalysisEngine.instance.createAnalysisContext(); |
105 AnalysisOptions options = getAnalysisOptions(context, path); | 104 AnalysisOptions options = getAnalysisOptions(path); |
106 context.contentCache = contentCache; | 105 context.contentCache = contentCache; |
107 context.sourceFactory = createSourceFactory(path, options); | 106 context.sourceFactory = createSourceFactory(path, options); |
108 context.analysisOptions = options; | 107 context.analysisOptions = options; |
109 context.name = path; | 108 context.name = path; |
110 //_processAnalysisOptions(context, optionMap); | 109 //_processAnalysisOptions(context, optionMap); |
111 declareVariables(context); | 110 declareVariables(context); |
112 configureSummaries(context); | 111 configureSummaries(context); |
113 return context; | 112 return context; |
114 } | 113 } |
115 | 114 |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 return sdkManager.getSdk(description, () { | 317 return sdkManager.getSdk(description, () { |
319 FolderBasedDartSdk sdk = new FolderBasedDartSdk(resourceProvider, | 318 FolderBasedDartSdk sdk = new FolderBasedDartSdk(resourceProvider, |
320 resourceProvider.getFolder(sdkPath), analysisOptions.strongMode); | 319 resourceProvider.getFolder(sdkPath), analysisOptions.strongMode); |
321 sdk.analysisOptions = analysisOptions; | 320 sdk.analysisOptions = analysisOptions; |
322 sdk.useSummary = sdkManager.canUseSummaries; | 321 sdk.useSummary = sdkManager.canUseSummaries; |
323 return sdk; | 322 return sdk; |
324 }); | 323 }); |
325 } | 324 } |
326 | 325 |
327 /** | 326 /** |
328 * Return the analysis options that should be used when the given [context] is | 327 * Return the analysis options that should be used to analyze code in the |
329 * used to analyze code in the directory with the given [path]. | 328 * directory with the given [path]. |
330 */ | 329 */ |
331 AnalysisOptions getAnalysisOptions(AnalysisContext context, String path) { | 330 AnalysisOptions getAnalysisOptions(String path) { |
332 AnalysisOptionsImpl options = createDefaultOptions(); | 331 AnalysisOptionsImpl options = createDefaultOptions(); |
333 File optionsFile = getOptionsFile(path); | 332 File optionsFile = getOptionsFile(path); |
334 if (optionsFile != null) { | 333 if (optionsFile != null) { |
335 List<OptionsProcessor> optionsProcessors = | |
336 AnalysisEngine.instance.optionsPlugin.optionsProcessors; | |
337 // TODO(danrubel) restructure so that we don't recalculate the package map | 334 // TODO(danrubel) restructure so that we don't recalculate the package map |
338 // more than once per path. | 335 // more than once per path. |
339 Packages packages = createPackageMap(path); | 336 Packages packages = createPackageMap(path); |
340 Map<String, List<Folder>> packageMap = convertPackagesToMap(packages); | 337 Map<String, List<Folder>> packageMap = convertPackagesToMap(packages); |
341 List<UriResolver> resolvers = <UriResolver>[ | 338 List<UriResolver> resolvers = <UriResolver>[ |
342 new ResourceUriResolver(resourceProvider), | 339 new ResourceUriResolver(resourceProvider), |
343 new PackageMapUriResolver(resourceProvider, packageMap), | 340 new PackageMapUriResolver(resourceProvider, packageMap), |
344 ]; | 341 ]; |
345 SourceFactory sourceFactory = | 342 SourceFactory sourceFactory = |
346 new SourceFactory(resolvers, packages, resourceProvider); | 343 new SourceFactory(resolvers, packages, resourceProvider); |
347 try { | 344 try { |
348 Map<String, YamlNode> optionMap = | 345 Map<String, YamlNode> optionMap = |
349 new AnalysisOptionsProvider(sourceFactory) | 346 new AnalysisOptionsProvider(sourceFactory) |
350 .getOptionsFromFile(optionsFile); | 347 .getOptionsFromFile(optionsFile); |
351 optionsProcessors.forEach( | |
352 (OptionsProcessor p) => p.optionsProcessed(context, optionMap)); | |
353 applyToAnalysisOptions(options, optionMap); | 348 applyToAnalysisOptions(options, optionMap); |
354 } on Exception catch (exception) { | 349 } catch (_) { |
355 optionsProcessors.forEach((OptionsProcessor p) => p.onError(exception)); | 350 // Ignore exceptions thrown while trying to load the options file. |
356 } | 351 } |
357 } | 352 } |
358 return options; | 353 return options; |
359 } | 354 } |
360 | 355 |
361 /** | 356 /** |
362 * Return the analysis options file that should be used when analyzing code in | 357 * Return the analysis options file that should be used when analyzing code in |
363 * the directory with the given [path]. | 358 * the directory with the given [path]. |
364 */ | 359 */ |
365 File getOptionsFile(String path) { | 360 File getOptionsFile(String path) { |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
624 String _readEmbedderYaml(Folder libDir) { | 619 String _readEmbedderYaml(Folder libDir) { |
625 File file = libDir.getChild(EMBEDDER_FILE_NAME); | 620 File file = libDir.getChild(EMBEDDER_FILE_NAME); |
626 try { | 621 try { |
627 return file.readAsStringSync(); | 622 return file.readAsStringSync(); |
628 } on FileSystemException { | 623 } on FileSystemException { |
629 // File can't be read. | 624 // File can't be read. |
630 return null; | 625 return null; |
631 } | 626 } |
632 } | 627 } |
633 } | 628 } |
OLD | NEW |