| OLD | NEW |
| 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 dart._js_mirrors; | 5 library dart._js_mirrors; |
| 6 | 6 |
| 7 import 'dart:mirrors'; | 7 import 'dart:mirrors'; |
| 8 import 'dart:_foreign_helper' show JS; | 8 import 'dart:_foreign_helper' show JS; |
| 9 import 'dart:_internal' as _internal; | 9 import 'dart:_internal' as _internal; |
| 10 | 10 |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 if (constructors.isEmpty) { | 353 if (constructors.isEmpty) { |
| 354 // Add a default | 354 // Add a default |
| 355 var name = 'new'; | 355 var name = 'new'; |
| 356 var ft = _defaultConstructorType(_unwrap(_cls)); | 356 var ft = _defaultConstructorType(_unwrap(_cls)); |
| 357 var symbol = new Symbol(name); | 357 var symbol = new Symbol(name); |
| 358 _declarations[symbol] = | 358 _declarations[symbol] = |
| 359 new JsMethodMirror._constructor(this, symbol, ft); | 359 new JsMethodMirror._constructor(this, symbol, ft); |
| 360 } | 360 } |
| 361 var fields = _getFields(unwrapped); | 361 var fields = _getFields(unwrapped); |
| 362 fields.forEach((symbol, t) { | 362 fields.forEach((symbol, t) { |
| 363 var metadata = []; | 363 _declarations[symbol] = new JsVariableMirror._fromField(symbol, t); |
| 364 if (t is List) { | |
| 365 metadata = t.skip(1).toList(); | |
| 366 t = t[0]; | |
| 367 } | |
| 368 _declarations[symbol] = | |
| 369 new JsVariableMirror._(symbol, _wrap(t), metadata); | |
| 370 }); | 364 }); |
| 371 var methods = _getMethods(unwrapped); | 365 var methods = _getMethods(unwrapped); |
| 372 methods.forEach((symbol, ft) { | 366 methods.forEach((symbol, ft) { |
| 373 var name = getName(symbol); | 367 var name = getName(symbol); |
| 374 _declarations[symbol] = | 368 _declarations[symbol] = |
| 375 new JsMethodMirror._instanceMethod(this, symbol, ft); | 369 new JsMethodMirror._instanceMethod(this, symbol, ft); |
| 376 }); | 370 }); |
| 377 var getters = _getGetters(unwrapped); | 371 var getters = _getGetters(unwrapped); |
| 378 getters.forEach((symbol, ft) { | 372 getters.forEach((symbol, ft) { |
| 379 var name = getName(symbol); | 373 var name = getName(symbol); |
| 380 _declarations[symbol] = | 374 _declarations[symbol] = |
| 381 new JsMethodMirror._instanceMethod(this, symbol, ft); | 375 new JsMethodMirror._instanceMethod(this, symbol, ft); |
| 382 }); | 376 }); |
| 383 var setters = _getSetters(unwrapped); | 377 var setters = _getSetters(unwrapped); |
| 384 setters.forEach((symbol, ft) { | 378 setters.forEach((symbol, ft) { |
| 385 var name = getName(symbol) + '='; | 379 var name = getName(symbol) + '='; |
| 386 // Create a separate symbol for the setter. | 380 // Create a separate symbol for the setter. |
| 387 symbol = new _internal.PrivateSymbol(name, _getESSymbol(symbol)); | 381 symbol = new _internal.PrivateSymbol(name, _getESSymbol(symbol)); |
| 388 _declarations[symbol] = | 382 _declarations[symbol] = |
| 389 new JsMethodMirror._instanceMethod(this, symbol, ft); | 383 new JsMethodMirror._instanceMethod(this, symbol, ft); |
| 390 }); | 384 }); |
| 391 var staticFields = _getStaticFields(unwrapped); | 385 var staticFields = _getStaticFields(unwrapped); |
| 392 staticFields.forEach((symbol, t) { | 386 staticFields.forEach((symbol, t) { |
| 393 var name = getName(symbol); | 387 _declarations[symbol] = new JsVariableMirror._fromField(symbol, t); |
| 394 var metadata = []; | |
| 395 if (t is List) { | |
| 396 metadata = t.skip(1).toList(); | |
| 397 t = t[0]; | |
| 398 } | |
| 399 _declarations[symbol] = | |
| 400 new JsVariableMirror._(symbol, _wrap(t), metadata); | |
| 401 }); | 388 }); |
| 402 var statics = _getStatics(unwrapped); | 389 var statics = _getStatics(unwrapped); |
| 403 statics.forEach((symbol, ft) { | 390 statics.forEach((symbol, ft) { |
| 404 var name = getName(symbol); | 391 var name = getName(symbol); |
| 405 _declarations[symbol] = | 392 _declarations[symbol] = |
| 406 new JsMethodMirror._staticMethod(this, symbol, ft); | 393 new JsMethodMirror._staticMethod(this, symbol, ft); |
| 407 }); | 394 }); |
| 408 var staticGetters = _getStaticGetters(unwrapped); | 395 var staticGetters = _getStaticGetters(unwrapped); |
| 409 staticGetters.forEach((symbol, ft) { | 396 staticGetters.forEach((symbol, ft) { |
| 410 var name = getName(symbol); | 397 var name = getName(symbol); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 } | 517 } |
| 531 | 518 |
| 532 String toString() => "ClassMirror on '$_cls'"; | 519 String toString() => "ClassMirror on '$_cls'"; |
| 533 } | 520 } |
| 534 | 521 |
| 535 class JsVariableMirror extends JsMirror implements VariableMirror { | 522 class JsVariableMirror extends JsMirror implements VariableMirror { |
| 536 final Symbol _symbol; | 523 final Symbol _symbol; |
| 537 final String _name; | 524 final String _name; |
| 538 final TypeMirror type; | 525 final TypeMirror type; |
| 539 final List<InstanceMirror> metadata; | 526 final List<InstanceMirror> metadata; |
| 527 final bool isFinal; |
| 540 | 528 |
| 541 // TODO(vsm): Refactor this out. | 529 // TODO(vsm): Refactor this out. |
| 542 Symbol get simpleName => _symbol; | 530 Symbol get simpleName => _symbol; |
| 543 | 531 |
| 544 // TODO(vsm): Fix this | 532 // TODO(vsm): Fix this |
| 545 final bool isStatic = false; | 533 final bool isStatic = false; |
| 546 final bool isFinal = false; | |
| 547 | 534 |
| 548 JsVariableMirror._(Symbol symbol, Type t, List annotations) | 535 JsVariableMirror._(Symbol symbol, Type t, List annotations, |
| 536 {this.isFinal: false}) |
| 549 : _symbol = symbol, | 537 : _symbol = symbol, |
| 550 _name = getName(symbol), | 538 _name = getName(symbol), |
| 551 type = reflectType(t), | 539 type = reflectType(t), |
| 552 metadata = new List<InstanceMirror>.unmodifiable( | 540 metadata = |
| 553 annotations.map((a) => reflect(a))); | 541 new List<InstanceMirror>.unmodifiable(annotations.map(reflect)); |
| 542 |
| 543 JsVariableMirror._fromField(Symbol symbol, fieldInfo) |
| 544 : this._(symbol, _wrap(JS('', '#.type', fieldInfo)), |
| 545 JS('', '#.metadata', fieldInfo), |
| 546 isFinal: JS('bool', '#.isFinal', fieldInfo)); |
| 554 | 547 |
| 555 String toString() => "VariableMirror on '$_name'"; | 548 String toString() => "VariableMirror on '$_name'"; |
| 556 } | 549 } |
| 557 | 550 |
| 558 class JsParameterMirror extends JsVariableMirror implements ParameterMirror { | 551 class JsParameterMirror extends JsVariableMirror implements ParameterMirror { |
| 559 JsParameterMirror._(Symbol member, Type t, List annotations) | 552 JsParameterMirror._(Symbol member, Type t, List annotations) |
| 560 : super._(member, t, annotations); | 553 : super._(member, t, annotations); |
| 561 | 554 |
| 562 String toString() => "ParameterMirror on '$_name'"; | 555 String toString() => "ParameterMirror on '$_name'"; |
| 563 } | 556 } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 654 var param = | 647 var param = |
| 655 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata); | 648 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata); |
| 656 params[i + args.length] = param; | 649 params[i + args.length] = param; |
| 657 } | 650 } |
| 658 | 651 |
| 659 _params = new List.unmodifiable(params); | 652 _params = new List.unmodifiable(params); |
| 660 } | 653 } |
| 661 | 654 |
| 662 String toString() => "MethodMirror on '$_name'"; | 655 String toString() => "MethodMirror on '$_name'"; |
| 663 } | 656 } |
| OLD | NEW |