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

Side by Side Diff: pkg/analysis_server/lib/src/analysis_server.dart

Issue 337383005: PackageMapUriResolver for Dart 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analysis.server; 5 library analysis.server;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 9
10 import 'package:analysis_server/src/analysis_logger.dart'; 10 import 'package:analysis_server/src/analysis_logger.dart';
11 import 'package:analysis_server/src/channel.dart'; 11 import 'package:analysis_server/src/channel.dart';
12 import 'package:analysis_server/src/constants.dart'; 12 import 'package:analysis_server/src/constants.dart';
13 import 'package:analysis_server/src/context_directory_manager.dart'; 13 import 'package:analysis_server/src/context_directory_manager.dart';
14 import 'package:analysis_server/src/domain_analysis.dart'; 14 import 'package:analysis_server/src/domain_analysis.dart';
15 import 'package:analysis_server/src/operation/operation_analysis.dart'; 15 import 'package:analysis_server/src/operation/operation_analysis.dart';
16 import 'package:analysis_server/src/operation/operation.dart'; 16 import 'package:analysis_server/src/operation/operation.dart';
17 import 'package:analysis_server/src/operation/operation_queue.dart'; 17 import 'package:analysis_server/src/operation/operation_queue.dart';
18 import 'package:analysis_server/src/protocol.dart'; 18 import 'package:analysis_server/src/protocol.dart';
19 import 'package:analysis_server/src/resource.dart'; 19 import 'package:analysis_server/src/resource.dart';
20 import 'package:analyzer/src/generated/ast.dart'; 20 import 'package:analyzer/src/generated/ast.dart';
21 import 'package:analyzer/src/generated/engine.dart'; 21 import 'package:analyzer/src/generated/engine.dart';
22 import 'package:analyzer/src/generated/error.dart'; 22 import 'package:analyzer/src/generated/error.dart';
23 import 'package:analyzer/src/generated/source.dart'; 23 import 'package:analyzer/src/generated/source.dart';
24 import 'package:analyzer/src/generated/sdk.dart'; 24 import 'package:analyzer/src/generated/sdk.dart';
25 import 'package:analyzer/src/generated/sdk_io.dart'; 25 import 'package:analyzer/src/generated/sdk_io.dart';
26 import 'package:analyzer/src/generated/source_io.dart'; 26 import 'package:analyzer/src/generated/source_io.dart';
27 import 'package:analyzer/src/generated/java_engine.dart'; 27 import 'package:analyzer/src/generated/java_engine.dart';
28 import 'package:analysis_server/src/package_uri_resolver.dart';
28 29
29 30
30 /** 31 /**
31 * An instance of [DirectoryBasedDartSdk] that is shared between 32 * An instance of [DirectoryBasedDartSdk] that is shared between
32 * [AnalysisServer] instances to improve performance. 33 * [AnalysisServer] instances to improve performance.
33 */ 34 */
34 final DirectoryBasedDartSdk SHARED_SDK = DirectoryBasedDartSdk.defaultSdk; 35 final DirectoryBasedDartSdk SHARED_SDK = DirectoryBasedDartSdk.defaultSdk;
35 36
36 class AnalysisServerContextDirectoryManager extends ContextDirectoryManager { 37 class AnalysisServerContextDirectoryManager extends ContextDirectoryManager {
37 final AnalysisServer analysisServer; 38 final AnalysisServer analysisServer;
38 39
39 AnalysisServerContextDirectoryManager(this.analysisServer, ResourceProvider re sourceProvider) 40 AnalysisServerContextDirectoryManager(this.analysisServer, ResourceProvider re sourceProvider)
40 : super(resourceProvider); 41 : super(resourceProvider);
41 42
42 @override 43 @override
43 void addContext(Folder folder, File pubspecFile) { 44 void addContext(Folder folder, File pubspecFile) {
44 ContextDirectory contextDirectory = new ContextDirectory( 45 ContextDirectory contextDirectory = new ContextDirectory(
45 analysisServer.defaultSdk, folder, pubspecFile); 46 analysisServer.defaultSdk, resourceProvider, folder, pubspecFile);
46 analysisServer.folderMap[folder] = contextDirectory; 47 analysisServer.folderMap[folder] = contextDirectory;
47 analysisServer.schedulePerformAnalysisOperation(contextDirectory.context); 48 analysisServer.schedulePerformAnalysisOperation(contextDirectory.context);
48 } 49 }
49 50
50 @override 51 @override
51 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet) { 52 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet) {
52 AnalysisContext context = analysisServer.folderMap[contextFolder].context; 53 AnalysisContext context = analysisServer.folderMap[contextFolder].context;
53 context.applyChanges(changeSet); 54 context.applyChanges(changeSet);
54 analysisServer.schedulePerformAnalysisOperation(context); 55 analysisServer.schedulePerformAnalysisOperation(context);
55 } 56 }
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 * Instances of [ContextDirectory] represents a [Folder] associated with an 449 * Instances of [ContextDirectory] represents a [Folder] associated with an
449 * analysis context. The folder may or may not contain a Pub `pubspec.yaml`. 450 * analysis context. The folder may or may not contain a Pub `pubspec.yaml`.
450 * 451 *
451 * TODO(scheglov) implement complete projects/contexts semantics. 452 * TODO(scheglov) implement complete projects/contexts semantics.
452 * 453 *
453 * This class is intentionally simplified to serve as a base to start working 454 * This class is intentionally simplified to serve as a base to start working
454 * on services while work on complete semantics is being done in parallel. 455 * on services while work on complete semantics is being done in parallel.
455 */ 456 */
456 class ContextDirectory { 457 class ContextDirectory {
457 /** 458 /**
459 * The root [ResourceProvider] of this [ContextDirectory].
460 */
461 final ResourceProvider _resourceProvider;
462
463 /**
458 * The root [Folder] of this [ContextDirectory]. 464 * The root [Folder] of this [ContextDirectory].
459 */ 465 */
460 final Folder _folder; 466 final Folder _folder;
461 467
462 /** 468 /**
463 * The `pubspec.yaml` file in [_folder], or null if there isn't one. 469 * The `pubspec.yaml` file in [_folder], or null if there isn't one.
464 */ 470 */
465 File _pubspecFile; 471 File _pubspecFile;
466 472
467 /** 473 /**
468 * The [AnalysisContext] of this [_folder]. 474 * The [AnalysisContext] of this [_folder].
469 */ 475 */
470 AnalysisContext _context; 476 AnalysisContext _context;
471 477
472 ContextDirectory(DartSdk sdk, this._folder, this._pubspecFile) { 478 ContextDirectory(DartSdk sdk, this._resourceProvider, this._folder,
479 this._pubspecFile) {
473 // create AnalysisContext 480 // create AnalysisContext
474 _context = AnalysisEngine.instance.createAnalysisContext(); 481 _context = AnalysisEngine.instance.createAnalysisContext();
475 // TODO(scheglov) replace FileUriResolver with an Resource based resolver 482 // TODO(scheglov) replace FileUriResolver with an Resource based resolver
476 // TODO(scheglov) create packages resolver 483 // TODO(scheglov) create packages resolver
477 _context.sourceFactory = new SourceFactory([ 484 List<UriResolver> resolvers = <UriResolver>[new DartUriResolver(sdk),
478 new DartUriResolver(sdk), 485 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.
479 new FileUriResolver(), 486 ];
480 // new PackageUriResolver(), 487 {
481 ]); 488 UriResolver packageResolver = _createPackageUriResolver();
489 if (packageResolver != null) {
490 resolvers.add(packageResolver);
491 }
492 }
493 _context.sourceFactory = new SourceFactory(resolvers);
482 } 494 }
483 495
484 /** 496 /**
485 * Return the [AnalysisContext] of this folder. 497 * Return the [AnalysisContext] of this folder.
486 */ 498 */
487 AnalysisContext get context => _context; 499 AnalysisContext get context => _context;
500
501 /**
502 * Returns an [UriResolver] for `package` URIs, or `null` if not a Pub
503 * application.
504 */
505 UriResolver _createPackageUriResolver() {
506 // prepare 'packages' folder
507 Resource packagesResource = _folder.getChild('packages');
508 if (packagesResource is! Folder) {
509 return null;
510 }
511 Folder packagesFolder = packagesResource;
512 // list packages
513 Map<String, Folder> packageMap = <String, Folder>{};
514 List<Resource> children = packagesFolder.getChildren();
515 for (Resource child in children) {
516 if (child is Folder) {
517 packageMap[child.shortName] = child;
518 }
519 }
520 // done
521 return new PackageMapUriResolver(_resourceProvider, packageMap);
522 }
488 } 523 }
489 524
490 525
491 /** 526 /**
492 * An enumeration of the services provided by the server domain. 527 * An enumeration of the services provided by the server domain.
493 */ 528 */
494 class ServerService extends Enum2<ServerService> { 529 class ServerService extends Enum2<ServerService> {
495 static const ServerService STATUS = const ServerService('STATUS', 0); 530 static const ServerService STATUS = const ServerService('STATUS', 0);
496 531
497 static const List<ServerService> VALUES = const [STATUS]; 532 static const List<ServerService> VALUES = const [STATUS];
498 533
499 const ServerService(String name, int ordinal) : super(name, ordinal); 534 const ServerService(String name, int ordinal) : super(name, ordinal);
500 } 535 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698