Chromium Code Reviews| Index: pkg/analysis_server/lib/src/analysis_server.dart |
| diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart |
| index 0ad6cc8c39a66db7a98047bd3dd9fbd17f19b17f..c2d3fd10de0391033043b65e3bf209130738a652 100644 |
| --- a/pkg/analysis_server/lib/src/analysis_server.dart |
| +++ b/pkg/analysis_server/lib/src/analysis_server.dart |
| @@ -25,6 +25,7 @@ import 'package:analyzer/src/generated/sdk.dart'; |
| import 'package:analyzer/src/generated/sdk_io.dart'; |
| import 'package:analyzer/src/generated/source_io.dart'; |
| import 'package:analyzer/src/generated/java_engine.dart'; |
| +import 'package:analysis_server/src/package_uri_resolver.dart'; |
| /** |
| @@ -42,7 +43,7 @@ class AnalysisServerContextDirectoryManager extends ContextDirectoryManager { |
| @override |
| void addContext(Folder folder, File pubspecFile) { |
| ContextDirectory contextDirectory = new ContextDirectory( |
| - analysisServer.defaultSdk, folder, pubspecFile); |
| + analysisServer.defaultSdk, resourceProvider, folder, pubspecFile); |
| analysisServer.folderMap[folder] = contextDirectory; |
| analysisServer.schedulePerformAnalysisOperation(contextDirectory.context); |
| } |
| @@ -455,6 +456,11 @@ class AnalysisService extends Enum2<AnalysisService> { |
| */ |
| class ContextDirectory { |
| /** |
| + * The root [ResourceProvider] of this [ContextDirectory]. |
| + */ |
| + final ResourceProvider _resourceProvider; |
| + |
| + /** |
| * The root [Folder] of this [ContextDirectory]. |
| */ |
| final Folder _folder; |
| @@ -469,22 +475,51 @@ class ContextDirectory { |
| */ |
| AnalysisContext _context; |
| - ContextDirectory(DartSdk sdk, this._folder, this._pubspecFile) { |
| + ContextDirectory(DartSdk sdk, this._resourceProvider, this._folder, |
| + this._pubspecFile) { |
| // create AnalysisContext |
| _context = AnalysisEngine.instance.createAnalysisContext(); |
| // TODO(scheglov) replace FileUriResolver with an Resource based resolver |
| // TODO(scheglov) create packages resolver |
| - _context.sourceFactory = new SourceFactory([ |
| - new DartUriResolver(sdk), |
| - new FileUriResolver(), |
| - // new PackageUriResolver(), |
| - ]); |
| + List<UriResolver> resolvers = <UriResolver>[new DartUriResolver(sdk), |
| + new FileUriResolver(),// new PackageUriResolver(), |
|
Brian Wilkerson
2014/06/17 21:38:23
Remove the commented out code?
scheglov
2014/06/17 22:50:33
Done.
|
| + ]; |
| + { |
| + UriResolver packageResolver = _createPackageUriResolver(); |
| + if (packageResolver != null) { |
| + resolvers.add(packageResolver); |
| + } |
| + } |
| + _context.sourceFactory = new SourceFactory(resolvers); |
| } |
| /** |
| * Return the [AnalysisContext] of this folder. |
| */ |
| AnalysisContext get context => _context; |
| + |
| + /** |
| + * Returns an [UriResolver] for `package` URIs, or `null` if not a Pub |
| + * application. |
| + */ |
| + UriResolver _createPackageUriResolver() { |
| + // prepare 'packages' folder |
| + Resource packagesResource = _folder.getChild('packages'); |
| + if (packagesResource is! Folder) { |
| + return null; |
| + } |
| + Folder packagesFolder = packagesResource; |
| + // list packages |
| + Map<String, Folder> packageMap = <String, Folder>{}; |
| + List<Resource> children = packagesFolder.getChildren(); |
| + for (Resource child in children) { |
| + if (child is Folder) { |
| + packageMap[child.shortName] = child; |
| + } |
| + } |
| + // done |
| + return new PackageMapUriResolver(_resourceProvider, packageMap); |
| + } |
| } |