OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 mirrors_dart2js; | 5 library mirrors_dart2js; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:collection' show LinkedHashMap; | 8 import 'dart:collection' show LinkedHashMap; |
9 import 'dart:io' show Path; | 9 import 'dart:io' show Path; |
10 import 'dart:uri'; | 10 import 'dart:uri'; |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 * has been successfully compiled. | 202 * has been successfully compiled. |
203 * | 203 * |
204 * TODO(johnniwinther): The method is deprecated but here to support [Path] | 204 * TODO(johnniwinther): The method is deprecated but here to support [Path] |
205 * which is used through dartdoc. | 205 * which is used through dartdoc. |
206 */ | 206 */ |
207 Future<String> compile(Path script, | 207 Future<String> compile(Path script, |
208 Path libraryRoot, | 208 Path libraryRoot, |
209 {Path packageRoot, | 209 {Path packageRoot, |
210 List<String> options: const <String>[], | 210 List<String> options: const <String>[], |
211 api.DiagnosticHandler diagnosticHandler}) { | 211 api.DiagnosticHandler diagnosticHandler}) { |
212 Uri cwd = getCurrentDirectory(); | |
213 SourceFileProvider provider = new SourceFileProvider(); | 212 SourceFileProvider provider = new SourceFileProvider(); |
214 if (diagnosticHandler == null) { | 213 if (diagnosticHandler == null) { |
215 diagnosticHandler = | 214 diagnosticHandler = |
216 new FormattingDiagnosticHandler(provider).diagnosticHandler; | 215 new FormattingDiagnosticHandler(provider).diagnosticHandler; |
217 } | 216 } |
218 Uri scriptUri = cwd.resolve(script.toString()); | 217 Uri scriptUri = currentDirectory.resolve(script.toString()); |
219 Uri libraryUri = cwd.resolve('${libraryRoot}/'); | 218 Uri libraryUri = currentDirectory.resolve('${libraryRoot}/'); |
220 Uri packageUri = null; | 219 Uri packageUri = null; |
221 if (packageRoot != null) { | 220 if (packageRoot != null) { |
222 packageUri = cwd.resolve('${packageRoot}/'); | 221 packageUri = currentDirectory.resolve('${packageRoot}/'); |
223 } | 222 } |
224 return api.compile(scriptUri, libraryUri, packageUri, | 223 return api.compile(scriptUri, libraryUri, packageUri, |
225 provider.readStringFromUri, diagnosticHandler, options); | 224 provider.readStringFromUri, diagnosticHandler, options); |
226 } | 225 } |
227 | 226 |
228 /** | 227 /** |
229 * Analyzes set of libraries and provides a mirror system which can be used for | 228 * Analyzes set of libraries and provides a mirror system which can be used for |
230 * static inspection of the source code. | 229 * static inspection of the source code. |
231 */ | 230 */ |
232 // TODO(johnniwinther): Move this to [compiler/compiler.dart] and rename to | 231 // TODO(johnniwinther): Move this to [compiler/compiler.dart] and rename to |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 * Analyzes set of libraries and provides a mirror system which can be used for | 276 * Analyzes set of libraries and provides a mirror system which can be used for |
278 * static inspection of the source code. | 277 * static inspection of the source code. |
279 */ | 278 */ |
280 // TODO(johnniwinther): Move dart:io dependent parts outside | 279 // TODO(johnniwinther): Move dart:io dependent parts outside |
281 // dart2js_mirror.dart. | 280 // dart2js_mirror.dart. |
282 Future<MirrorSystem> analyze(List<Path> libraries, | 281 Future<MirrorSystem> analyze(List<Path> libraries, |
283 Path libraryRoot, | 282 Path libraryRoot, |
284 {Path packageRoot, | 283 {Path packageRoot, |
285 List<String> options: const <String>[], | 284 List<String> options: const <String>[], |
286 api.DiagnosticHandler diagnosticHandler}) { | 285 api.DiagnosticHandler diagnosticHandler}) { |
287 Uri cwd = getCurrentDirectory(); | |
288 SourceFileProvider provider = new SourceFileProvider(); | 286 SourceFileProvider provider = new SourceFileProvider(); |
289 if (diagnosticHandler == null) { | 287 if (diagnosticHandler == null) { |
290 diagnosticHandler = | 288 diagnosticHandler = |
291 new FormattingDiagnosticHandler(provider).diagnosticHandler; | 289 new FormattingDiagnosticHandler(provider).diagnosticHandler; |
292 } | 290 } |
293 Uri libraryUri = cwd.resolve('${libraryRoot}/'); | 291 Uri libraryUri = currentDirectory.resolve('${libraryRoot}/'); |
294 Uri packageUri = null; | 292 Uri packageUri = null; |
295 if (packageRoot != null) { | 293 if (packageRoot != null) { |
296 packageUri = cwd.resolve('${packageRoot}/'); | 294 packageUri = currentDirectory.resolve('${packageRoot}/'); |
297 } | 295 } |
298 List<Uri> librariesUri = <Uri>[]; | 296 List<Uri> librariesUri = <Uri>[]; |
299 for (Path library in libraries) { | 297 for (Path library in libraries) { |
300 librariesUri.add(cwd.resolve(library.toString())); | 298 librariesUri.add(currentDirectory.resolve(library.toString())); |
301 } | 299 } |
302 return analyzeUri(librariesUri, libraryUri, packageUri, | 300 return analyzeUri(librariesUri, libraryUri, packageUri, |
303 provider.readStringFromUri, diagnosticHandler, options); | 301 provider.readStringFromUri, diagnosticHandler, options); |
304 } | 302 } |
305 | 303 |
306 //------------------------------------------------------------------------------ | 304 //------------------------------------------------------------------------------ |
307 // Dart2Js specific extensions of mirror interfaces | 305 // Dart2Js specific extensions of mirror interfaces |
308 //------------------------------------------------------------------------------ | 306 //------------------------------------------------------------------------------ |
309 | 307 |
310 abstract class Dart2JsMirror implements Mirror { | 308 abstract class Dart2JsMirror implements Mirror { |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 | 460 |
463 bool get isParameter => false; | 461 bool get isParameter => false; |
464 } | 462 } |
465 | 463 |
466 //------------------------------------------------------------------------------ | 464 //------------------------------------------------------------------------------ |
467 // Mirror system implementation. | 465 // Mirror system implementation. |
468 //------------------------------------------------------------------------------ | 466 //------------------------------------------------------------------------------ |
469 | 467 |
470 class Dart2JsMirrorSystem implements MirrorSystem { | 468 class Dart2JsMirrorSystem implements MirrorSystem { |
471 final Compiler compiler; | 469 final Compiler compiler; |
472 Map<String, Dart2JsLibraryMirror> _libraries; | 470 Map<Uri, Dart2JsLibraryMirror> _libraries; |
473 Map<LibraryElement, Dart2JsLibraryMirror> _libraryMap; | 471 Map<LibraryElement, Dart2JsLibraryMirror> _libraryMap; |
474 | 472 |
475 Dart2JsMirrorSystem(this.compiler) | 473 Dart2JsMirrorSystem(this.compiler) |
476 : _libraryMap = new Map<LibraryElement, Dart2JsLibraryMirror>(); | 474 : _libraryMap = new Map<LibraryElement, Dart2JsLibraryMirror>(); |
477 | 475 |
478 void _ensureLibraries() { | 476 void _ensureLibraries() { |
479 if (_libraries == null) { | 477 if (_libraries == null) { |
480 _libraries = <String, Dart2JsLibraryMirror>{}; | 478 _libraries = new Map<Uri, Dart2JsLibraryMirror>(); |
481 compiler.libraries.forEach((_, LibraryElement v) { | 479 compiler.libraries.forEach((_, LibraryElement v) { |
482 var mirror = new Dart2JsLibraryMirror(mirrors, v); | 480 var mirror = new Dart2JsLibraryMirror(mirrors, v); |
483 _libraries[mirror.simpleName] = mirror; | 481 _libraries[mirror.uri] = mirror; |
484 _libraryMap[v] = mirror; | 482 _libraryMap[v] = mirror; |
485 }); | 483 }); |
486 } | 484 } |
487 } | 485 } |
488 | 486 |
489 Map<String, LibraryMirror> get libraries { | 487 Map<Uri, LibraryMirror> get libraries { |
490 _ensureLibraries(); | 488 _ensureLibraries(); |
491 return new ImmutableMapWrapper<String, LibraryMirror>(_libraries); | 489 return new ImmutableMapWrapper<Uri, LibraryMirror>(_libraries); |
492 } | 490 } |
493 | 491 |
494 Dart2JsLibraryMirror _getLibrary(LibraryElement element) => | 492 Dart2JsLibraryMirror _getLibrary(LibraryElement element) => |
495 _libraryMap[element]; | 493 _libraryMap[element]; |
496 | 494 |
497 Dart2JsMirrorSystem get mirrors => this; | 495 Dart2JsMirrorSystem get mirrors => this; |
498 | 496 |
499 TypeMirror get dynamicType => | 497 TypeMirror get dynamicType => |
500 _convertTypeToTypeMirror(this, compiler.types.dynamicType, null); | 498 _convertTypeToTypeMirror(this, compiler.types.dynamicType, null); |
501 | 499 |
(...skipping 1249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1751 return new Future.immediate( | 1749 return new Future.immediate( |
1752 new Dart2JsStringConstantMirror.fromString(mirrors, text)); | 1750 new Dart2JsStringConstantMirror.fromString(mirrors, text)); |
1753 } else if (fieldName == 'trimmedText') { | 1751 } else if (fieldName == 'trimmedText') { |
1754 return new Future.immediate( | 1752 return new Future.immediate( |
1755 new Dart2JsStringConstantMirror.fromString(mirrors, trimmedText)); | 1753 new Dart2JsStringConstantMirror.fromString(mirrors, trimmedText)); |
1756 } | 1754 } |
1757 // TODO(johnniwinther): Which exception/error should be thrown here? | 1755 // TODO(johnniwinther): Which exception/error should be thrown here? |
1758 throw new UnsupportedError('InstanceMirror does not have a reflectee'); | 1756 throw new UnsupportedError('InstanceMirror does not have a reflectee'); |
1759 } | 1757 } |
1760 } | 1758 } |
OLD | NEW |