Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 } |
| OLD | NEW |