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..12b6378a777afc9892a2cf3881af9bbf8602601f 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.path]; |
+ 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); |
- } |
} |
/** |