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

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

Issue 1643023002: Embedded libs key rename to defuse server landmine. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
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';
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/test/context_manager_test.dart ('k') | pkg/analyzer/test/source/embedder_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698