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 25d639f3aaa008825821ca2c229bd634c969bdad..7e695a2762d8b459f62846e0663eaa077de8b1a1 100644 |
--- a/pkg/analysis_server/lib/src/analysis_server.dart |
+++ b/pkg/analysis_server/lib/src/analysis_server.dart |
@@ -43,6 +43,7 @@ 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); |
@@ -151,11 +152,6 @@ class AnalysisServer { |
List<RequestHandler> handlers; |
/** |
- * The function used to create a new SDK using the default SDK. |
- */ |
- final SdkCreator defaultSdkCreator; |
- |
- /** |
* The object used to manage the SDK's known to this server. |
*/ |
DartSdkManager sdkManager; |
@@ -317,7 +313,7 @@ class AnalysisServer { |
Index _index, |
this.serverPlugin, |
this.options, |
- this.defaultSdkCreator, |
+ this.sdkManager, |
this.instrumentationService, |
{ResolverProvider fileResolverProvider: null, |
ResolverProvider packageResolverProvider: null, |
@@ -335,7 +331,6 @@ class AnalysisServer { |
options.finerGrainedInvalidation; |
defaultContextOptions.generateImplicitErrors = false; |
operationQueue = new ServerOperationQueue(); |
- sdkManager = new DartSdkManager(defaultSdkCreator); |
if (useSingleContextManager) { |
contextManager = new SingleContextManager(resourceProvider, sdkManager, |
packageResolverProvider, analyzedFilesGlobs, defaultContextOptions); |
@@ -1639,15 +1634,30 @@ class ServerContextManagerCallbacks extends ContextManagerCallbacks { |
// If no embedded URI resolver was provided, defer to a locator-backed one. |
EmbedderYamlLocator locator = |
disposition.getEmbedderLocator(resourceProvider); |
- EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
- if (sdk.libraryMap.size() == 0) { |
- // The embedder file has no mappings, so use the default Dart SDK. |
+ Map<Folder, YamlMap> embedderYamls = locator.embedderYamls; |
+ EmbedderSdk embedderSdk = new EmbedderSdk(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 uri resolver has mappings, use it instead of the default |
- // Dart SDK uri resolver. |
- resolvers.add(new DartUriResolver(sdk)); |
+ // 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); |
+ } |
+ DartSdk dartSdk = analysisServer.sdkManager |
+ .getSdk(new SdkDescription(paths, options), () { |
+ 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); |