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

Unified Diff: pkg/analysis_server/lib/src/context_manager.dart

Issue 1445363002: Embedded options discovery (#24943). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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/analysis_server/test/context_manager_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 767875ba42fafd915ecd96970444a459b825f228..aa34cf96f7e30e336bf06dde429e721ca1055a99 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -29,6 +29,7 @@ import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/source_io.dart';
import 'package:analyzer/src/task/options.dart';
import 'package:analyzer/src/util/absolute_path.dart';
+import 'package:analyzer/src/util/yaml.dart';
import 'package:package_config/packages.dart';
import 'package:package_config/packages_file.dart' as pkgfile show parse;
import 'package:package_config/src/packages_impl.dart' show MapPackages;
@@ -500,15 +501,28 @@ class ContextManagerImpl implements ContextManager {
}
});
- // In case options files are removed, revert to default options.
+ // In case options files are removed, revert to defaults.
if (optionsRemoved) {
+ // Start with defaults.
info.context.analysisOptions = new AnalysisOptionsImpl();
+
+ // Apply inherited options.
+ YamlMap embeddedOptions = _getEmbeddedOptions(info.context);
+ if (embeddedOptions != null) {
+ configureContextOptions(info.context, embeddedOptions);
+ }
return;
}
+ // Check for embedded options.
+ YamlMap embeddedOptions = _getEmbeddedOptions(info.context);
+ if (embeddedOptions != null) {
+ options = new Merger().merge(embeddedOptions, options);
+ }
+
// Analysis options are processed 'in-line'.
var analyzer = options[AnalyzerOptions.analyzer];
- if (analyzer is! YamlMap) {
+ if (analyzer is! Map) {
// No options for analyzer.
return;
}
@@ -1008,6 +1022,20 @@ class ContextManagerImpl implements ContextManager {
return packageSpec;
}
+ /// Get analysis options associated with an `_embedder.yaml`. If there is
+ /// more than one `_embedder.yaml` associated with the given context, `null`
+ /// is returned.
+ YamlMap _getEmbeddedOptions(AnalysisContext context) {
+ if (context is InternalAnalysisContext) {
+ EmbedderYamlLocator locator = context.embedderYamlLocator;
+ Iterable<YamlMap> maps = locator.embedderYamls.values;
+ if (maps.length == 1) {
+ return maps.first;
+ }
+ }
+ return null;
+ }
+
/**
* Return the [ContextInfo] for the "innermost" context whose associated
* folder is or contains the given path. ("innermost" refers to the nesting
@@ -1454,6 +1482,11 @@ class PackagesFileDisposition extends FolderDisposition {
@override
final Packages packages;
+ PackagesFileDisposition(this.packages) {}
+
+ @override
+ String get packageRoot => null;
+
Map<String, List<Folder>> buildPackageMap(ResourceProvider resourceProvider) {
Map<String, List<Folder>> packageMap = <String, List<Folder>>{};
if (packages == null) {
@@ -1468,18 +1501,12 @@ class PackagesFileDisposition extends FolderDisposition {
return packageMap;
}
- PackagesFileDisposition(this.packages) {}
-
- @override
- String get packageRoot => null;
-
@override
Iterable<UriResolver> createPackageUriResolvers(
ResourceProvider resourceProvider) {
if (packages != null) {
// Construct package map for the SdkExtUriResolver.
- Map<String, List<Folder>> packageMap =
- buildPackageMap(resourceProvider);
+ Map<String, List<Folder>> packageMap = buildPackageMap(resourceProvider);
return <UriResolver>[new SdkExtUriResolver(packageMap)];
} else {
return const <UriResolver>[];
« no previous file with comments | « no previous file | pkg/analysis_server/test/context_manager_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698