Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(307)

Side by Side Diff: pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart

Issue 11340044: FieldMirror => VariableMirror (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/dartdoc/lib/mirrors.dart ('k') | tests/compiler/dart2js/mirrors_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 String get simpleName => "mirror"; 471 String get simpleName => "mirror";
472 String get displayName => simpleName; 472 String get displayName => simpleName;
473 String get qualifiedName => simpleName; 473 String get qualifiedName => simpleName;
474 474
475 // TODO(johnniwinther): Hack! Dart2JsMirrorSystem need not be a Mirror. 475 // TODO(johnniwinther): Hack! Dart2JsMirrorSystem need not be a Mirror.
476 int get hashCode => qualifiedName.hashCode; 476 int get hashCode => qualifiedName.hashCode;
477 } 477 }
478 478
479 abstract class Dart2JsObjectMirror extends Dart2JsElementMirror 479 abstract class Dart2JsObjectMirror extends Dart2JsElementMirror
480 implements ObjectMirror { 480 implements ObjectMirror {
481 Map<String, MemberMirror> _members;
482
481 Dart2JsObjectMirror(Dart2JsMirrorSystem system, Element element) 483 Dart2JsObjectMirror(Dart2JsMirrorSystem system, Element element)
482 : super(system, element); 484 : super(system, element);
485
486 abstract void _ensureMembers();
487
488 Map<String, MemberMirror> get declaredMembers {
489 _ensureMembers();
490 return new ImmutableMapWrapper<String, MemberMirror>(_members);
491 }
492
493 Map<String, Mirror> get members => declaredMembers;
494
495 Map<String, MethodMirror> get functions {
496 _ensureMembers();
497 return new AsFilteredImmutableMap<String, MemberMirror, MethodMirror>(
ahe 2012/10/31 08:20:08 This code is really hard to read. Generally, you c
498 _members,
499 (MemberMirror member) => member is MethodMirror);
500 }
501
502 Map<String, MethodMirror> get getters {
503 _ensureMembers();
504 return new AsFilteredImmutableMap<String, MemberMirror, MethodMirror>(
505 _members,
506 (MemberMirror member) =>
507 member is MethodMirror && (member as MethodMirror).isGetter);
508 }
509
510 Map<String, MethodMirror> get setters {
511 _ensureMembers();
512 return new AsFilteredImmutableMap<String, MemberMirror, MethodMirror>(
513 _members,
514 (MemberMirror member) =>
515 member is MethodMirror && (member as MethodMirror).isSetter);
516 }
517
518 Map<String, VariableMirror> get variables {
519 _ensureMembers();
520 return new AsFilteredImmutableMap<String, MemberMirror, VariableMirror>(
521 _members,
522 (MemberMirror member) => member is VariableMirror);
523 }
483 } 524 }
484 525
485 class Dart2JsLibraryMirror extends Dart2JsObjectMirror 526 class Dart2JsLibraryMirror extends Dart2JsObjectMirror
486 implements LibraryMirror { 527 implements LibraryMirror {
487 Map<String, ClassMirror> _classes; 528 Map<String, ClassMirror> _classes;
488 Map<String, MemberMirror> _members;
489 529
490 Dart2JsLibraryMirror(Dart2JsMirrorSystem system, LibraryElement library) 530 Dart2JsLibraryMirror(Dart2JsMirrorSystem system, LibraryElement library)
491 : super(system, library); 531 : super(system, library);
492 532
493 LibraryElement get _library => _element; 533 LibraryElement get _library => _element;
494 534
495 Uri get uri => _library.uri; 535 Uri get uri => _library.uri;
496 536
497 DeclarationMirror get owner => null; 537 DeclarationMirror get owner => null;
498 538
(...skipping 22 matching lines...) Expand all
521 } 561 }
522 } 562 }
523 563
524 String get qualifiedName => simpleName; 564 String get qualifiedName => simpleName;
525 565
526 void _ensureClasses() { 566 void _ensureClasses() {
527 if (_classes == null) { 567 if (_classes == null) {
528 _classes = <String, ClassMirror>{}; 568 _classes = <String, ClassMirror>{};
529 _library.forEachLocalMember((Element e) { 569 _library.forEachLocalMember((Element e) {
530 if (e.isClass()) { 570 if (e.isClass()) {
531 e.ensureResolved(system.compiler); 571 ClassElement classElement = e;
532 var type = new Dart2JsClassMirror.fromLibrary(this, e); 572 classElement.ensureResolved(system.compiler);
573 var type = new Dart2JsClassMirror.fromLibrary(this, classElement);
533 assert(invariant(_library, !_classes.containsKey(type.simpleName), 574 assert(invariant(_library, !_classes.containsKey(type.simpleName),
534 message: "Type name '${type.simpleName}' " 575 message: "Type name '${type.simpleName}' "
535 "is not unique in $_library.")); 576 "is not unique in $_library."));
536 _classes[type.simpleName] = type; 577 _classes[type.simpleName] = type;
537 } else if (e.isTypedef()) { 578 } else if (e.isTypedef()) {
538 var type = new Dart2JsTypedefMirror.fromLibrary(this, 579 var type = new Dart2JsTypedefMirror.fromLibrary(this,
539 e.computeType(system.compiler)); 580 e.computeType(system.compiler));
540 assert(invariant(_library, !_classes.containsKey(type.simpleName), 581 assert(invariant(_library, !_classes.containsKey(type.simpleName),
541 message: "Type name '${type.simpleName}' " 582 message: "Type name '${type.simpleName}' "
542 "is not unique in $_library.")); 583 "is not unique in $_library."));
(...skipping 10 matching lines...) Expand all
553 if (!e.isClass() && !e.isTypedef()) { 594 if (!e.isClass() && !e.isTypedef()) {
554 for (var member in _convertElementMemberToMemberMirrors(this, e)) { 595 for (var member in _convertElementMemberToMemberMirrors(this, e)) {
555 assert(!_members.containsKey(member.simpleName)); 596 assert(!_members.containsKey(member.simpleName));
556 _members[member.simpleName] = member; 597 _members[member.simpleName] = member;
557 } 598 }
558 } 599 }
559 }); 600 });
560 } 601 }
561 } 602 }
562 603
563 Map<String, MemberMirror> get declaredMembers {
564 _ensureMembers();
565 return new ImmutableMapWrapper<String, MemberMirror>(_members);
566 }
567
568 Map<String, Mirror> get members => declaredMembers;
569
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 { 604 Map<String, ClassMirror> get classes {
589 _ensureClasses(); 605 _ensureClasses();
590 return new ImmutableMapWrapper<String, ClassMirror>(_classes); 606 return new ImmutableMapWrapper<String, ClassMirror>(_classes);
591 } 607 }
592 608
593 SourceLocation get location { 609 SourceLocation get location {
594 var script = _library.getCompilationUnit().script; 610 var script = _library.getCompilationUnit().script;
595 return new Dart2JsLocation( 611 return new Dart2JsLocation(
596 script, 612 script,
597 new SourceSpan(script.uri, 0, script.text.length)); 613 new SourceSpan(script.uri, 0, script.text.length));
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 } 680 }
665 return null; 681 return null;
666 } 682 }
667 bool get hasDefaultValue { 683 bool get hasDefaultValue {
668 return _variableElement.cachedNode !== null && 684 return _variableElement.cachedNode !== null &&
669 _variableElement.cachedNode is SendSet; 685 _variableElement.cachedNode is SendSet;
670 } 686 }
671 687
672 bool get isInitializingFormal => false; 688 bool get isInitializingFormal => false;
673 689
674 FieldMirror get initializedField => null; 690 VariableMirror get initializedField => null;
675 } 691 }
676 692
677 class Dart2JsFieldParameterMirror extends Dart2JsParameterMirror { 693 class Dart2JsFieldParameterMirror extends Dart2JsParameterMirror {
678 694
679 Dart2JsFieldParameterMirror(Dart2JsMirrorSystem system, 695 Dart2JsFieldParameterMirror(Dart2JsMirrorSystem system,
680 MethodMirror method, 696 MethodMirror method,
681 FieldParameterElement element, 697 FieldParameterElement element,
682 bool isOptional) 698 bool isOptional)
683 : super._normal(system, method, element, isOptional); 699 : super._normal(system, method, element, isOptional);
684 700
685 FieldParameterElement get _fieldParameterElement => _element; 701 FieldParameterElement get _fieldParameterElement => _element;
686 702
687 TypeMirror get type { 703 TypeMirror get type {
688 if (_fieldParameterElement.variables.cachedNode.type !== null) { 704 if (_fieldParameterElement.variables.cachedNode.type !== null) {
689 return super.type; 705 return super.type;
690 } 706 }
691 return _convertTypeToTypeMirror(system, 707 return _convertTypeToTypeMirror(system,
692 _fieldParameterElement.fieldElement.computeType(system.compiler), 708 _fieldParameterElement.fieldElement.computeType(system.compiler),
693 system.compiler.types.dynamicType, 709 system.compiler.types.dynamicType,
694 _variableElement.variables.functionSignature); 710 _variableElement.variables.functionSignature);
695 } 711 }
696 712
697 bool get isInitializingFormal => true; 713 bool get isInitializingFormal => true;
698 714
699 FieldMirror get initializedField => new Dart2JsFieldMirror( 715 VariableMirror get initializedField => new Dart2JsFieldMirror(
700 _method.owner, _fieldParameterElement.fieldElement); 716 _method.owner, _fieldParameterElement.fieldElement);
701 } 717 }
702 718
703 //------------------------------------------------------------------------------ 719 //------------------------------------------------------------------------------
704 // Declarations 720 // Declarations
705 //------------------------------------------------------------------------------ 721 //------------------------------------------------------------------------------
706 class Dart2JsClassMirror extends Dart2JsObjectMirror 722 class Dart2JsClassMirror extends Dart2JsObjectMirror
707 implements Dart2JsTypeMirror, ClassMirror { 723 implements Dart2JsTypeMirror, ClassMirror {
708 final Dart2JsLibraryMirror library; 724 final Dart2JsLibraryMirror library;
709 Map<String, Dart2JsMemberMirror> _members;
710 List<TypeVariableMirror> _typeVariables; 725 List<TypeVariableMirror> _typeVariables;
711 726
712 Dart2JsClassMirror(Dart2JsMirrorSystem system, ClassElement _class) 727 Dart2JsClassMirror(Dart2JsMirrorSystem system, ClassElement _class)
713 : this.library = system.getLibrary(_class.getLibrary()), 728 : this.library = system.getLibrary(_class.getLibrary()),
714 super(system, _class); 729 super(system, _class);
715 730
716 ClassElement get _class => _element; 731 ClassElement get _class => _element;
717 732
718 Dart2JsClassMirror.fromLibrary(Dart2JsLibraryMirror library, 733 Dart2JsClassMirror.fromLibrary(Dart2JsLibraryMirror library,
719 ClassElement _class) 734 ClassElement _class)
(...skipping 21 matching lines...) Expand all
741 _members = <String, Dart2JsMemberMirror>{}; 756 _members = <String, Dart2JsMemberMirror>{};
742 _class.forEachMember((_, e) { 757 _class.forEachMember((_, e) {
743 for (var member in _convertElementMemberToMemberMirrors(this, e)) { 758 for (var member in _convertElementMemberToMemberMirrors(this, e)) {
744 assert(!_members.containsKey(member.simpleName)); 759 assert(!_members.containsKey(member.simpleName));
745 _members[member.simpleName] = member; 760 _members[member.simpleName] = member;
746 } 761 }
747 }); 762 });
748 } 763 }
749 } 764 }
750 765
751 Map<String, MemberMirror> get declaredMembers { 766 Map<String, MethodMirror> get methods => functions;
767
768 Map<String, MethodMirror> get constructors {
752 _ensureMembers(); 769 _ensureMembers();
753 return new ImmutableMapWrapper<String, MemberMirror>(_members); 770 return new AsFilteredImmutableMap<String, MemberMirror, MethodMirror>(
754 } 771 _members, (m) => m.isConstructor ? m : null);
755
756 Map<String, Mirror> get members => declaredMembers;
757
758 Map<String, MethodMirror> get methods {
759 _ensureMembers();
760 return new FilteredImmutableMap(_members,
761 (MemberMirror member) => member is MethodMirror);
762 }
763
764 Map<String, MethodMirror> get getters {
765 _ensureMembers();
766 return new FilteredImmutableMap(_members,
767 (MemberMirror member) => member is MethodMirror && member.isGetter);
768 }
769
770 Map<String, MethodMirror> get setters {
771 _ensureMembers();
772 return new FilteredImmutableMap(_members,
773 (MemberMirror member) => member is MethodMirror && member.isSetter);
774 } 772 }
775 773
776 bool get isObject => _class == system.compiler.objectClass; 774 bool get isObject => _class == system.compiler.objectClass;
777 775
778 bool get isDynamic => false; 776 bool get isDynamic => false;
779 777
780 bool get isVoid => false; 778 bool get isVoid => false;
781 779
782 bool get isTypeVariable => false; 780 bool get isTypeVariable => false;
783 781
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 _typeVariables = <TypeVariableMirror>[]; 822 _typeVariables = <TypeVariableMirror>[];
825 _class.ensureResolved(system.compiler); 823 _class.ensureResolved(system.compiler);
826 for (TypeVariableType typeVariable in _class.typeVariables) { 824 for (TypeVariableType typeVariable in _class.typeVariables) {
827 _typeVariables.add( 825 _typeVariables.add(
828 new Dart2JsTypeVariableMirror(system, typeVariable)); 826 new Dart2JsTypeVariableMirror(system, typeVariable));
829 } 827 }
830 } 828 }
831 return _typeVariables; 829 return _typeVariables;
832 } 830 }
833 831
834 Map<String, MethodMirror> get constructors {
835 _ensureMembers();
836 return new AsFilteredImmutableMap<String, MemberMirror, MethodMirror>(
837 _members, (m) => m.isConstructor ? m : null);
838 }
839
840 /** 832 /**
841 * Returns the default type for this interface. 833 * Returns the default type for this interface.
842 */ 834 */
843 ClassMirror get defaultFactory { 835 ClassMirror get defaultFactory {
844 if (_class.defaultClass != null) { 836 if (_class.defaultClass != null) {
845 return new Dart2JsInterfaceTypeMirror(system, _class.defaultClass); 837 return new Dart2JsInterfaceTypeMirror(system, _class.defaultClass);
846 } 838 }
847 return null; 839 return null;
848 } 840 }
849 841
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 Map<String, MemberMirror> get members => const <String, MemberMirror>{}; 1032 Map<String, MemberMirror> get members => const <String, MemberMirror>{};
1041 1033
1042 Map<String, MethodMirror> get constructors => const <String, MethodMirror>{}; 1034 Map<String, MethodMirror> get constructors => const <String, MethodMirror>{};
1043 1035
1044 Map<String, MethodMirror> get methods => const <String, MethodMirror>{}; 1036 Map<String, MethodMirror> get methods => const <String, MethodMirror>{};
1045 1037
1046 Map<String, MethodMirror> get getters => const <String, MethodMirror>{}; 1038 Map<String, MethodMirror> get getters => const <String, MethodMirror>{};
1047 1039
1048 Map<String, MethodMirror> get setters => const <String, MethodMirror>{}; 1040 Map<String, MethodMirror> get setters => const <String, MethodMirror>{};
1049 1041
1042 Map<String, VariableMirror> get variables => const <String, VariableMirror>{};
1043
1050 ClassMirror get defaultFactory => null; 1044 ClassMirror get defaultFactory => null;
1051 } 1045 }
1052 1046
1053 class Dart2JsInterfaceTypeMirror extends Dart2JsTypeElementMirror 1047 class Dart2JsInterfaceTypeMirror extends Dart2JsTypeElementMirror
1054 implements ClassMirror { 1048 implements ClassMirror {
1055 List<TypeMirror> _typeArguments; 1049 List<TypeMirror> _typeArguments;
1056 1050
1057 Dart2JsInterfaceTypeMirror(Dart2JsMirrorSystem system, 1051 Dart2JsInterfaceTypeMirror(Dart2JsMirrorSystem system,
1058 InterfaceType interfaceType) 1052 InterfaceType interfaceType)
1059 : super(system, interfaceType); 1053 : super(system, interfaceType);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 1108
1115 // TODO(johnniwinther): Substitute type arguments for type variables. 1109 // TODO(johnniwinther): Substitute type arguments for type variables.
1116 Map<String, MethodMirror> get methods => originalDeclaration.methods; 1110 Map<String, MethodMirror> get methods => originalDeclaration.methods;
1117 1111
1118 // TODO(johnniwinther): Substitute type arguments for type variables. 1112 // TODO(johnniwinther): Substitute type arguments for type variables.
1119 Map<String, MethodMirror> get setters => originalDeclaration.setters; 1113 Map<String, MethodMirror> get setters => originalDeclaration.setters;
1120 1114
1121 // TODO(johnniwinther): Substitute type arguments for type variables. 1115 // TODO(johnniwinther): Substitute type arguments for type variables.
1122 Map<String, MethodMirror> get getters => originalDeclaration.getters; 1116 Map<String, MethodMirror> get getters => originalDeclaration.getters;
1123 1117
1118 // TODO(johnniwinther): Substitute type arguments for type variables.
1119 Map<String, VariableMirror> get variables => originalDeclaration.variables;
1120
1124 // TODO(johnniwinther): Substitute type arguments for type variables? 1121 // TODO(johnniwinther): Substitute type arguments for type variables?
1125 ClassMirror get defaultFactory => originalDeclaration.defaultFactory; 1122 ClassMirror get defaultFactory => originalDeclaration.defaultFactory;
1126 1123
1127 bool operator ==(Object other) { 1124 bool operator ==(Object other) {
1128 if (this === other) { 1125 if (this === other) {
1129 return true; 1126 return true;
1130 } 1127 }
1131 if (other is! ClassMirror) { 1128 if (other is! ClassMirror) {
1132 return false; 1129 return false;
1133 } 1130 }
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
1418 var script = _function.getCompilationUnit().script; 1415 var script = _function.getCompilationUnit().script;
1419 var span = system.compiler.spanFromNode(node, script.uri); 1416 var span = system.compiler.spanFromNode(node, script.uri);
1420 return new Dart2JsLocation(script, span); 1417 return new Dart2JsLocation(script, span);
1421 } 1418 }
1422 return super.location; 1419 return super.location;
1423 } 1420 }
1424 1421
1425 } 1422 }
1426 1423
1427 class Dart2JsFieldMirror extends Dart2JsElementMirror 1424 class Dart2JsFieldMirror extends Dart2JsElementMirror
1428 implements Dart2JsMemberMirror, FieldMirror { 1425 implements Dart2JsMemberMirror, VariableMirror {
1429 Dart2JsObjectMirror _objectMirror; 1426 Dart2JsObjectMirror _objectMirror;
1430 VariableElement _variable; 1427 VariableElement _variable;
1431 1428
1432 Dart2JsFieldMirror(Dart2JsObjectMirror objectMirror, 1429 Dart2JsFieldMirror(Dart2JsObjectMirror objectMirror,
1433 VariableElement variable) 1430 VariableElement variable)
1434 : this._objectMirror = objectMirror, 1431 : this._objectMirror = objectMirror,
1435 this._variable = variable, 1432 this._variable = variable,
1436 super(objectMirror.system, variable); 1433 super(objectMirror.system, variable);
1437 1434
1438 String get qualifiedName 1435 String get qualifiedName
(...skipping 25 matching lines...) Expand all
1464 if (node !== null) { 1461 if (node !== null) {
1465 var span = system.compiler.spanFromNode(node, script.uri); 1462 var span = system.compiler.spanFromNode(node, script.uri);
1466 return new Dart2JsLocation(script, span); 1463 return new Dart2JsLocation(script, span);
1467 } else { 1464 } else {
1468 var span = system.compiler.spanFromElement(_variable); 1465 var span = system.compiler.spanFromElement(_variable);
1469 return new Dart2JsLocation(script, span); 1466 return new Dart2JsLocation(script, span);
1470 } 1467 }
1471 } 1468 }
1472 } 1469 }
1473 1470
OLDNEW
« no previous file with comments | « pkg/dartdoc/lib/mirrors.dart ('k') | tests/compiler/dart2js/mirrors_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698