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

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

Issue 305763002: Create a new class for managing the set of analysis roots. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 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/lib/src/context_directory_manager.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 e2bd67e2fc640fe0de4bc7925dd2e47918e8f82d..de450824245ef6e1ac60207090620dd20c2ed4c0 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -8,6 +8,7 @@ import 'dart:async';
import 'package:analysis_server/src/analysis_logger.dart';
import 'package:analysis_server/src/channel.dart';
+import 'package:analysis_server/src/context_directory_manager.dart';
import 'package:analysis_server/src/domain_analysis.dart';
import 'package:analysis_server/src/protocol.dart';
import 'package:analysis_server/src/resource.dart';
@@ -27,6 +28,19 @@ import 'package:analyzer/src/generated/source_io.dart';
*/
final DirectoryBasedDartSdk SHARED_SDK = DirectoryBasedDartSdk.defaultSdk;
+class AnalysisServerContextDirectoryManager extends ContextDirectoryManager {
+ final AnalysisServer analysisServer;
+
+ AnalysisServerContextDirectoryManager(this.analysisServer, ResourceProvider resourceProvider)
+ : super(resourceProvider);
+
+ void addContext(Folder folder) {
+ PubFolder pubFolder = new PubFolder(analysisServer.defaultSdk, folder);
+ analysisServer.folderMap[folder] = pubFolder;
+ analysisServer.addContextToWorkQueue(pubFolder.context);
+ }
+}
+
/**
* Instances of the class [AnalysisServer] implement a server that listens on a
* [CommunicationChannel] for analysis requests and process them.
@@ -59,9 +73,10 @@ class AnalysisServer {
final ServerCommunicationChannel channel;
/**
- * The [ResourceProvider] using which paths are converted into [Resource]s.
+ * [ContextDirectoryManager] which handles the mapping from analysis roots
+ * to context directories.
*/
- final ResourceProvider resourceProvider;
+ AnalysisServerContextDirectoryManager contextDirectoryManager;
/**
* A flag indicating whether the server is running. When false, contexts
@@ -121,7 +136,8 @@ class AnalysisServer {
* Initialize a newly created server to receive requests from and send
* responses to the given [channel].
*/
- AnalysisServer(this.channel, this.resourceProvider) {
+ AnalysisServer(this.channel, ResourceProvider resourceProvider) {
+ contextDirectoryManager = new AnalysisServerContextDirectoryManager(this, resourceProvider);
AnalysisEngine.instance.logger = new AnalysisLogger();
running = true;
Notification notification = new Notification(CONNECTED_NOTIFICATION);
@@ -288,44 +304,12 @@ class AnalysisServer {
void setAnalysisRoots(String requestId,
List<String> includedPaths,
List<String> excludedPaths) {
- // included
- Set<Folder> includedFolders = new Set<Folder>();
- for (int i = 0; i < includedPaths.length; i++) {
- String path = includedPaths[i];
- Resource resource = resourceProvider.getResource(path);
- if (resource is Folder) {
- includedFolders.add(resource);
- } else {
- // TODO(scheglov) implemented separate files analysis
- throw new RequestFailure(
- new Response.unsupportedFeature(
- requestId,
- '$path is not a folder. '
- 'Only support for folder analysis is implemented currently.'));
- }
- }
- // excluded
- // TODO(scheglov) remove when implemented
- if (excludedPaths.isNotEmpty) {
+ try {
+ contextDirectoryManager.setRoots(includedPaths, excludedPaths);
scheglov 2014/05/28 20:28:41 Does it still work for the simplest cases?
Paul Berry 2014/05/28 20:33:32 AFAICT, yes. This CL is just a refactor of existi
+ } on UnimplementedError catch (e) {
throw new RequestFailure(
- new Response.unsupportedFeature(
- requestId,
- 'Excluded paths are not supported yet'));
- }
- Set<Folder> excludedFolders = new Set<Folder>();
- // diff
- Set<Folder> currentFolders = new Set<Folder>.from(folderMap.keys);
- Set<Folder> newFolders = includedFolders.difference(currentFolders);
- Set<Folder> oldFolders = currentFolders.difference(includedFolders);
- // remove old contexts
- for (Folder folder in oldFolders) {
- // TODO(scheglov) implement
- }
- // add new contexts
- for (Folder folder in newFolders) {
- PubFolder pubFolder = new PubFolder(defaultSdk, folder);
- folderMap[folder] = pubFolder;
- addContextToWorkQueue(pubFolder.context);
+ new Response.unsupportedFeature(
+ requestId, e.message));
}
}
@@ -353,7 +337,7 @@ class AnalysisServer {
return null;
}
// prepare sources
- File file = resourceProvider.getResource(path);
+ File file = contextDirectoryManager.resourceProvider.getResource(path);
Source unitSource = file.createSource(UriKind.FILE_URI);
List<Source> librarySources = context.getLibrariesContaining(unitSource);
if (librarySources.isEmpty) {
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/context_directory_manager.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698