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 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 diagnosticHandler(uri, begin, end, message, kind); | 258 diagnosticHandler(uri, begin, end, message, kind); |
259 } | 259 } |
260 | 260 |
261 Compiler compiler = new apiimpl.Compiler(inputProvider, | 261 Compiler compiler = new apiimpl.Compiler(inputProvider, |
262 null, | 262 null, |
263 internalDiagnosticHandler, | 263 internalDiagnosticHandler, |
264 libraryRoot, packageRoot, options); | 264 libraryRoot, packageRoot, options); |
265 compiler.librariesToAnalyzeWhenRun = libraries; | 265 compiler.librariesToAnalyzeWhenRun = libraries; |
266 bool success = compiler.run(null); | 266 bool success = compiler.run(null); |
267 if (success && !compilationFailed) { | 267 if (success && !compilationFailed) { |
268 return new Future<MirrorSystem>.immediate( | 268 return new Future<MirrorSystem>.value(new Dart2JsMirrorSystem(compiler)); |
269 new Dart2JsMirrorSystem(compiler)); | |
270 } else { | 269 } else { |
271 return new Future<MirrorSystem>.immediateError( | 270 return new Future<MirrorSystem>.error('Failed to create mirror system.'); |
272 'Failed to create mirror system.'); | |
273 } | 271 } |
274 } | 272 } |
275 | 273 |
276 /** | 274 /** |
277 * Analyzes set of libraries and provides a mirror system which can be used for | 275 * Analyzes set of libraries and provides a mirror system which can be used for |
278 * static inspection of the source code. | 276 * static inspection of the source code. |
279 */ | 277 */ |
280 // TODO(johnniwinther): Move dart:io dependent parts outside | 278 // TODO(johnniwinther): Move dart:io dependent parts outside |
281 // dart2js_mirror.dart. | 279 // dart2js_mirror.dart. |
282 Future<MirrorSystem> analyze(List<Path> libraries, | 280 Future<MirrorSystem> analyze(List<Path> libraries, |
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1619 ListConstant constant) | 1617 ListConstant constant) |
1620 : super(mirrors, constant); | 1618 : super(mirrors, constant); |
1621 | 1619 |
1622 ListConstant get _constant => super._constant; | 1620 ListConstant get _constant => super._constant; |
1623 | 1621 |
1624 int get length => _constant.length; | 1622 int get length => _constant.length; |
1625 | 1623 |
1626 Future<InstanceMirror> operator[](int index) { | 1624 Future<InstanceMirror> operator[](int index) { |
1627 if (index < 0) throw new RangeError('Negative index'); | 1625 if (index < 0) throw new RangeError('Negative index'); |
1628 if (index >= _constant.length) throw new RangeError('Index out of bounds'); | 1626 if (index >= _constant.length) throw new RangeError('Index out of bounds'); |
1629 return new Future<InstanceMirror>.immediate( | 1627 return new Future<InstanceMirror>.value( |
1630 _convertConstantToInstanceMirror(mirrors, _constant.entries[index])); | 1628 _convertConstantToInstanceMirror(mirrors, _constant.entries[index])); |
1631 } | 1629 } |
1632 } | 1630 } |
1633 | 1631 |
1634 class Dart2JsMapConstantMirror extends Dart2JsConstantMirror | 1632 class Dart2JsMapConstantMirror extends Dart2JsConstantMirror |
1635 implements MapInstanceMirror { | 1633 implements MapInstanceMirror { |
1636 List<String> _listCache; | 1634 List<String> _listCache; |
1637 | 1635 |
1638 Dart2JsMapConstantMirror(Dart2JsMirrorSystem mirrors, | 1636 Dart2JsMapConstantMirror(Dart2JsMirrorSystem mirrors, |
1639 MapConstant constant) | 1637 MapConstant constant) |
(...skipping 16 matching lines...) Expand all Loading... |
1656 int get length => _constant.length; | 1654 int get length => _constant.length; |
1657 | 1655 |
1658 Iterable<String> get keys { | 1656 Iterable<String> get keys { |
1659 // TODO(johnniwinther): Return an unmodifiable list instead. | 1657 // TODO(johnniwinther): Return an unmodifiable list instead. |
1660 return new List<String>.from(_list); | 1658 return new List<String>.from(_list); |
1661 } | 1659 } |
1662 | 1660 |
1663 Future<InstanceMirror> operator[](String key) { | 1661 Future<InstanceMirror> operator[](String key) { |
1664 int index = _list.indexOf(key); | 1662 int index = _list.indexOf(key); |
1665 if (index == -1) return null; | 1663 if (index == -1) return null; |
1666 return new Future<InstanceMirror>.immediate( | 1664 return new Future<InstanceMirror>.value( |
1667 _convertConstantToInstanceMirror(mirrors, _constant.values[index])); | 1665 _convertConstantToInstanceMirror(mirrors, _constant.values[index])); |
1668 } | 1666 } |
1669 } | 1667 } |
1670 | 1668 |
1671 class Dart2JsTypeConstantMirror extends Dart2JsConstantMirror | 1669 class Dart2JsTypeConstantMirror extends Dart2JsConstantMirror |
1672 implements TypeInstanceMirror { | 1670 implements TypeInstanceMirror { |
1673 | 1671 |
1674 Dart2JsTypeConstantMirror(Dart2JsMirrorSystem mirrors, | 1672 Dart2JsTypeConstantMirror(Dart2JsMirrorSystem mirrors, |
1675 TypeConstant constant) | 1673 TypeConstant constant) |
1676 : super(mirrors, constant); | 1674 : super(mirrors, constant); |
(...skipping 25 matching lines...) Expand all Loading... |
1702 index++; | 1700 index++; |
1703 }, includeBackendMembers: true, includeSuperMembers: true); | 1701 }, includeBackendMembers: true, includeSuperMembers: true); |
1704 } | 1702 } |
1705 } | 1703 } |
1706 return _fieldMapCache; | 1704 return _fieldMapCache; |
1707 } | 1705 } |
1708 | 1706 |
1709 Future<InstanceMirror> getField(String fieldName) { | 1707 Future<InstanceMirror> getField(String fieldName) { |
1710 Constant fieldConstant = _fieldMap[fieldName]; | 1708 Constant fieldConstant = _fieldMap[fieldName]; |
1711 if (fieldConstant != null) { | 1709 if (fieldConstant != null) { |
1712 return new Future<InstanceMirror>.immediate( | 1710 return new Future<InstanceMirror>.value( |
1713 _convertConstantToInstanceMirror(mirrors, fieldConstant)); | 1711 _convertConstantToInstanceMirror(mirrors, fieldConstant)); |
1714 } | 1712 } |
1715 return super.getField(fieldName); | 1713 return super.getField(fieldName); |
1716 } | 1714 } |
1717 } | 1715 } |
1718 | 1716 |
1719 class Dart2JsCommentInstanceMirror implements CommentInstanceMirror { | 1717 class Dart2JsCommentInstanceMirror implements CommentInstanceMirror { |
1720 final Dart2JsMirrorSystem mirrors; | 1718 final Dart2JsMirrorSystem mirrors; |
1721 final String text; | 1719 final String text; |
1722 String _trimmedText; | 1720 String _trimmedText; |
(...skipping 15 matching lines...) Expand all Loading... |
1738 | 1736 |
1739 bool get hasReflectee => false; | 1737 bool get hasReflectee => false; |
1740 | 1738 |
1741 get reflectee { | 1739 get reflectee { |
1742 // TODO(johnniwinther): Which exception/error should be thrown here? | 1740 // TODO(johnniwinther): Which exception/error should be thrown here? |
1743 throw new UnsupportedError('InstanceMirror does not have a reflectee'); | 1741 throw new UnsupportedError('InstanceMirror does not have a reflectee'); |
1744 } | 1742 } |
1745 | 1743 |
1746 Future<InstanceMirror> getField(String fieldName) { | 1744 Future<InstanceMirror> getField(String fieldName) { |
1747 if (fieldName == 'isDocComment') { | 1745 if (fieldName == 'isDocComment') { |
1748 return new Future.immediate( | 1746 return new Future.value( |
1749 new Dart2JsBoolConstantMirror.fromBool(mirrors, isDocComment)); | 1747 new Dart2JsBoolConstantMirror.fromBool(mirrors, isDocComment)); |
1750 } else if (fieldName == 'text') { | 1748 } else if (fieldName == 'text') { |
1751 return new Future.immediate( | 1749 return new Future.value( |
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.value( |
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 |