Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: pkg/analyzer/lib/source/embedder.dart

Issue 2208503004: Move embedder locator and convert context builder to use the new API (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/context/builder.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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';
11 import 'package:analyzer/source/package_map_provider.dart' 11 import 'package:analyzer/source/package_map_provider.dart'
12 show PackageMapProvider; 12 show PackageMapProvider;
13 import 'package:analyzer/src/generated/java_core.dart'; 13 import 'package:analyzer/src/generated/java_core.dart';
14 import 'package:analyzer/src/generated/java_io.dart' show JavaFile; 14 import 'package:analyzer/src/generated/java_io.dart' show JavaFile;
15 import 'package:analyzer/src/generated/sdk.dart'; 15 import 'package:analyzer/src/generated/sdk.dart';
16 import 'package:analyzer/src/generated/sdk_io.dart'; 16 import 'package:analyzer/src/generated/sdk_io.dart';
17 import 'package:analyzer/src/generated/source.dart'; 17 import 'package:analyzer/src/generated/source.dart';
18 import 'package:analyzer/src/generated/source_io.dart' show FileBasedSource; 18 import 'package:analyzer/src/generated/source_io.dart' show FileBasedSource;
19 import 'package:analyzer/src/summary/idl.dart'; 19 import 'package:analyzer/src/summary/idl.dart';
20 import 'package:yaml/yaml.dart'; 20 import 'package:yaml/yaml.dart';
21 21
22 export 'package:analyzer/src/context/builder.dart' show EmbedderYamlLocator;
23
22 const String _DART_COLON_PREFIX = 'dart:'; 24 const String _DART_COLON_PREFIX = 'dart:';
23 const String _EMBEDDED_LIB_MAP_KEY = 'embedded_libs'; 25 const String _EMBEDDED_LIB_MAP_KEY = 'embedded_libs';
24 26
25 /// Check if this map defines embedded libraries. 27 /// Check if this map defines embedded libraries.
26 bool definesEmbeddedLibs(Map map) => map[_EMBEDDED_LIB_MAP_KEY] != null; 28 bool definesEmbeddedLibs(Map map) => map[_EMBEDDED_LIB_MAP_KEY] != null;
27 29
28 /// An SDK backed by URI mappings derived from an `_embedder.yaml` file. 30 /// An SDK backed by URI mappings derived from an `_embedder.yaml` file.
29 class EmbedderSdk extends AbstractDartSdk { 31 class EmbedderSdk extends AbstractDartSdk {
30 final Map<String, String> _urlMappings = new HashMap<String, String>(); 32 final Map<String, String> _urlMappings = new HashMap<String, String>();
31 33
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 @override 170 @override
169 Uri restoreAbsolute(Source source) { 171 Uri restoreAbsolute(Source source) {
170 String path = source.fullName; 172 String path = source.fullName;
171 if (path.length > 3 && path[1] == ':' && path[2] == '\\') { 173 if (path.length > 3 && path[1] == ':' && path[2] == '\\') {
172 path = '/${path[0]}:${path.substring(2).replaceAll('\\', '/')}'; 174 path = '/${path[0]}:${path.substring(2).replaceAll('\\', '/')}';
173 } 175 }
174 Source sdkSource = dartSdk.fromFileUri(Uri.parse('file://$path')); 176 Source sdkSource = dartSdk.fromFileUri(Uri.parse('file://$path'));
175 return sdkSource?.uri; 177 return sdkSource?.uri;
176 } 178 }
177 } 179 }
178
179 /// Given a packageMap, check in each package's lib directory for the
180 /// existence of an `_embedder.yaml` file. If the file contains a top level
181 /// YamlMap, it will be added to the [embedderYamls] map.
182 class EmbedderYamlLocator {
183 static const String EMBEDDER_FILE_NAME = '_embedder.yaml';
184
185 /// Map from package's library directory to the parsed YamlMap.
186 final Map<Folder, YamlMap> embedderYamls = new HashMap<Folder, YamlMap>();
187
188 EmbedderYamlLocator(Map<String, List<Folder>> packageMap) {
189 if (packageMap != null) {
190 _processPackageMap(packageMap);
191 }
192 }
193
194 /// Programatically add an _embedder.yaml mapping.
195 void addEmbedderYaml(Folder libDir, String embedderYaml) {
196 _processEmbedderYaml(libDir, embedderYaml);
197 }
198
199 void refresh(Map<String, List<Folder>> packageMap) {
200 // Clear existing.
201 embedderYamls.clear();
202 if (packageMap != null) {
203 _processPackageMap(packageMap);
204 }
205 }
206
207 /// Given the yaml for an embedder ([embedderYaml]) and a folder
208 /// ([libDir]), setup the uri mapping.
209 void _processEmbedderYaml(Folder libDir, String embedderYaml) {
210 YamlNode yaml;
211 try {
212 yaml = loadYaml(embedderYaml);
213 } catch (_) {
214 return;
215 }
216 if (yaml is! YamlMap) {
217 return;
218 }
219 embedderYamls[libDir] = yaml;
220 }
221
222 /// Given a package [name] and a list of folders ([libDirs]),
223 /// add any found `_embedder.yaml` files.
224 void _processPackage(String name, List<Folder> libDirs) {
225 for (Folder libDir in libDirs) {
226 String embedderYaml = _readEmbedderYaml(libDir);
227 if (embedderYaml != null) {
228 _processEmbedderYaml(libDir, embedderYaml);
229 }
230 }
231 }
232
233 void _processPackageMap(Map<String, List<Folder>> packageMap) {
234 packageMap.forEach(_processPackage);
235 }
236
237 /// Read the contents of [libDir]/[EMBEDDER_FILE_NAME] as a string.
238 /// Returns null if the file doesn't exist.
239 String _readEmbedderYaml(Folder libDir) {
240 File file = libDir.getChild(EMBEDDER_FILE_NAME);
241 try {
242 return file.readAsStringSync();
243 } on FileSystemException {
244 // File can't be read.
245 return null;
246 }
247 }
248 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/context/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698