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 |