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

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

Issue 1277063002: In analysis server, favor package root setting over ".packages" file. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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/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 5088ae180ddf5d0b2f5fbfe4c0c4b2263de61543..a4e5849dc9b2b84946df3dd5c906d87bdd5fcee2 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -730,7 +730,7 @@ class ContextManagerImpl implements ContextManager {
* dependencies (currently we only use it to track "pub list" dependencies).
*/
FolderDisposition _computeFolderDisposition(
- Folder folder, void addDependency(String path)) {
+ Folder folder, void addDependency(String path), File packagespecFile) {
String packageRoot = normalizedPackageRoots[folder.path];
if (packageRoot != null) {
// TODO(paulberry): We shouldn't be using JavaFile here because it
@@ -763,18 +763,28 @@ class ContextManagerImpl implements ContextManager {
// resolve packages.
return new NoPackageFolderDisposition(packageRoot: packageRoot);
} else {
+ PackageMapInfo packageMapInfo;
callbacks.beginComputePackageMap();
- if (packageResolverProvider != null) {
- UriResolver resolver = packageResolverProvider(folder);
- if (resolver != null) {
- return new CustomPackageResolverDisposition(resolver);
+ try {
+ if (ENABLE_PACKAGESPEC_SUPPORT) {
+ // Try .packages first.
+ if (pathos.basename(packagespecFile.path) == PACKAGE_SPEC_NAME) {
+ Packages packages = _readPackagespec(packagespecFile);
+ return new PackagesFileDisposition(packages);
+ }
}
+ if (packageResolverProvider != null) {
+ UriResolver resolver = packageResolverProvider(folder);
+ if (resolver != null) {
+ return new CustomPackageResolverDisposition(resolver);
+ }
+ }
+ ServerPerformanceStatistics.pub.makeCurrentWhile(() {
+ packageMapInfo = _packageMapProvider.computePackageMap(folder);
+ });
+ } finally {
+ callbacks.endComputePackageMap();
}
- PackageMapInfo packageMapInfo;
- ServerPerformanceStatistics.pub.makeCurrentWhile(() {
- packageMapInfo = _packageMapProvider.computePackageMap(folder);
- });
- callbacks.endComputePackageMap();
for (String dependencyPath in packageMapInfo.dependencies) {
addDependency(dependencyPath);
}
@@ -798,17 +808,10 @@ class ContextManagerImpl implements ContextManager {
FolderDisposition disposition;
List<String> dependencies = <String>[];
- if (ENABLE_PACKAGESPEC_SUPPORT) {
- // Try .packages first.
- if (pathos.basename(packagespecFile.path) == PACKAGE_SPEC_NAME) {
- Packages packages = _readPackagespec(packagespecFile);
- disposition = new PackagesFileDisposition(packages);
- }
- }
-
// Next resort to a package uri resolver.
if (disposition == null) {
- disposition = _computeFolderDisposition(folder, dependencies.add);
+ disposition =
+ _computeFolderDisposition(folder, dependencies.add, packagespecFile);
}
info.setDependencies(dependencies);
@@ -833,18 +836,7 @@ class ContextManagerImpl implements ContextManager {
ContextInfo parent, Folder folder, bool withPackageSpecOnly) {
// Decide whether a context needs to be created for [folder] here, and if
// so, create it.
- File packageSpec;
-
- if (ENABLE_PACKAGESPEC_SUPPORT) {
- // Start by looking for .packages.
- packageSpec = folder.getChild(PACKAGE_SPEC_NAME);
- }
-
- // Fall back to looking for a pubspec.
- if (packageSpec == null || !packageSpec.exists) {
- packageSpec = folder.getChild(PUBSPEC_NAME);
- }
-
+ File packageSpec = _findPackageSpecFile(folder);
bool createContext = packageSpec.exists || !withPackageSpecOnly;
if (withPackageSpecOnly &&
packageSpec.exists &&
@@ -929,6 +921,28 @@ class ContextManagerImpl implements ContextManager {
}
/**
+ * Find the file that should be used to determine whether a context needs to
+ * be created here--this is either the ".packages" file or the "pubspec.yaml"
+ * file.
+ */
+ File _findPackageSpecFile(Folder folder) {
+ // Decide whether a context needs to be created for [folder] here, and if
+ // so, create it.
+ File packageSpec;
+
+ if (ENABLE_PACKAGESPEC_SUPPORT) {
+ // Start by looking for .packages.
+ packageSpec = folder.getChild(PACKAGE_SPEC_NAME);
+ }
+
+ // Fall back to looking for a pubspec.
+ if (packageSpec == null || !packageSpec.exists) {
+ packageSpec = folder.getChild(PUBSPEC_NAME);
+ }
+ return packageSpec;
+ }
+
+ /**
* Return the [ContextInfo] for the "innermost" context whose associated
* folder is or contains the given path. ("innermost" refers to the nesting
* of contexts, so if there is a context for path /foo and a context for
@@ -1182,8 +1196,8 @@ class ContextManagerImpl implements ContextManager {
// while we're rerunning "pub list", since any analysis we complete while
// "pub list" is in progress is just going to get thrown away anyhow.
List<String> dependencies = <String>[];
- FolderDisposition disposition =
- _computeFolderDisposition(info.folder, dependencies.add);
+ FolderDisposition disposition = _computeFolderDisposition(
+ info.folder, dependencies.add, _findPackageSpecFile(info.folder));
info.setDependencies(dependencies);
callbacks.updateContextPackageUriResolver(info.folder, disposition);
}
« 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