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:io'; | 7 import 'dart:io'; |
8 import 'dart:uri'; | 8 import 'dart:uri'; |
9 | 9 |
10 import '../../../../../lib/compiler/compiler.dart' as diagnostics; | 10 import '../../../../../lib/compiler/compiler.dart' as diagnostics; |
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 } | 477 } |
478 | 478 |
479 abstract class Dart2JsObjectMirror extends Dart2JsElementMirror | 479 abstract class Dart2JsObjectMirror extends Dart2JsElementMirror |
480 implements ObjectMirror { | 480 implements ObjectMirror { |
481 Dart2JsObjectMirror(Dart2JsMirrorSystem system, Element element) | 481 Dart2JsObjectMirror(Dart2JsMirrorSystem system, Element element) |
482 : super(system, element); | 482 : super(system, element); |
483 } | 483 } |
484 | 484 |
485 class Dart2JsLibraryMirror extends Dart2JsObjectMirror | 485 class Dart2JsLibraryMirror extends Dart2JsObjectMirror |
486 implements LibraryMirror { | 486 implements LibraryMirror { |
487 Map<String, ClassMirror> _types; | 487 Map<String, ClassMirror> _classes; |
488 Map<String, MemberMirror> _members; | 488 Map<String, MemberMirror> _members; |
489 | 489 |
490 Dart2JsLibraryMirror(Dart2JsMirrorSystem system, LibraryElement library) | 490 Dart2JsLibraryMirror(Dart2JsMirrorSystem system, LibraryElement library) |
491 : super(system, library); | 491 : super(system, library); |
492 | 492 |
493 LibraryElement get _library => _element; | 493 LibraryElement get _library => _element; |
494 | 494 |
495 Uri get uri => _library.uri; | 495 Uri get uri => _library.uri; |
496 | 496 |
497 DeclarationMirror get owner => null; | 497 DeclarationMirror get owner => null; |
(...skipping 18 matching lines...) Expand all Loading... |
516 } | 516 } |
517 } else { | 517 } else { |
518 // Use the file name as script name. | 518 // Use the file name as script name. |
519 String path = _library.uri.path; | 519 String path = _library.uri.path; |
520 return path.substring(path.lastIndexOf('/') + 1); | 520 return path.substring(path.lastIndexOf('/') + 1); |
521 } | 521 } |
522 } | 522 } |
523 | 523 |
524 String get qualifiedName => simpleName; | 524 String get qualifiedName => simpleName; |
525 | 525 |
526 void _ensureTypes() { | 526 void _ensureClasses() { |
527 if (_types == null) { | 527 if (_classes == null) { |
528 _types = <String, ClassMirror>{}; | 528 _classes = <String, ClassMirror>{}; |
529 _library.forEachLocalMember((Element e) { | 529 _library.forEachLocalMember((Element e) { |
530 if (e.isClass()) { | 530 if (e.isClass()) { |
531 e.ensureResolved(system.compiler); | 531 e.ensureResolved(system.compiler); |
532 var type = new Dart2JsClassMirror.fromLibrary(this, e); | 532 var type = new Dart2JsClassMirror.fromLibrary(this, e); |
533 assert(invariant(_library, !_types.containsKey(type.simpleName), | 533 assert(invariant(_library, !_classes.containsKey(type.simpleName), |
534 message: "Type name '${type.simpleName}' " | 534 message: "Type name '${type.simpleName}' " |
535 "is not unique in $_library.")); | 535 "is not unique in $_library.")); |
536 _types[type.simpleName] = type; | 536 _classes[type.simpleName] = type; |
537 } else if (e.isTypedef()) { | 537 } else if (e.isTypedef()) { |
538 var type = new Dart2JsTypedefMirror.fromLibrary(this, | 538 var type = new Dart2JsTypedefMirror.fromLibrary(this, |
539 e.computeType(system.compiler)); | 539 e.computeType(system.compiler)); |
540 assert(invariant(_library, !_types.containsKey(type.simpleName), | 540 assert(invariant(_library, !_classes.containsKey(type.simpleName), |
541 message: "Type name '${type.simpleName}' " | 541 message: "Type name '${type.simpleName}' " |
542 "is not unique in $_library.")); | 542 "is not unique in $_library.")); |
543 _types[type.simpleName] = type; | 543 _classes[type.simpleName] = type; |
544 } | 544 } |
545 }); | 545 }); |
546 } | 546 } |
547 } | 547 } |
548 | 548 |
549 void _ensureMembers() { | 549 void _ensureMembers() { |
550 if (_members == null) { | 550 if (_members == null) { |
551 _members = <String, MemberMirror>{}; | 551 _members = <String, MemberMirror>{}; |
552 _library.forEachLocalMember((Element e) { | 552 _library.forEachLocalMember((Element e) { |
553 if (!e.isClass() && !e.isTypedef()) { | 553 if (!e.isClass() && !e.isTypedef()) { |
554 for (var member in _convertElementMemberToMemberMirrors(this, e)) { | 554 for (var member in _convertElementMemberToMemberMirrors(this, e)) { |
555 assert(!_members.containsKey(member.simpleName)); | 555 assert(!_members.containsKey(member.simpleName)); |
556 _members[member.simpleName] = member; | 556 _members[member.simpleName] = member; |
557 } | 557 } |
558 } | 558 } |
559 }); | 559 }); |
560 } | 560 } |
561 } | 561 } |
562 | 562 |
563 Map<String, MemberMirror> get declaredMembers { | 563 Map<String, MemberMirror> get declaredMembers { |
564 _ensureMembers(); | 564 _ensureMembers(); |
565 return new ImmutableMapWrapper<String, MemberMirror>(_members); | 565 return new ImmutableMapWrapper<String, MemberMirror>(_members); |
566 } | 566 } |
567 | 567 |
568 Map<String, ClassMirror> get types { | 568 Map<String, Mirror> get members => declaredMembers; |
569 _ensureTypes(); | 569 |
570 return new ImmutableMapWrapper<String, ClassMirror>(_types); | 570 Map<String, MethodMirror> get functions { |
| 571 _ensureMembers(); |
| 572 return new FilteredImmutableMap(_members, |
| 573 (MemberMirror member) => member is MethodMirror); |
| 574 } |
| 575 |
| 576 Map<String, MethodMirror> get getters { |
| 577 _ensureMembers(); |
| 578 return new FilteredImmutableMap(_members, |
| 579 (MemberMirror member) => member is MethodMirror && member.isGetter); |
| 580 } |
| 581 |
| 582 Map<String, MethodMirror> get setters { |
| 583 _ensureMembers(); |
| 584 return new FilteredImmutableMap(_members, |
| 585 (MemberMirror member) => member is MethodMirror && member.isSetter); |
| 586 } |
| 587 |
| 588 Map<String, ClassMirror> get classes { |
| 589 _ensureClasses(); |
| 590 return new ImmutableMapWrapper<String, ClassMirror>(_classes); |
571 } | 591 } |
572 | 592 |
573 SourceLocation get location { | 593 SourceLocation get location { |
574 var script = _library.getCompilationUnit().script; | 594 var script = _library.getCompilationUnit().script; |
575 return new Dart2JsLocation( | 595 return new Dart2JsLocation( |
576 script, | 596 script, |
577 new SourceSpan(script.uri, 0, script.text.length)); | 597 new SourceSpan(script.uri, 0, script.text.length)); |
578 } | 598 } |
579 } | 599 } |
580 | 600 |
(...skipping 824 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1405 if (node !== null) { | 1425 if (node !== null) { |
1406 var span = system.compiler.spanFromNode(node, script.uri); | 1426 var span = system.compiler.spanFromNode(node, script.uri); |
1407 return new Dart2JsLocation(script, span); | 1427 return new Dart2JsLocation(script, span); |
1408 } else { | 1428 } else { |
1409 var span = system.compiler.spanFromElement(_variable); | 1429 var span = system.compiler.spanFromElement(_variable); |
1410 return new Dart2JsLocation(script, span); | 1430 return new Dart2JsLocation(script, span); |
1411 } | 1431 } |
1412 } | 1432 } |
1413 } | 1433 } |
1414 | 1434 |
OLD | NEW |