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

Side by Side Diff: runtime/lib/mirrors_impl.dart

Issue 19604004: Introduce an abstract DeclarationMirror in the implementation hierarchy; add a MirrorReference refl… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 5 months 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 | « runtime/lib/mirrors.cc ('k') | no next file » | 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 // VM-specific implementation of the dart:mirrors library. 5 // VM-specific implementation of the dart:mirrors library.
6 6
7 // These values are allowed to be passed directly over the wire. 7 // These values are allowed to be passed directly over the wire.
8 bool _isSimpleValue(var value) { 8 bool _isSimpleValue(var value) {
9 return (value == null || value is num || value is String || value is bool); 9 return (value == null || value is num || value is String || value is bool);
10 } 10 }
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 var result = _invokeConstructor(_reflectee, 558 var result = _invokeConstructor(_reflectee,
559 _n(constructorName), 559 _n(constructorName),
560 _unwarpAsyncPositionals(positionalArgument s)); 560 _unwarpAsyncPositionals(positionalArgument s));
561 return new Future.value(reflect(result)); 561 return new Future.value(reflect(result));
562 } on MirroredError catch(e) { 562 } on MirroredError catch(e) {
563 return new Future.error(e); 563 return new Future.error(e);
564 } 564 }
565 } 565 }
566 566
567 List<InstanceMirror> get metadata { 567 List<InstanceMirror> get metadata {
568 // get the metadata objects, convert them into InstanceMirrors using 568 // Get the metadata objects, convert them into InstanceMirrors using
569 // reflect() and then make them into a Dart list 569 // reflect() and then make them into a Dart list.
570 return _metadata(_reflectee).map(reflect).toList(); 570 return _metadata(_reflectee).map(reflect).toList(growable:false);
571 } 571 }
572 572
573 static _name(reflectee) 573 static _name(reflectee)
574 native "ClassMirror_name"; 574 native "ClassMirror_name";
575 575
576 _invoke(reflectee, memberName, positionalArguments) 576 _invoke(reflectee, memberName, positionalArguments)
577 native 'ClassMirror_invoke'; 577 native 'ClassMirror_invoke';
578 578
579 _invokeGetter(reflectee, getterName) 579 _invokeGetter(reflectee, getterName)
580 native 'ClassMirror_invokeGetter'; 580 native 'ClassMirror_invokeGetter';
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 _returnType = _returnType.resolve(mirrors); 621 _returnType = _returnType.resolve(mirrors);
622 } 622 }
623 return _returnType; 623 return _returnType;
624 } 624 }
625 625
626 final List<ParameterMirror> parameters; 626 final List<ParameterMirror> parameters;
627 627
628 String toString() => "FunctionTypeMirror on '${_n(simpleName)}'"; 628 String toString() => "FunctionTypeMirror on '${_n(simpleName)}'";
629 } 629 }
630 630
631 abstract class _LocalDeclarationMirrorImpl extends _LocalMirrorImpl
632 implements DeclarationMirror {
633 _LocalDeclarationMirrorImpl(this._reflectee);
634 final _MirrorReference _reflectee;
635
636 List<InstanceMirror> get metadata {
637 // Get the metadata objects, convert them into InstanceMirrors using
638 // reflect() and then make them into a Dart list.
639 return _metadata(_reflectee).map(reflect).toList(growable:false);
640 }
641 }
631 642
632 class _LazyTypeVariableMirror { 643 class _LazyTypeVariableMirror {
633 _LazyTypeVariableMirror(String variableName, this._owner) 644 _LazyTypeVariableMirror(String variableName, this._owner)
634 : this._variableName = _s(variableName); 645 : this._variableName = _s(variableName);
635 646
636 TypeVariableMirror resolve(MirrorSystem mirrors) { 647 TypeVariableMirror resolve(MirrorSystem mirrors) {
637 ClassMirror owner = _owner.resolve(mirrors); 648 ClassMirror owner = _owner.resolve(mirrors);
638 return owner.typeVariables[_variableName]; 649 return owner.typeVariables[_variableName];
639 } 650 }
640 651
641 final Symbol _variableName; 652 final Symbol _variableName;
642 final _LazyTypeMirror _owner; 653 final _LazyTypeMirror _owner;
643 } 654 }
644 655
645 class _LocalTypeVariableMirrorImpl extends _LocalMirrorImpl 656 class _LocalTypeVariableMirrorImpl extends _LocalDeclarationMirrorImpl
646 implements TypeVariableMirror { 657 implements TypeVariableMirror {
647 _LocalTypeVariableMirrorImpl(String simpleName, 658 _LocalTypeVariableMirrorImpl(reflectee,
659 String simpleName,
648 this._owner, 660 this._owner,
649 this._upperBound) 661 this._upperBound)
650 : this.simpleName = _s(simpleName); 662 : this.simpleName = _s(simpleName),
663 super(reflectee);
651 664
652 final Symbol simpleName; 665 final Symbol simpleName;
653 666
654 Symbol _qualifiedName = null; 667 Symbol _qualifiedName = null;
655 Symbol get qualifiedName { 668 Symbol get qualifiedName {
656 if (_qualifiedName == null) { 669 if (_qualifiedName == null) {
657 _qualifiedName = _computeQualifiedName(owner, simpleName); 670 _qualifiedName = _computeQualifiedName(owner, simpleName);
658 } 671 }
659 return _qualifiedName; 672 return _qualifiedName;
660 } 673 }
(...skipping 25 matching lines...) Expand all
686 699
687 List<InstanceMirror> get metadata { 700 List<InstanceMirror> get metadata {
688 throw new UnimplementedError( 701 throw new UnimplementedError(
689 'TypeVariableMirror.metadata is not implemented'); 702 'TypeVariableMirror.metadata is not implemented');
690 } 703 }
691 704
692 String toString() => "TypeVariableMirror on '${_n(simpleName)}'"; 705 String toString() => "TypeVariableMirror on '${_n(simpleName)}'";
693 } 706 }
694 707
695 708
696 class _LocalTypedefMirrorImpl extends _LocalMirrorImpl 709 class _LocalTypedefMirrorImpl extends _LocalDeclarationMirrorImpl
697 implements TypedefMirror { 710 implements TypedefMirror {
698 _LocalTypedefMirrorImpl(String simpleName, 711 _LocalTypedefMirrorImpl(reflectee,
712 String simpleName,
699 this._owner, 713 this._owner,
700 this._referent) 714 this._referent)
701 : this.simpleName = _s(simpleName); 715 : this.simpleName = _s(simpleName),
716 super(reflectee);
702 717
703 final Symbol simpleName; 718 final Symbol simpleName;
704 719
705 Symbol _qualifiedName = null; 720 Symbol _qualifiedName = null;
706 Symbol get qualifiedName { 721 Symbol get qualifiedName {
707 if (_qualifiedName == null) { 722 if (_qualifiedName == null) {
708 _qualifiedName = _computeQualifiedName(owner, simpleName); 723 _qualifiedName = _computeQualifiedName(owner, simpleName);
709 } 724 }
710 return _qualifiedName; 725 return _qualifiedName;
711 } 726 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 837
823 Map<Symbol, VariableMirror> get variables { 838 Map<Symbol, VariableMirror> get variables {
824 if (_variables == null) { 839 if (_variables == null) {
825 _variables = _filterMap(members, 840 _variables = _filterMap(members,
826 (key, value) => (value is VariableMirror)); 841 (key, value) => (value is VariableMirror));
827 } 842 }
828 return _variables; 843 return _variables;
829 } 844 }
830 845
831 List<InstanceMirror> get metadata { 846 List<InstanceMirror> get metadata {
832 // get the metadata objects, convert them into InstanceMirrors using 847 // Get the metadata objects, convert them into InstanceMirrors using
833 // reflect() and then make them into a Dart list 848 // reflect() and then make them into a Dart list.
834 _metadata(_reflectee).map(reflect).toList(); 849 return _metadata(_reflectee).map(reflect).toList(growable:false);
835 } 850 }
836 851
837 String toString() => "LibraryMirror on '${_n(simpleName)}'"; 852 String toString() => "LibraryMirror on '${_n(simpleName)}'";
838 853
839 _invoke(reflectee, memberName, positionalArguments) 854 _invoke(reflectee, memberName, positionalArguments)
840 native 'LibraryMirror_invoke'; 855 native 'LibraryMirror_invoke';
841 856
842 _invokeGetter(reflectee, getterName) 857 _invokeGetter(reflectee, getterName)
843 native 'LibraryMirror_invokeGetter'; 858 native 'LibraryMirror_invokeGetter';
844 859
845 _invokeSetter(reflectee, setterName, value) 860 _invokeSetter(reflectee, setterName, value)
846 native 'LibraryMirror_invokeSetter'; 861 native 'LibraryMirror_invokeSetter';
847 } 862 }
848 863
849 class _LocalMethodMirrorImpl extends _LocalMirrorImpl 864 class _LocalMethodMirrorImpl extends _LocalDeclarationMirrorImpl
850 implements MethodMirror { 865 implements MethodMirror {
851 _LocalMethodMirrorImpl(this._reflectee, 866 _LocalMethodMirrorImpl(reflectee,
852 this._owner, 867 this._owner,
853 this.parameters, 868 this.parameters,
854 this._returnType, 869 this._returnType,
855 this.isStatic, 870 this.isStatic,
856 this.isAbstract, 871 this.isAbstract,
857 this.isGetter, 872 this.isGetter,
858 this.isSetter, 873 this.isSetter,
859 this.isConstructor, 874 this.isConstructor,
860 this.isConstConstructor, 875 this.isConstConstructor,
861 this.isGenerativeConstructor, 876 this.isGenerativeConstructor,
862 this.isRedirectingConstructor, 877 this.isRedirectingConstructor,
863 this.isFactoryConstructor); 878 this.isFactoryConstructor) : super(reflectee);
864
865 final _MirrorReference _reflectee;
866 879
867 Symbol _simpleName = null; 880 Symbol _simpleName = null;
868 Symbol get simpleName { 881 Symbol get simpleName {
869 if (_simpleName == null) { 882 if (_simpleName == null) {
870 _simpleName = _s(_MethodMirror_name(_reflectee)); 883 _simpleName = _s(_MethodMirror_name(_reflectee));
871 } 884 }
872 return _simpleName; 885 return _simpleName;
873 } 886 }
874 887
875 Symbol _qualifiedName = null; 888 Symbol _qualifiedName = null;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 } 962 }
950 } 963 }
951 return _constructorName; 964 return _constructorName;
952 } 965 }
953 966
954 final bool isConstConstructor; 967 final bool isConstConstructor;
955 final bool isGenerativeConstructor; 968 final bool isGenerativeConstructor;
956 final bool isRedirectingConstructor; 969 final bool isRedirectingConstructor;
957 final bool isFactoryConstructor; 970 final bool isFactoryConstructor;
958 971
959 List<InstanceMirror> get metadata {
960 owner; // ensure owner is computed
961 // get the metadata objects, convert them into InstanceMirrors using
962 // reflect() and then make them into a Dart list
963 return _metadata(_reflectee).map(reflect).toList();
964 }
965
966 String toString() => "MethodMirror on '${_n(simpleName)}'"; 972 String toString() => "MethodMirror on '${_n(simpleName)}'";
967 973
968 static String _MethodMirror_name(reflectee) 974 static String _MethodMirror_name(reflectee)
969 native "MethodMirror_name"; 975 native "MethodMirror_name";
970 976
971 static dynamic _MethodMirror_owner(reflectee) 977 static dynamic _MethodMirror_owner(reflectee)
972 native "MethodMirror_owner"; 978 native "MethodMirror_owner";
973 } 979 }
974 980
975 class _LocalVariableMirrorImpl extends _LocalMirrorImpl 981 class _LocalVariableMirrorImpl extends _LocalDeclarationMirrorImpl
976 implements VariableMirror { 982 implements VariableMirror {
977 _LocalVariableMirrorImpl(this._reflectee, 983 _LocalVariableMirrorImpl(reflectee,
978 String simpleName, 984 String simpleName,
979 this._owner, 985 this._owner,
980 this._type, 986 this._type,
981 this.isStatic, 987 this.isStatic,
982 this.isFinal) 988 this.isFinal)
983 : this.simpleName = _s(simpleName); 989 : this.simpleName = _s(simpleName),
990 super(reflectee);
984 991
985 final _MirrorReference _reflectee;
986 final Symbol simpleName; 992 final Symbol simpleName;
987 993
988 Symbol _qualifiedName = null; 994 Symbol _qualifiedName = null;
989 Symbol get qualifiedName { 995 Symbol get qualifiedName {
990 if (_qualifiedName == null) { 996 if (_qualifiedName == null) {
991 _qualifiedName = _computeQualifiedName(owner, simpleName); 997 _qualifiedName = _computeQualifiedName(owner, simpleName);
992 } 998 }
993 return _qualifiedName; 999 return _qualifiedName;
994 } 1000 }
995 1001
(...skipping 22 matching lines...) Expand all
1018 TypeMirror get type { 1024 TypeMirror get type {
1019 if (_type is! Mirror) { 1025 if (_type is! Mirror) {
1020 _type = _type.resolve(mirrors); 1026 _type = _type.resolve(mirrors);
1021 } 1027 }
1022 return _type; 1028 return _type;
1023 } 1029 }
1024 1030
1025 final bool isStatic; 1031 final bool isStatic;
1026 final bool isFinal; 1032 final bool isFinal;
1027 1033
1028 List<InstanceMirror> get metadata {
1029 // get the metadata objects, convert them into InstanceMirrors using
1030 // reflect() and then make them into a Dart list
1031 return _metadata(_reflectee).map(reflect).toList();
1032 }
1033
1034 String toString() => "VariableMirror on '${_n(simpleName)}'"; 1034 String toString() => "VariableMirror on '${_n(simpleName)}'";
1035 } 1035 }
1036 1036
1037 class _LocalParameterMirrorImpl extends _LocalVariableMirrorImpl 1037 class _LocalParameterMirrorImpl extends _LocalVariableMirrorImpl
1038 implements ParameterMirror { 1038 implements ParameterMirror {
1039 _LocalParameterMirrorImpl(type, this.isOptional) 1039 _LocalParameterMirrorImpl(type, this.isOptional)
1040 : super(null, '<TODO:unnamed>', null, type, false, false) {} 1040 : super(null, '<TODO:unnamed>', null, type, false, false) {}
1041 1041
1042 final bool isOptional; 1042 final bool isOptional;
1043 1043
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 static Expando<ClassMirror> _classMirrorCache = new Expando("ClassMirror"); 1132 static Expando<ClassMirror> _classMirrorCache = new Expando("ClassMirror");
1133 static ClassMirror reflectClass(Type key) { 1133 static ClassMirror reflectClass(Type key) {
1134 var classMirror = _classMirrorCache[key]; 1134 var classMirror = _classMirrorCache[key];
1135 if (classMirror == null) { 1135 if (classMirror == null) {
1136 classMirror = makeLocalClassMirror(key); 1136 classMirror = makeLocalClassMirror(key);
1137 _classMirrorCache[key] = classMirror; 1137 _classMirrorCache[key] = classMirror;
1138 } 1138 }
1139 return classMirror; 1139 return classMirror;
1140 } 1140 }
1141 } 1141 }
OLDNEW
« no previous file with comments | « runtime/lib/mirrors.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698