Chromium Code Reviews| Index: pkg/analyzer_cli/lib/src/driver.dart |
| diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart |
| index 49ba67fce572f47b57dabab3b1f3fc7a39944010..581b35b846d0b44ee048ff9f7adc2b887d28810d 100644 |
| --- a/pkg/analyzer_cli/lib/src/driver.dart |
| +++ b/pkg/analyzer_cli/lib/src/driver.dart |
| @@ -33,7 +33,6 @@ import 'package:analyzer/src/generated/source_io.dart'; |
| import 'package:analyzer/src/generated/utilities_general.dart' |
| show PerformanceTag; |
| import 'package:analyzer/src/lint/registry.dart'; |
| -import 'package:analyzer/src/services/lint.dart'; |
| import 'package:analyzer/src/source/source_resource.dart'; |
| import 'package:analyzer/src/summary/idl.dart'; |
| import 'package:analyzer/src/summary/package_bundle_reader.dart'; |
| @@ -368,21 +367,23 @@ class Driver implements CommandLineStarter { |
| CommandLineOptions options, |
| Map<file_system.Folder, YamlMap> embedderMap, |
| _PackageInfo packageInfo, |
| - SummaryDataStore summaryDataStore) { |
| + SummaryDataStore summaryDataStore, |
| + bool includeSdkResolver, |
| + AnalysisOptions analysisOptions) { |
|
Brian Wilkerson
2017/02/04 16:58:38
We should document that analysisOptions can / will
danrubel
2017/02/04 17:08:34
Good point. Done.
|
| // Create a custom package resolver if one has been specified. |
| if (packageResolverProvider != null) { |
| file_system.Folder folder = resourceProvider.getResource('.'); |
| UriResolver resolver = packageResolverProvider(folder); |
| if (resolver != null) { |
| - UriResolver sdkResolver = new DartUriResolver(sdk); |
| - |
| // TODO(brianwilkerson) This doesn't handle sdk extensions. |
| - List<UriResolver> resolvers = <UriResolver>[ |
| - sdkResolver, |
| - new InSummaryUriResolver(resourceProvider, summaryDataStore), |
| - resolver, |
| - new file_system.ResourceUriResolver(resourceProvider) |
| - ]; |
| + List<UriResolver> resolvers = <UriResolver>[]; |
| + if (includeSdkResolver) { |
| + resolvers.add(new DartUriResolver(sdk)); |
| + } |
| + resolvers |
| + .add(new InSummaryUriResolver(resourceProvider, summaryDataStore)); |
| + resolvers.add(resolver); |
| + resolvers.add(new file_system.ResourceUriResolver(resourceProvider)); |
| return new SourceFactory(resolvers); |
| } |
| } |
| @@ -424,16 +425,18 @@ class Driver implements CommandLineStarter { |
| // 'dart:' URIs come first. |
| // Setup embedding. |
| - EmbedderSdk embedderSdk = new EmbedderSdk(resourceProvider, embedderMap); |
| - if (embedderSdk.libraryMap.size() == 0) { |
| - // The embedder uri resolver has no mappings. Use the default Dart SDK |
| - // uri resolver. |
| - resolvers.add(new DartUriResolver(sdk)); |
| - } else { |
| - // The embedder uri resolver has mappings, use it instead of the default |
| - // Dart SDK uri resolver. |
| - embedderSdk.analysisOptions = _context.analysisOptions; |
| - resolvers.add(new DartUriResolver(embedderSdk)); |
| + if (includeSdkResolver) { |
| + EmbedderSdk embedderSdk = new EmbedderSdk(resourceProvider, embedderMap); |
| + if (embedderSdk.libraryMap.size() == 0) { |
| + // The embedder uri resolver has no mappings. Use the default Dart SDK |
| + // uri resolver. |
| + resolvers.add(new DartUriResolver(sdk)); |
| + } else { |
| + // The embedder uri resolver has mappings, use it instead of the default |
| + // Dart SDK uri resolver. |
| + embedderSdk.analysisOptions = analysisOptions; |
| + resolvers.add(new DartUriResolver(embedderSdk)); |
| + } |
| } |
| // Next SdkExts. |
| @@ -509,9 +512,6 @@ class Driver implements CommandLineStarter { |
| _analyzedFileCount += _context.sources.length; |
| } |
| - // Create a context. |
| - _context = AnalysisEngine.instance.createAnalysisContext(); |
| - |
| // Find package info. |
| _PackageInfo packageInfo = _findPackages(options); |
| @@ -534,8 +534,18 @@ class Driver implements CommandLineStarter { |
| SummaryDataStore summaryDataStore = new SummaryDataStore( |
| useSummaries ? options.buildSummaryInputs : <String>[]); |
| + // Create a temporary source factory without an SDK resolver |
| + // for resolving "include:" directives in analysis options files. |
| + SourceFactory tempSourceFactory = _chooseUriResolutionPolicy( |
| + options, embedderMap, packageInfo, summaryDataStore, false, null); |
| + |
| + AnalysisOptionsImpl analysisOptions = |
| + createAnalysisOptions(resourceProvider, tempSourceFactory, options); |
| + analysisOptions.analyzeFunctionBodiesPredicate = |
| + _chooseDietParsingPolicy(options); |
| + |
| // Once options and embedders are processed, setup the SDK. |
| - _setupSdk(options, useSummaries); |
| + _setupSdk(options, useSummaries, analysisOptions); |
| PackageBundle sdkBundle = sdk.getLinkedBundle(); |
| if (sdkBundle != null) { |
| @@ -544,17 +554,12 @@ class Driver implements CommandLineStarter { |
| // Choose a package resolution policy and a diet parsing policy based on |
| // the command-line options. |
| - SourceFactory sourceFactory = _chooseUriResolutionPolicy( |
| - options, embedderMap, packageInfo, summaryDataStore); |
| - |
| - AnalyzeFunctionBodiesPredicate dietParsingPolicy = |
| - _chooseDietParsingPolicy(options); |
| - setAnalysisContextOptions( |
| - resourceProvider, sourceFactory, _context, options, |
| - (AnalysisOptionsImpl contextOptions) { |
| - contextOptions.analyzeFunctionBodiesPredicate = dietParsingPolicy; |
| - }); |
| + SourceFactory sourceFactory = _chooseUriResolutionPolicy(options, |
| + embedderMap, packageInfo, summaryDataStore, true, analysisOptions); |
| + // Create a context. |
| + _context = AnalysisEngine.instance.createAnalysisContext(); |
| + setupAnalysisContext(_context, options, analysisOptions); |
| _context.sourceFactory = sourceFactory; |
| if (options.enableNewAnalysisDriver) { |
| @@ -686,7 +691,8 @@ class Driver implements CommandLineStarter { |
| return errorSeverity; |
| } |
| - void _setupSdk(CommandLineOptions options, bool useSummaries) { |
| + void _setupSdk(CommandLineOptions options, bool useSummaries, |
| + AnalysisOptions analysisOptions) { |
| if (sdk == null) { |
| if (options.dartSdkSummaryPath != null) { |
| sdk = new SummaryBasedDartSdk( |
| @@ -701,8 +707,7 @@ class Driver implements CommandLineStarter { |
| sourcePath = path.normalize(sourcePath); |
| return !path.isWithin(dartSdkPath, sourcePath); |
| }); |
| - |
| - dartSdk.analysisOptions = context.analysisOptions; |
| + dartSdk.analysisOptions = analysisOptions; |
| sdk = dartSdk; |
| } |
| } |
| @@ -725,12 +730,34 @@ class Driver implements CommandLineStarter { |
| return contextOptions; |
| } |
| + static AnalysisOptionsImpl createAnalysisOptions( |
| + file_system.ResourceProvider resourceProvider, |
| + SourceFactory sourceFactory, |
| + CommandLineOptions options) { |
| + // Prepare context options. |
| + AnalysisOptionsImpl analysisOptions = |
| + createAnalysisOptionsForCommandLineOptions(options); |
| + |
| + // Process analysis options file (and notify all interested parties). |
| + _processAnalysisOptions( |
| + resourceProvider, sourceFactory, analysisOptions, options); |
| + return analysisOptions; |
| + } |
| + |
| static void setAnalysisContextOptions( |
| file_system.ResourceProvider resourceProvider, |
| SourceFactory sourceFactory, |
| AnalysisContext context, |
| CommandLineOptions options, |
| void configureContextOptions(AnalysisOptionsImpl contextOptions)) { |
| + AnalysisOptionsImpl analysisOptions = |
| + createAnalysisOptions(resourceProvider, sourceFactory, options); |
| + configureContextOptions(analysisOptions); |
| + setupAnalysisContext(context, options, analysisOptions); |
| + } |
| + |
| + static void setupAnalysisContext(AnalysisContext context, |
| + CommandLineOptions options, AnalysisOptionsImpl analysisOptions) { |
| Map<String, String> definedVariables = options.definedVariables; |
| if (definedVariables.isNotEmpty) { |
| DeclaredVariables declaredVariables = context.declaredVariables; |
| @@ -743,16 +770,8 @@ class Driver implements CommandLineStarter { |
| AnalysisEngine.instance.logger = new StdLogger(); |
| } |
| - // Prepare context options. |
| - AnalysisOptionsImpl contextOptions = |
| - createAnalysisOptionsForCommandLineOptions(options); |
| - configureContextOptions(contextOptions); |
| - |
| // Set context options. |
| - context.analysisOptions = contextOptions; |
| - |
| - // Process analysis options file (and notify all interested parties). |
| - _processAnalysisOptions(resourceProvider, sourceFactory, context, options); |
| + context.analysisOptions = analysisOptions; |
| } |
| /// Perform a deep comparison of two string lists. |
| @@ -810,7 +829,7 @@ class Driver implements CommandLineStarter { |
| static void _processAnalysisOptions( |
| file_system.ResourceProvider resourceProvider, |
| SourceFactory sourceFactory, |
| - AnalysisContext context, |
| + AnalysisOptionsImpl analysisOptions, |
| CommandLineOptions options) { |
| file_system.File file = _getOptionsFile(resourceProvider, options); |
| @@ -822,12 +841,12 @@ class Driver implements CommandLineStarter { |
| // Fill in lint rule defaults in case lints are enabled and rules are |
| // not specified in an options file. |
| if (options.lints && !containsLintRuleEntry(optionMap)) { |
| - setLints(context, Registry.ruleRegistry.defaultRules); |
| + analysisOptions.lintRules = Registry.ruleRegistry.defaultRules; |
| } |
| // Ask engine to further process options. |
| if (optionMap != null) { |
| - applyToAnalysisOptions(context.analysisOptions, optionMap); |
| + applyToAnalysisOptions(analysisOptions, optionMap); |
| } |
| } |
| } |