| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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.source.embedder; | 5 library analyzer.source.embedder; |
| 6 | 6 |
| 7 import 'dart:collection' show HashMap; | 7 import 'dart:collection' show HashMap; |
| 8 import 'dart:core' hide Resource; | 8 import 'dart:core' hide Resource; |
| 9 | 9 |
| 10 import 'package:analyzer/file_system/file_system.dart'; | 10 import 'package:analyzer/file_system/file_system.dart'; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 try { | 92 try { |
| 93 return file.readAsStringSync(); | 93 return file.readAsStringSync(); |
| 94 } on FileSystemException { | 94 } on FileSystemException { |
| 95 // File can't be read. | 95 // File can't be read. |
| 96 return null; | 96 return null; |
| 97 } | 97 } |
| 98 } | 98 } |
| 99 } | 99 } |
| 100 | 100 |
| 101 /// Given the [embedderYamls] from [EmbedderYamlLocator] check each one for the | 101 /// Given the [embedderYamls] from [EmbedderYamlLocator] check each one for the |
| 102 /// top level key 'embedder_libs'. Under the 'embedder_libs' key are key value | 102 /// top level key 'embedded_libs'. Under the 'embedded_libs' key are key value |
| 103 /// pairs. Each key is a 'dart:' library uri and each value is a path | 103 /// pairs. Each key is a 'dart:' library uri and each value is a path |
| 104 /// (relative to the directory containing `_embedder.yaml`) to a dart script | 104 /// (relative to the directory containing `_embedder.yaml`) to a dart script |
| 105 /// for the given library. For example: | 105 /// for the given library. For example: |
| 106 /// | 106 /// |
| 107 /// embedder_libs: | 107 /// embedded_libs: |
| 108 /// 'dart:io': '../../sdk/io/io.dart' | 108 /// 'dart:io': '../../sdk/io/io.dart' |
| 109 /// | 109 /// |
| 110 /// If a key doesn't begin with `dart:` it is ignored. | 110 /// If a key doesn't begin with `dart:` it is ignored. |
| 111 /// | 111 /// |
| 112 class EmbedderUriResolver extends DartUriResolver { | 112 class EmbedderUriResolver extends DartUriResolver { |
| 113 final Map<String, String> _urlMappings = <String, String>{}; | 113 final Map<String, String> _urlMappings = <String, String>{}; |
| 114 | 114 |
| 115 /// Construct a [EmbedderUriResolver] from a package map | 115 /// Construct a [EmbedderUriResolver] from a package map |
| 116 /// (see [PackageMapProvider]). | 116 /// (see [PackageMapProvider]). |
| 117 EmbedderUriResolver(Map<Folder, YamlMap> embedderYamls) | 117 EmbedderUriResolver(Map<Folder, YamlMap> embedderYamls) |
| 118 : super(new EmbedderSdk()) { | 118 : super(new EmbedderSdk()) { |
| 119 (dartSdk as EmbedderSdk)._resolver = this; | 119 (dartSdk as EmbedderSdk)._resolver = this; |
| 120 if (embedderYamls == null) { | 120 if (embedderYamls == null) { |
| 121 return; | 121 return; |
| 122 } | 122 } |
| 123 embedderYamls.forEach(_processEmbedderYaml); | 123 embedderYamls.forEach(_processEmbedderYaml); |
| 124 } | 124 } |
| 125 | 125 |
| 126 void _processEmbedderYaml(Folder libDir, YamlMap map) { | 126 void _processEmbedderYaml(Folder libDir, YamlMap map) { |
| 127 YamlNode embedder_libs = map['embedder_libs']; | 127 YamlNode embedded_libs = map['embedded_libs']; |
| 128 if (embedder_libs == null) { | 128 if (embedded_libs == null) { |
| 129 return; | 129 return; |
| 130 } | 130 } |
| 131 if (embedder_libs is! YamlMap) { | 131 if (embedded_libs is! YamlMap) { |
| 132 return; | 132 return; |
| 133 } | 133 } |
| 134 (embedder_libs as YamlMap) | 134 (embedded_libs as YamlMap) |
| 135 .forEach((k, v) => _processEmbedderLibs(k, v, libDir)); | 135 .forEach((k, v) => _processEmbeddedLibs(k, v, libDir)); |
| 136 } | 136 } |
| 137 | 137 |
| 138 /// Install the mapping from [name] to [libDir]/[file]. | 138 /// Install the mapping from [name] to [libDir]/[file]. |
| 139 void _processEmbedderLibs(String name, String file, Folder libDir) { | 139 void _processEmbeddedLibs(String name, String file, Folder libDir) { |
| 140 if (!name.startsWith(_DART_COLON_PREFIX)) { | 140 if (!name.startsWith(_DART_COLON_PREFIX)) { |
| 141 // SDK libraries must begin with 'dart:'. | 141 // SDK libraries must begin with 'dart:'. |
| 142 // TODO(pquitslund): Notify developer that something is wrong with the | 142 // TODO(pquitslund): Notify developer that something is wrong with the |
| 143 // _embedder.yaml file in libDir. | 143 // _embedder.yaml file in libDir. |
| 144 return; | 144 return; |
| 145 } | 145 } |
| 146 String libPath = libDir.canonicalizePath(file); | 146 String libPath = libDir.canonicalizePath(file); |
| 147 _urlMappings[name] = libPath; | 147 _urlMappings[name] = libPath; |
| 148 String shortName = name.substring(_DART_COLON_PREFIX.length); | 148 String shortName = name.substring(_DART_COLON_PREFIX.length); |
| 149 SdkLibraryImpl library = new SdkLibraryImpl(shortName); | 149 SdkLibraryImpl library = new SdkLibraryImpl(shortName); |
| 150 library.path = libPath; | 150 library.path = libPath; |
| 151 (dartSdk as EmbedderSdk)._librariesMap.setLibrary(name, library); | 151 (dartSdk as EmbedderSdk)._librariesMap.setLibrary(name, library); |
| 152 } | 152 } |
| 153 | 153 |
| 154 /// Number of embedder libraries. | 154 /// Number of embedded libraries. |
| 155 int get length => _urlMappings.length; | 155 int get length => _urlMappings.length; |
| 156 | 156 |
| 157 @override | 157 @override |
| 158 Uri restoreAbsolute(Source source) { | 158 Uri restoreAbsolute(Source source) { |
| 159 String path = source.fullName; | 159 String path = source.fullName; |
| 160 if (path.length > 3 && path[1] == ':' && path[2] == '\\') { | 160 if (path.length > 3 && path[1] == ':' && path[2] == '\\') { |
| 161 path = '/${path[0]}:${path.substring(2).replaceAll('\\', '/')}'; | 161 path = '/${path[0]}:${path.substring(2).replaceAll('\\', '/')}'; |
| 162 } | 162 } |
| 163 Source sdkSource = dartSdk.fromFileUri(Uri.parse('file://$path')); | 163 Source sdkSource = dartSdk.fromFileUri(Uri.parse('file://$path')); |
| 164 return sdkSource?.uri; | 164 return sdkSource?.uri; |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 } | 284 } |
| 285 String filePath = srcPath.replaceAll('/', JavaFile.separator); | 285 String filePath = srcPath.replaceAll('/', JavaFile.separator); |
| 286 try { | 286 try { |
| 287 JavaFile file = new JavaFile(filePath); | 287 JavaFile file = new JavaFile(filePath); |
| 288 return new FileBasedSource(file, parseUriWithException(dartUri)); | 288 return new FileBasedSource(file, parseUriWithException(dartUri)); |
| 289 } on URISyntaxException { | 289 } on URISyntaxException { |
| 290 return null; | 290 return null; |
| 291 } | 291 } |
| 292 } | 292 } |
| 293 } | 293 } |
| OLD | NEW |