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 866f58ae452f315626a5858e6bdc2ceb3b1d88ff..4fb0c6d7eacc8bbc3d4d90034190701d8bd9a2e0 100644 |
| --- a/pkg/analysis_server/lib/src/analysis_server.dart |
| +++ b/pkg/analysis_server/lib/src/analysis_server.dart |
| @@ -32,7 +32,6 @@ import 'package:analyzer/plugin/resolver_provider.dart'; |
| import 'package:analyzer/source/pub_package_map_provider.dart'; |
| import 'package:analyzer/src/context/builder.dart'; |
| import 'package:analyzer/src/dart/ast/utilities.dart'; |
| -import 'package:analyzer/src/dart/sdk/sdk.dart'; |
| import 'package:analyzer/src/generated/engine.dart'; |
| import 'package:analyzer/src/generated/java_engine.dart'; |
| import 'package:analyzer/src/generated/java_io.dart'; |
| @@ -46,7 +45,6 @@ import 'package:analyzer/src/task/dart.dart'; |
| import 'package:analyzer/src/util/glob.dart'; |
| import 'package:analyzer/task/dart.dart'; |
| import 'package:plugin/plugin.dart'; |
| -import 'package:yaml/yaml.dart'; |
| typedef void OptionUpdater(AnalysisOptionsImpl options); |
| @@ -1596,14 +1594,10 @@ class ServerContextManagerCallbacks extends ContextManagerCallbacks { |
| @override |
| AnalysisContext addContext( |
| Folder folder, AnalysisOptions options, FolderDisposition disposition) { |
| - InternalAnalysisContext context = |
| - AnalysisEngine.instance.createAnalysisContext(); |
| - context.contentCache = analysisServer.overlayState; |
| - analysisServer.folderMap[folder] = context; |
| - context.fileResolverProvider = analysisServer.fileResolverProvider; |
| - context.sourceFactory = |
| - _createSourceFactory(context, options, disposition, folder); |
| - context.analysisOptions = options; |
| + ContextBuilder builder = createContextBuilder(folder, options); |
| + AnalysisContext context = builder.buildContext(folder.path); |
| + |
| + // TODO(brianwilkerson) Move bundle discovery into ContextBuilder |
| if (analysisServer.options.enablePubSummaryManager) { |
| List<LinkedPubPackage> linkedBundles = |
| analysisServer.pubSummaryManager.getLinkedBundles(context); |
| @@ -1613,11 +1607,12 @@ class ServerContextManagerCallbacks extends ContextManagerCallbacks { |
| store.addBundle(null, package.unlinked); |
| store.addBundle(null, package.linked); |
| } |
| - context.resultProvider = |
| + (context as InternalAnalysisContext).resultProvider = |
| new InputPackagesResultProvider(context, store); |
| } |
| } |
| + analysisServer.folderMap[folder] = context; |
| analysisServer._onContextsChangedController |
| .add(new ContextsChangedEvent(added: [context])); |
| analysisServer.schedulePerformAnalysisOperation(context); |
| @@ -1646,6 +1641,32 @@ class ServerContextManagerCallbacks extends ContextManagerCallbacks { |
| analysisServer._computingPackageMap(computing); |
| @override |
| + ContextBuilder createContextBuilder(Folder folder, AnalysisOptions options) { |
| + String defaultPackageFilePath = null; |
| + String defaultPackagesDirectoryPath = null; |
| + String path = (analysisServer.contextManager as ContextManagerImpl) |
| + .normalizedPackageRoots[folder.toString()]; |
|
scheglov
2016/08/26 21:09:57
folder.path?
Brian Wilkerson
2016/08/27 00:29:49
Done
|
| + if (path != null) { |
| + Resource resource = resourceProvider.getResource(path); |
| + if (resource.exists) { |
| + if (resource is File) { |
| + defaultPackageFilePath = path; |
| + } else { |
| + defaultPackagesDirectoryPath = path; |
| + } |
| + } |
| + } |
| + |
| + ContextBuilder builder = new ContextBuilder(resourceProvider, |
| + analysisServer.sdkManager, analysisServer.overlayState); |
| + builder.defaultOptions = options; |
| + builder.fileResolverProvider = analysisServer.fileResolverProvider; |
| + builder.defaultPackageFilePath = defaultPackageFilePath; |
| + builder.defaultPackagesDirectoryPath = defaultPackagesDirectoryPath; |
| + return builder; |
| + } |
| + |
| + @override |
| void moveContext(Folder from, Folder to) { |
| // There is nothing to do. |
| // This method is mostly for tests. |
| @@ -1671,61 +1692,6 @@ class ServerContextManagerCallbacks extends ContextManagerCallbacks { |
| .add(new ContextsChangedEvent(changed: [context])); |
| analysisServer.schedulePerformAnalysisOperation(context); |
| } |
| - |
| - /** |
| - * Set up a [SourceFactory] that resolves packages as appropriate for the |
| - * given [disposition]. |
| - */ |
| - SourceFactory _createSourceFactory(InternalAnalysisContext context, |
| - AnalysisOptions options, FolderDisposition disposition, Folder folder) { |
| - List<UriResolver> resolvers = []; |
| - List<UriResolver> packageUriResolvers = |
| - disposition.createPackageUriResolvers(resourceProvider); |
| - |
| - // If no embedded URI resolver was provided, defer to a locator-backed one. |
| - SdkExtensionFinder extFinder = |
| - disposition.getSdkExtensionFinder(resourceProvider); |
| - List<String> extFilePaths = extFinder.extensionFilePaths; |
| - EmbedderYamlLocator locator = |
| - disposition.getEmbedderLocator(resourceProvider); |
| - Map<Folder, YamlMap> embedderYamls = locator.embedderYamls; |
| - EmbedderSdk embedderSdk = new EmbedderSdk(resourceProvider, embedderYamls); |
| - if (embedderSdk.libraryMap.size() == 0) { |
| - // There was no embedder file, or the file was empty, so used the default |
| - // SDK. |
| - resolvers.add(new DartUriResolver( |
| - analysisServer.sdkManager.getSdkForOptions(options))); |
| - } else { |
| - // The embedder file defines an alternate SDK, so use it. |
| - List<String> paths = <String>[]; |
| - for (Folder folder in embedderYamls.keys) { |
| - paths.add(folder |
| - .getChildAssumingFile(EmbedderYamlLocator.EMBEDDER_FILE_NAME) |
| - .path); |
| - } |
| - paths.addAll(extFilePaths); |
| - DartSdk dartSdk = analysisServer.sdkManager |
| - .getSdk(new SdkDescription(paths, options), () { |
| - if (extFilePaths.isNotEmpty) { |
| - embedderSdk.addExtensions(extFinder.urlMappings); |
| - } |
| - embedderSdk.analysisOptions = options; |
| - // TODO(brianwilkerson) Enable summary use after we have decided where |
| - // summary files for embedder files will live. |
| - embedderSdk.useSummary = false; |
| - return embedderSdk; |
| - }); |
| - resolvers.add(new DartUriResolver(dartSdk)); |
| - } |
| - |
| - resolvers.addAll(packageUriResolvers); |
| - UriResolver fileResolver; |
| - if (context.fileResolverProvider != null) { |
| - fileResolver = context.fileResolverProvider(folder); |
| - } |
| - resolvers.add(fileResolver ?? new ResourceUriResolver(resourceProvider)); |
| - return new SourceFactory(resolvers, disposition.packages); |
| - } |
| } |
| /** |