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

Unified Diff: pkg/analyzer_cli/lib/src/driver.dart

Issue 2678633002: fix dartanalyzer sdk setup (Closed)
Patch Set: merge Created 3 years, 10 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analyzer_cli/test/data/strong_sdk/main.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
}
}
« no previous file with comments | « no previous file | pkg/analyzer_cli/test/data/strong_sdk/main.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698