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

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

Issue 341893010: Use "pub list-package-dirs" to resolve package URIs in analysis server. (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/analysis_server.dart
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index d88208211a6023f6443444eaa67a1dd6a58794e3..454c8f163746d5d4ad42f78fa93ecfaba5e4a75e 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -15,6 +15,8 @@ import 'package:analysis_server/src/domain_analysis.dart';
import 'package:analysis_server/src/operation/operation_analysis.dart';
import 'package:analysis_server/src/operation/operation.dart';
import 'package:analysis_server/src/operation/operation_queue.dart';
+import 'package:analysis_server/src/package_map_provider.dart';
+import 'package:analysis_server/src/package_uri_resolver.dart';
import 'package:analysis_server/src/protocol.dart';
import 'package:analysis_server/src/resource.dart';
import 'package:analyzer/src/generated/ast.dart';
@@ -25,7 +27,6 @@ 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';
/**
@@ -47,8 +48,10 @@ class AnalysisServerContextDirectoryManager extends ContextDirectoryManager {
@override
void addContext(Folder folder, File pubspecFile) {
+ Map<String, Folder> packageMap =
+ analysisServer.packageMapProvider.computePackageMap(folder);
ContextDirectory contextDirectory = new ContextDirectory(
- analysisServer.defaultSdk, resourceProvider, folder, pubspecFile);
+ analysisServer.defaultSdk, resourceProvider, folder, packageMap);
analysisServer.folderMap[folder] = contextDirectory;
AnalysisContext context = contextDirectory.context;
context.analysisOptions = new AnalysisOptionsImpl.con1(defaultOptions);
@@ -86,6 +89,12 @@ class AnalysisServer {
AnalysisServerContextDirectoryManager contextDirectoryManager;
/**
+ * Provider which is used to determine the mapping from package name to
+ * package folder.
+ */
+ final PackageMapProvider packageMapProvider;
+
+ /**
* A flag indicating whether the server is running. When false, contexts
* will no longer be added to [contextWorkQueue], and [performOperation] will
* discard any tasks it finds on [contextWorkQueue].
@@ -146,7 +155,7 @@ class AnalysisServer {
* running a full analysis server.
*/
AnalysisServer(this.channel, ResourceProvider resourceProvider,
- {this.rethrowExceptions: true}) {
+ this.packageMapProvider, {this.rethrowExceptions: true}) {
operationQueue = new ServerOperationQueue(this);
contextDirectoryManager = new AnalysisServerContextDirectoryManager(this, resourceProvider);
AnalysisEngine.instance.logger = new AnalysisLogger();
@@ -575,28 +584,20 @@ class ContextDirectory {
final Folder _folder;
/**
- * The `pubspec.yaml` file in [_folder], or null if there isn't one.
- */
- File _pubspecFile;
-
- /**
* The [AnalysisContext] of this [_folder].
*/
AnalysisContext _context;
ContextDirectory(DartSdk sdk, this._resourceProvider, this._folder,
- this._pubspecFile) {
+ Map<String, Folder> packageMap) {
// create AnalysisContext
_context = AnalysisEngine.instance.createAnalysisContext();
// TODO(scheglov) replace FileUriResolver with an Resource based resolver
List<UriResolver> resolvers = <UriResolver>[new DartUriResolver(sdk),
new FileUriResolver(),
];
- {
- UriResolver packageResolver = _createPackageUriResolver();
- if (packageResolver != null) {
- resolvers.add(packageResolver);
- }
+ if (packageMap != null) {
+ resolvers.add(new PackageMapUriResolver(_resourceProvider, packageMap));
}
_context.sourceFactory = new SourceFactory(resolvers);
}
@@ -605,29 +606,6 @@ class ContextDirectory {
* 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);
- }
}
typedef void OptionUpdater(AnalysisOptionsImpl options);

Powered by Google App Engine
This is Rietveld 408576698