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

Side by Side Diff: sdk/lib/_internal/pub/lib/src/barback/load_transformers.dart

Issue 198053009: Use real "package:" imports in pub's plugin-loading code. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 6 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 pub.load_transformers; 5 library pub.load_transformers;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:isolate'; 9 import 'dart:isolate';
10 10
(...skipping 16 matching lines...) Expand all
27 /// Load and return all transformers and groups from the library identified by 27 /// Load and return all transformers and groups from the library identified by
28 /// [id]. 28 /// [id].
29 Future<Set> loadTransformers(BuildEnvironment environment, 29 Future<Set> loadTransformers(BuildEnvironment environment,
30 BarbackServer transformerServer, TransformerId id) { 30 BarbackServer transformerServer, TransformerId id) {
31 return id.getAssetId(environment.barback).then((assetId) { 31 return id.getAssetId(environment.barback).then((assetId) {
32 var path = assetId.path.replaceFirst('lib/', ''); 32 var path = assetId.path.replaceFirst('lib/', '');
33 // TODO(nweiz): load from a "package:" URI when issue 12474 is fixed. 33 // TODO(nweiz): load from a "package:" URI when issue 12474 is fixed.
34 34
35 var baseUrl = transformerServer.url; 35 var baseUrl = transformerServer.url;
36 var uri = '$baseUrl/packages/${id.package}/$path'; 36 var uri = '$baseUrl/packages/${id.package}/$path';
37 var code = 'import "$uri";\n' + 37 var code = """
38 readAsset(p.join("dart", "transformer_isolate.dart")) 38 import 'dart:isolate';
39 .replaceAll('<<URL_BASE>>', baseUrl); 39
40 import '$uri';
41
42 import r'$baseUrl/packages/\$pub/transformer_isolate.dart';
43
44 void main(_, SendPort replyTo) => loadTransformers(replyTo);
45 """;
40 log.fine("Loading transformers from $assetId"); 46 log.fine("Loading transformers from $assetId");
41 47
42 var port = new ReceivePort(); 48 var port = new ReceivePort();
43 return dart.runInIsolate(code, port.sendPort) 49 return dart.runInIsolate(code, port.sendPort)
44 .then((_) => port.first) 50 .then((_) => port.first)
45 .then((sendPort) { 51 .then((sendPort) {
46 return _call(sendPort, { 52 return _call(sendPort, {
47 'library': uri, 53 'library': uri,
48 'mode': environment.mode.name, 54 'mode': environment.mode.name,
49 // TODO(nweiz): support non-JSON-encodable configuration maps. 55 // TODO(nweiz): support non-JSON-encodable configuration maps.
50 'configuration': JSON.encode(id.configuration) 56 'configuration': JSON.encode(id.configuration)
51 }).then((transformers) { 57 }).then((transformers) {
52 transformers = transformers.map( 58 transformers = transformers.map(
53 (transformer) => _deserializeTransformerOrGroup(transformer, id)) 59 (transformer) => _deserializeTransformerOrGroup(transformer, id))
54 .toSet(); 60 .toSet();
55 log.fine("Transformers from $assetId: $transformers"); 61 log.fine("Transformers from $assetId: $transformers");
56 return transformers; 62 return transformers;
57 }); 63 });
58 }).catchError((error, stackTrace) { 64 }).catchError((error, stackTrace) {
59 if (error is! dart.CrossIsolateException) throw error; 65 if (error is! dart.CrossIsolateException) throw error;
60 if (error.type != 'IsolateSpawnException') throw error; 66 if (error.type != 'IsolateSpawnException') throw error;
61 // TODO(nweiz): don't parse this as a string once issues 12617 and 12689 67 // TODO(nweiz): don't parse this as a string once issues 12617 and 12689
62 // are fixed. 68 // are fixed.
63 if (!error.message.split('\n')[1].startsWith('import "$uri";')) { 69 if (!error.message.split('\n')[1].endsWith("import '$uri';")) {
64 throw error; 70 throw error;
65 } 71 }
66 72
67 // If there was an IsolateSpawnException and the import that actually 73 // If there was an IsolateSpawnException and the import that actually
68 // failed was the one we were loading transformers from, throw an 74 // failed was the one we were loading transformers from, throw an
69 // application exception with a more user-friendly message. 75 // application exception with a more user-friendly message.
70 fail('Transformer library "package:${id.package}/$path" not found.', 76 fail('Transformer library "package:${id.package}/$path" not found.',
71 error, stackTrace); 77 error, stackTrace);
72 }); 78 });
73 }); 79 });
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 if (message['type'] == 'getInput') { 147 if (message['type'] == 'getInput') {
142 return transform.getInput(_deserializeId(message['id'])) 148 return transform.getInput(_deserializeId(message['id']))
143 .then((asset) => serializeAsset(asset)); 149 .then((asset) => serializeAsset(asset));
144 } 150 }
145 151
146 if (message['type'] == 'addOutput') { 152 if (message['type'] == 'addOutput') {
147 transform.addOutput(deserializeAsset(message['output'])); 153 transform.addOutput(deserializeAsset(message['output']));
148 return null; 154 return null;
149 } 155 }
150 156
157 if (message['type'] == 'consumePrimary') {
158 transform.consumePrimary();
159 return null;
160 }
161
151 assert(message['type'] == 'log'); 162 assert(message['type'] == 'log');
152 var method; 163 var method;
153 if (message['level'] == 'Info') { 164 if (message['level'] == 'Info') {
154 method = transform.logger.info; 165 method = transform.logger.info;
155 } else if (message['level'] == 'Fine') { 166 } else if (message['level'] == 'Fine') {
156 method = transform.logger.fine; 167 method = transform.logger.fine;
157 } else if (message['level'] == 'Warning') { 168 } else if (message['level'] == 'Warning') {
158 method = transform.logger.warning; 169 method = transform.logger.warning;
159 } else { 170 } else {
160 assert(message['level'] == 'Error'); 171 assert(message['level'] == 'Error');
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 /// 288 ///
278 /// This handles [AssetNotFoundException]s specially, ensuring that their 289 /// This handles [AssetNotFoundException]s specially, ensuring that their
279 /// metadata is preserved. 290 /// metadata is preserved.
280 dart.CrossIsolateException _deserializeException(Map error) { 291 dart.CrossIsolateException _deserializeException(Map error) {
281 if (error['type'] == 'AssetNotFoundException') { 292 if (error['type'] == 'AssetNotFoundException') {
282 return new _CrossIsolateAssetNotFoundException.deserialize(error); 293 return new _CrossIsolateAssetNotFoundException.deserialize(error);
283 } else { 294 } else {
284 return new dart.CrossIsolateException.deserialize(error); 295 return new dart.CrossIsolateException.deserialize(error);
285 } 296 }
286 } 297 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698