| 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..e91d07ef262d6373d7af382528fca49a2114cbd7 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';
|
| @@ -364,25 +363,30 @@ class Driver implements CommandLineStarter {
|
| /// Decide on the appropriate method for resolving URIs based on the given
|
| /// [options] and [customUrlMappings] settings, and return a
|
| /// [SourceFactory] that has been configured accordingly.
|
| + /// When [includeSdkResolver] is `false`, return a temporary [SourceFactory]
|
| + /// for the purpose of resolved analysis options file `include:` directives.
|
| + /// In this situation, [analysisOptions] is ignored and can be `null`.
|
| SourceFactory _chooseUriResolutionPolicy(
|
| CommandLineOptions options,
|
| Map<file_system.Folder, YamlMap> embedderMap,
|
| _PackageInfo packageInfo,
|
| - SummaryDataStore summaryDataStore) {
|
| + SummaryDataStore summaryDataStore,
|
| + bool includeSdkResolver,
|
| + AnalysisOptions analysisOptions) {
|
| // 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 +428,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 +515,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 +537,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 +557,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 +694,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 +710,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 +733,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 +773,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 +832,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 +844,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);
|
| }
|
| }
|
| }
|
|
|