| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 analyzer.src.context.context_builder; | 5 library analyzer.src.context.context_builder; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 import 'dart:core' hide Resource; | 8 import 'dart:core' hide Resource; |
| 9 import 'dart:io' as io; | 9 import 'dart:io' as io; |
| 10 | 10 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 new ResourceUriResolver(resourceProvider) | 182 new ResourceUriResolver(resourceProvider) |
| 183 ]; | 183 ]; |
| 184 return new SourceFactory(resolvers); | 184 return new SourceFactory(resolvers); |
| 185 } | 185 } |
| 186 } | 186 } |
| 187 Map<String, List<Folder>> packageMap = | 187 Map<String, List<Folder>> packageMap = |
| 188 convertPackagesToMap(createPackageMap(rootDirectoryPath)); | 188 convertPackagesToMap(createPackageMap(rootDirectoryPath)); |
| 189 List<UriResolver> resolvers = <UriResolver>[]; | 189 List<UriResolver> resolvers = <UriResolver>[]; |
| 190 resolvers.add(new DartUriResolver(findSdk(packageMap, options))); | 190 resolvers.add(new DartUriResolver(findSdk(packageMap, options))); |
| 191 if (packageMap != null) { | 191 if (packageMap != null) { |
| 192 resolvers.add(new SdkExtUriResolver(packageMap)); | |
| 193 resolvers.add(new PackageMapUriResolver(resourceProvider, packageMap)); | 192 resolvers.add(new PackageMapUriResolver(resourceProvider, packageMap)); |
| 194 } | 193 } |
| 195 resolvers.add(new ResourceUriResolver(resourceProvider)); | 194 resolvers.add(new ResourceUriResolver(resourceProvider)); |
| 196 return new SourceFactory(resolvers); | 195 return new SourceFactory(resolvers); |
| 197 } | 196 } |
| 198 | 197 |
| 199 /** | 198 /** |
| 200 * Use the given [packageMap] and [options] to locate the SDK. | 199 * Use the given [packageMap] and [options] to locate the SDK. |
| 201 */ | 200 */ |
| 202 DartSdk findSdk( | 201 DartSdk findSdk( |
| 203 Map<String, List<Folder>> packageMap, AnalysisOptions options) { | 202 Map<String, List<Folder>> packageMap, AnalysisOptions options) { |
| 204 if (packageMap != null) { | 203 if (packageMap != null) { |
| 204 // TODO(brianwilkerson) Fix it so that we don't have to create a resolver |
| 205 // to figure out what the extensions are. |
| 206 SdkExtUriResolver extResolver = new SdkExtUriResolver(packageMap); |
| 207 List<String> extFilePaths = extResolver.extensionFilePaths; |
| 205 EmbedderYamlLocator locator = new EmbedderYamlLocator(packageMap); | 208 EmbedderYamlLocator locator = new EmbedderYamlLocator(packageMap); |
| 206 Map<Folder, YamlMap> embedderYamls = locator.embedderYamls; | 209 Map<Folder, YamlMap> embedderYamls = locator.embedderYamls; |
| 207 EmbedderSdk embedderSdk = new EmbedderSdk(embedderYamls); | 210 EmbedderSdk embedderSdk = new EmbedderSdk(embedderYamls); |
| 208 if (embedderSdk.sdkLibraries.length > 0) { | 211 if (embedderSdk.sdkLibraries.length > 0) { |
| 212 // |
| 213 // There is an embedder file that defines the content of the SDK and |
| 214 // there might be an extension file that extends it. |
| 215 // |
| 209 List<String> paths = <String>[]; | 216 List<String> paths = <String>[]; |
| 210 for (Folder folder in embedderYamls.keys) { | 217 for (Folder folder in embedderYamls.keys) { |
| 211 paths.add(folder | 218 paths.add(folder |
| 212 .getChildAssumingFile(EmbedderYamlLocator.EMBEDDER_FILE_NAME) | 219 .getChildAssumingFile(EmbedderYamlLocator.EMBEDDER_FILE_NAME) |
| 213 .path); | 220 .path); |
| 214 } | 221 } |
| 222 paths.addAll(extFilePaths); |
| 215 SdkDescription description = new SdkDescription(paths, options); | 223 SdkDescription description = new SdkDescription(paths, options); |
| 216 DartSdk dartSdk = sdkManager.getSdk(description, () { | 224 DartSdk dartSdk = sdkManager.getSdk(description, () { |
| 225 if (extFilePaths.isNotEmpty) { |
| 226 embedderSdk.addExtensions(extResolver.urlMappings); |
| 227 } |
| 217 embedderSdk.analysisOptions = options; | 228 embedderSdk.analysisOptions = options; |
| 218 embedderSdk.useSummary = sdkManager.canUseSummaries; | 229 embedderSdk.useSummary = sdkManager.canUseSummaries; |
| 219 return embedderSdk; | 230 return embedderSdk; |
| 220 }); | 231 }); |
| 221 return dartSdk; | 232 return dartSdk; |
| 233 } else if (extFilePaths != null) { |
| 234 // |
| 235 // We have an extension file, but no embedder file. |
| 236 // |
| 237 String sdkPath = sdkManager.defaultSdkDirectory; |
| 238 List<String> paths = <String>[sdkPath]; |
| 239 paths.addAll(extFilePaths); |
| 240 SdkDescription description = new SdkDescription(paths, options); |
| 241 return sdkManager.getSdk(description, () { |
| 242 DirectoryBasedDartSdk sdk = |
| 243 new DirectoryBasedDartSdk(new JavaFile(sdkPath)); |
| 244 if (extFilePaths.isNotEmpty) { |
| 245 embedderSdk.addExtensions(extResolver.urlMappings); |
| 246 } |
| 247 sdk.analysisOptions = options; |
| 248 sdk.useSummary = sdkManager.canUseSummaries; |
| 249 return sdk; |
| 250 }); |
| 222 } | 251 } |
| 223 } | 252 } |
| 224 String sdkPath = sdkManager.defaultSdkDirectory; | 253 String sdkPath = sdkManager.defaultSdkDirectory; |
| 225 SdkDescription description = new SdkDescription(<String>[sdkPath], options); | 254 SdkDescription description = new SdkDescription(<String>[sdkPath], options); |
| 226 return sdkManager.getSdk(description, () { | 255 return sdkManager.getSdk(description, () { |
| 227 DirectoryBasedDartSdk sdk = | 256 DirectoryBasedDartSdk sdk = |
| 228 new DirectoryBasedDartSdk(new JavaFile(sdkPath)); | 257 new DirectoryBasedDartSdk(new JavaFile(sdkPath)); |
| 229 sdk.analysisOptions = options; | 258 sdk.analysisOptions = options; |
| 230 sdk.useSummary = sdkManager.canUseSummaries; | 259 sdk.useSummary = sdkManager.canUseSummaries; |
| 231 return sdk; | 260 return sdk; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 256 } | 285 } |
| 257 file = folder | 286 file = folder |
| 258 .getChildAssumingFile(AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE); | 287 .getChildAssumingFile(AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE); |
| 259 if (file.exists) { | 288 if (file.exists) { |
| 260 return file; | 289 return file; |
| 261 } | 290 } |
| 262 } | 291 } |
| 263 return null; | 292 return null; |
| 264 } | 293 } |
| 265 } | 294 } |
| OLD | NEW |