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

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

Issue 341273007: Allow multiple dirs per package in the data returned by "pub list". (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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/package_map_provider.dart
diff --git a/pkg/analysis_server/lib/src/package_map_provider.dart b/pkg/analysis_server/lib/src/package_map_provider.dart
index dfe229a3f7f679126643406f4f18f09c8bb7ea26..b0c422e4ae641413e58e112226aadbce5202db44 100644
--- a/pkg/analysis_server/lib/src/package_map_provider.dart
+++ b/pkg/analysis_server/lib/src/package_map_provider.dart
@@ -21,7 +21,7 @@ abstract class PackageMapProvider {
*
* If a package map can't be computed, return null.
*/
- Map<String, Folder> computePackageMap(Folder folder);
+ Map<String, List<Folder>> computePackageMap(Folder folder);
}
/**
@@ -39,7 +39,7 @@ class PubPackageMapProvider implements PackageMapProvider {
PubPackageMapProvider(this.resourceProvider);
@override
- Map<String, Folder> computePackageMap(Folder folder) {
+ Map<String, List<Folder>> computePackageMap(Folder folder) {
// TODO(paulberry) make this asynchronous so that we can (a) do other
// analysis while it's in progress, and (b) time out if it takes too long
// to respond.
@@ -70,7 +70,7 @@ class PubPackageMapProvider implements PackageMapProvider {
/**
* Decode the JSON output from pub into a package map.
*/
- Map<String, Folder> parsePackageMap(String jsonText) {
+ Map<String, List<Folder>> parsePackageMap(String jsonText) {
// The output of pub looks like this:
// {
// "packages": {
@@ -82,17 +82,28 @@ class PubPackageMapProvider implements PackageMapProvider {
// "path/to/myapp/pubspec.lock"
// ]
// }
- Map<String, Folder> packageMap = <String, Folder>{};
+ Map<String, List<Folder>> packageMap = <String, List<Folder>>{};
Map obj = JSON.decode(jsonText);
Map packages = obj['packages'];
+ processPaths(String packageName, List paths) {
+ List<Folder> folders = <Folder>[];
+ for (var path in paths) {
+ if (path is String) {
+ Resource resource = resourceProvider.getResource(path);
+ if (resource is Folder) {
+ folders.add(resource);
+ }
+ if (folders.isNotEmpty) {
scheglov 2014/06/20 20:06:59 Move this out of the "paths" loop?
Paul Berry 2014/06/20 20:12:33 Oops, you're right. Fixed.
+ packageMap[packageName] = folders;
+ }
+ }
+ }
+ }
packages.forEach((key, value) {
if (value is String) {
- Resource resource = resourceProvider.getResource(value);
- if (resource is Folder) {
- packageMap[key] = resource;
- }
+ processPaths(key, [value]);
} else if (value is List) {
- // TODO(paulberry): support string lists.
+ processPaths(key, value);
}
});
return packageMap;
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | pkg/analysis_server/lib/src/package_uri_resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698