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

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

Issue 2078993002: Remove embedder locator from analysis context (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 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
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 b610510c21bcc504e473043dc72fd2461c3a768d..785ccfea2fc3924a21fbc647c9c5a83e28734fdc 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -76,6 +76,11 @@ class ContextInfo {
String packageDescriptionPath;
/**
+ * The folder disposition for this context.
+ */
+ final FolderDisposition disposition;
+
+ /**
* Paths to files which determine the folder disposition and package map.
*
* TODO(paulberry): if any of these files are outside of [folder], they won't
@@ -96,7 +101,7 @@ class ContextInfo {
Map<String, Source> sources = new HashMap<String, Source>();
ContextInfo(ContextManagerImpl contextManager, this.parent, Folder folder,
- File packagespecFile, this.packageRoot)
+ File packagespecFile, this.packageRoot, this.disposition)
: folder = folder,
pathFilter = new PathFilter(
folder.path, null, contextManager.resourceProvider.pathContext) {
@@ -110,7 +115,9 @@ class ContextInfo {
*/
ContextInfo._root()
: folder = null,
- pathFilter = null;
+ pathFilter = null,
+ packageRoot = null,
+ disposition = null;
/**
* Iterate through all [children] and their children, recursively.
@@ -583,13 +590,13 @@ class ContextManagerImpl implements ContextManager {
info.context.analysisOptions = new AnalysisOptionsImpl();
// Apply inherited options.
- options = _toStringMap(_getEmbeddedOptions(info.context));
+ options = _toStringMap(_getEmbeddedOptions(info));
if (options != null) {
configureContextOptions(info.context, options);
}
} else {
// Check for embedded options.
- Map embeddedOptions = _getEmbeddedOptions(info.context);
+ Map embeddedOptions = _getEmbeddedOptions(info);
if (embeddedOptions != null) {
options = _toStringMap(new Merger().merge(embeddedOptions, options));
}
@@ -1039,17 +1046,11 @@ class ContextManagerImpl implements ContextManager {
*/
ContextInfo _createContext(
ContextInfo parent, Folder folder, File packagespecFile) {
- ContextInfo info = new ContextInfo(this, parent, folder, packagespecFile,
- normalizedPackageRoots[folder.path]);
-
- FolderDisposition disposition;
List<String> dependencies = <String>[];
-
- // Next resort to a package uri resolver.
- if (disposition == null) {
- disposition =
- _computeFolderDisposition(folder, dependencies.add, packagespecFile);
- }
+ FolderDisposition disposition =
+ _computeFolderDisposition(folder, dependencies.add, packagespecFile);
+ ContextInfo info = new ContextInfo(this, parent, folder, packagespecFile,
+ normalizedPackageRoots[folder.path], disposition);
Map<String, Object> optionMap = readOptions(info.folder);
AnalysisOptions options =
@@ -1154,8 +1155,9 @@ class ContextManagerImpl implements ContextManager {
List<UriResolver> packageUriResolvers =
disposition.createPackageUriResolvers(resourceProvider);
- EmbedderSdk sdk =
- new EmbedderSdk(context.embedderYamlLocator.embedderYamls);
+ EmbedderYamlLocator locator =
+ disposition.getEmbedderLocator(resourceProvider);
+ EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls);
if (sdk.libraryMap.size() == 0) {
// The embedder uri resolver has no mappings. Use the default Dart SDK
// uri resolver.
@@ -1243,29 +1245,26 @@ class ContextManagerImpl implements ContextManager {
/// skipped.
///
/// Returns null if there are no embedded/configured options.
- Map _getEmbeddedOptions(AnalysisContext context) {
- Map embeddedOptions;
-
- if (context is InternalAnalysisContext) {
- EmbedderYamlLocator locator = context.embedderYamlLocator;
- Iterable<YamlMap> maps = locator.embedderYamls.values;
- if (maps.length == 1) {
- embeddedOptions = maps.first;
- }
-
- AnalysisConfiguration configuration = getConfiguration(context);
- if (configuration != null) {
- Map configMap = configuration.options;
- if (configMap != null) {
- if (embeddedOptions != null) {
- embeddedOptions = new Merger().merge(embeddedOptions, configMap);
- } else {
- embeddedOptions = configMap;
- }
+ Map _getEmbeddedOptions(ContextInfo info) {
+ Map embeddedOptions = null;
+ EmbedderYamlLocator locator =
+ info.disposition.getEmbedderLocator(resourceProvider);
+ Iterable<YamlMap> maps = locator.embedderYamls.values;
+ if (maps.length == 1) {
+ embeddedOptions = maps.first;
+ }
+
+ AnalysisConfiguration configuration = getConfiguration(info.context);
+ if (configuration != null) {
+ Map configMap = configuration.options;
+ if (configMap != null) {
+ if (embeddedOptions != null) {
+ embeddedOptions = new Merger().merge(embeddedOptions, configMap);
+ } else {
+ embeddedOptions = configMap;
}
}
}
-
return embeddedOptions;
}
@@ -1697,6 +1696,10 @@ class CustomPackageResolverDisposition extends FolderDisposition {
Iterable<UriResolver> createPackageUriResolvers(
ResourceProvider resourceProvider) =>
<UriResolver>[resolver];
+
+ @override
+ EmbedderYamlLocator getEmbedderLocator(ResourceProvider resourceProvider) =>
+ new EmbedderYamlLocator(null);
}
/**
@@ -1737,6 +1740,13 @@ abstract class FolderDisposition {
*/
Iterable<UriResolver> createPackageUriResolvers(
ResourceProvider resourceProvider);
+
+ /**
+ * Return the locator used to locate the _embedder.yaml file used to configure
+ * the SDK. The [resourceProvider] is used to access the file system in cases
+ * where that is necessary.
+ */
+ EmbedderYamlLocator getEmbedderLocator(ResourceProvider resourceProvider);
}
/**
@@ -1756,6 +1766,10 @@ class NoPackageFolderDisposition extends FolderDisposition {
Iterable<UriResolver> createPackageUriResolvers(
ResourceProvider resourceProvider) =>
const <UriResolver>[];
+
+ @override
+ EmbedderYamlLocator getEmbedderLocator(ResourceProvider resourceProvider) =>
+ new EmbedderYamlLocator(null);
}
/**
@@ -1765,6 +1779,8 @@ class NoPackageFolderDisposition extends FolderDisposition {
class PackageMapDisposition extends FolderDisposition {
final Map<String, List<Folder>> packageMap;
+ EmbedderYamlLocator _embedderLocator;
+
@override
final String packageRoot;
@@ -1780,6 +1796,14 @@ class PackageMapDisposition extends FolderDisposition {
new SdkExtUriResolver(packageMap),
new PackageMapUriResolver(resourceProvider, packageMap)
];
+
+ @override
+ EmbedderYamlLocator getEmbedderLocator(ResourceProvider resourceProvider) {
+ if (_embedderLocator == null) {
+ _embedderLocator = new EmbedderYamlLocator(packageMap);
+ }
+ return _embedderLocator;
+ }
}
/**
@@ -1790,22 +1814,27 @@ class PackagesFileDisposition extends FolderDisposition {
@override
final Packages packages;
+ Map<String, List<Folder>> packageMap;
+
+ EmbedderYamlLocator _embedderLocator;
+
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) {
- return packageMap;
- }
- packages.asMap().forEach((String name, Uri uri) {
- if (uri.scheme == 'file' || uri.scheme == '' /* unspecified */) {
- var path = resourceProvider.pathContext.fromUri(uri);
- packageMap[name] = <Folder>[resourceProvider.getFolder(path)];
+ if (packageMap == null) {
+ packageMap = <String, List<Folder>>{};
+ if (packages != null) {
+ packages.asMap().forEach((String name, Uri uri) {
+ if (uri.scheme == 'file' || uri.scheme == '' /* unspecified */) {
+ var path = resourceProvider.pathContext.fromUri(uri);
+ packageMap[name] = <Folder>[resourceProvider.getFolder(path)];
+ }
+ });
}
- });
+ }
return packageMap;
}
@@ -1820,4 +1849,13 @@ class PackagesFileDisposition extends FolderDisposition {
return const <UriResolver>[];
}
}
+
+ @override
+ EmbedderYamlLocator getEmbedderLocator(ResourceProvider resourceProvider) {
+ if (_embedderLocator == null) {
+ _embedderLocator =
+ new EmbedderYamlLocator(buildPackageMap(resourceProvider));
+ }
+ return _embedderLocator;
+ }
}
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | pkg/analysis_server/test/context_manager_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698