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

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

Issue 21124011: Inline CreateTypedefMirror and get rid of LazyXXXMirror (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 4 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
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 import "dart:collection"; 7 import "dart:collection";
8 8
9 // These values are allowed to be passed directly over the wire. 9 // These values are allowed to be passed directly over the wire.
10 bool _isSimpleValue(var value) { 10 bool _isSimpleValue(var value) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 } else { 92 } else {
93 throw "positional argument $i ($arg) was not a simple value or InstanceMir ror"; 93 throw "positional argument $i ($arg) was not a simple value or InstanceMir ror";
94 } 94 }
95 } 95 }
96 return unwrappedArgs; 96 return unwrappedArgs;
97 } 97 }
98 98
99 class _LocalMirrorSystemImpl extends MirrorSystem { 99 class _LocalMirrorSystemImpl extends MirrorSystem {
100 // Change parameter back to "this.libraries" when native code is changed. 100 // Change parameter back to "this.libraries" when native code is changed.
101 _LocalMirrorSystemImpl(List<LibraryMirror> libraries, this.isolate) 101 _LocalMirrorSystemImpl(List<LibraryMirror> libraries, this.isolate)
102 : this.libraries = _createLibrariesMap(libraries), 102 : this.libraries = _createLibrariesMap(libraries);
103 _functionTypes = new Map<String, FunctionTypeMirror>();
104 103
105 final Map<Uri, LibraryMirror> libraries; 104 final Map<Uri, LibraryMirror> libraries;
106 final IsolateMirror isolate; 105 final IsolateMirror isolate;
107 106
108 TypeMirror _dynamicType = null; 107 TypeMirror _dynamicType = null;
109 108
110 TypeMirror get dynamicType { 109 TypeMirror get dynamicType {
111 if (_dynamicType == null) { 110 if (_dynamicType == null) {
112 _dynamicType = new _SpecialTypeMirrorImpl('dynamic'); 111 _dynamicType = new _SpecialTypeMirrorImpl('dynamic');
113 } 112 }
114 return _dynamicType; 113 return _dynamicType;
115 } 114 }
116 115
117 TypeMirror _voidType = null; 116 TypeMirror _voidType = null;
118 117
119 TypeMirror get voidType { 118 TypeMirror get voidType {
120 if (_voidType == null) { 119 if (_voidType == null) {
121 _voidType = new _SpecialTypeMirrorImpl('void'); 120 _voidType = new _SpecialTypeMirrorImpl('void');
122 } 121 }
123 return _voidType; 122 return _voidType;
124 } 123 }
125 124
126 final Map<String, FunctionTypeMirror> _functionTypes;
127 FunctionTypeMirror _lookupFunctionTypeMirror(
128 reflectee,
129 TypeMirror returnType,
130 List<ParameterMirror> parameters) {
131 var sigString = _makeSignatureString(returnType, parameters);
132 var mirror = _functionTypes[sigString];
133 if (mirror == null) {
134 mirror = new _LocalFunctionTypeMirrorImpl(reflectee,
135 sigString,
136 returnType,
137 parameters);
138 _functionTypes[sigString] = mirror;
139 }
140 return mirror;
141 }
142
143 String toString() => "MirrorSystem for isolate '${isolate.debugName}'"; 125 String toString() => "MirrorSystem for isolate '${isolate.debugName}'";
144 } 126 }
145 127
146 abstract class _LocalMirrorImpl implements Mirror { 128 abstract class _LocalMirrorImpl implements Mirror {
147 int get hashCode { 129 int get hashCode {
148 throw new UnimplementedError('Mirror.hashCode is not implemented'); 130 throw new UnimplementedError('Mirror.hashCode is not implemented');
149 } 131 }
150 132
151 // Local mirrors always return the same MirrorSystem. This field 133 // Local mirrors always return the same MirrorSystem. This field
152 // is more interesting once we implement remote mirrors. 134 // is more interesting once we implement remote mirrors.
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 343
362 String toString() => "ClosureMirror on '${Error.safeToString(_reflectee)}'"; 344 String toString() => "ClosureMirror on '${Error.safeToString(_reflectee)}'";
363 345
364 static _apply(reflectee, positionalArguments) 346 static _apply(reflectee, positionalArguments)
365 native 'ClosureMirror_apply'; 347 native 'ClosureMirror_apply';
366 348
367 static _computeFunction(reflectee) 349 static _computeFunction(reflectee)
368 native 'ClosureMirror_function'; 350 native 'ClosureMirror_function';
369 } 351 }
370 352
371 class _LazyTypeMirror {
372 _LazyTypeMirror(String this.libraryUrl, String typeName)
373 : this.typeName = _s(typeName);
374
375 TypeMirror resolve(MirrorSystem mirrors) {
376 if (libraryUrl == null) {
377 if (typeName == const Symbol('dynamic')) {
378 return mirrors.dynamicType;
379 } else if (typeName == const Symbol('void')) {
380 return mirrors.voidType;
381 } else {
382 throw new UnimplementedError(
383 "Mirror for type '$typeName' is not implemented");
384 }
385 }
386 var resolved = mirrors.libraries[Uri.parse(libraryUrl)].members[typeName];
387 if (resolved == null) {
388 throw new UnimplementedError(
389 "Mirror for type '$typeName' is not implemented");
390 }
391 return resolved;
392 }
393
394 final String libraryUrl;
395 final Symbol typeName;
396 }
397
398 class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl 353 class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
399 implements ClassMirror { 354 implements ClassMirror {
400 _LocalClassMirrorImpl(reflectee, 355 _LocalClassMirrorImpl(reflectee,
401 String simpleName) 356 String simpleName)
402 : this._simpleName = _s(simpleName), 357 : this._simpleName = _s(simpleName),
403 super(reflectee); 358 super(reflectee);
404 359
405 Symbol _simpleName; 360 Symbol _simpleName;
406 Symbol get simpleName { 361 Symbol get simpleName {
407 // dynamic, void and the function types have their names set eagerly in the 362 // dynamic, void and the function types have their names set eagerly in the
(...skipping 27 matching lines...) Expand all
435 SourceLocation get location { 390 SourceLocation get location {
436 throw new UnimplementedError( 391 throw new UnimplementedError(
437 'ClassMirror.location is not implemented'); 392 'ClassMirror.location is not implemented');
438 } 393 }
439 394
440 // TODO(rmacnak): Remove these left-overs from the days of separate interfaces 395 // TODO(rmacnak): Remove these left-overs from the days of separate interfaces
441 // once we send out a breaking change. 396 // once we send out a breaking change.
442 bool get isClass => true; 397 bool get isClass => true;
443 ClassMirror get defaultFactory => null; 398 ClassMirror get defaultFactory => null;
444 399
445 var _superclass; 400 ClassMirror _superclass;
446 ClassMirror get superclass { 401 ClassMirror get superclass {
447 if (_superclass == null) { 402 if (_superclass == null) {
448 Type supertype = _supertype(_reflectee); 403 Type supertype = _supertype(_reflectee);
449 if (supertype == null) { 404 if (supertype == null) {
450 // Object has no superclass. 405 // Object has no superclass.
451 return null; 406 return null;
452 } 407 }
453 _superclass = reflectClass(supertype); 408 _superclass = reflectClass(supertype);
454 } 409 }
455 if (_superclass is! Mirror) {
456 _superclass = _superclass.resolve(mirrors);
457 }
458 return _superclass; 410 return _superclass;
459 } 411 }
460 412
461 var _superinterfaces; 413 var _superinterfaces;
462 List<ClassMirror> get superinterfaces { 414 List<ClassMirror> get superinterfaces {
463 if (_superinterfaces == null) { 415 if (_superinterfaces == null) {
464 _superinterfaces = _interfaces(_reflectee) 416 _superinterfaces = _interfaces(_reflectee)
465 .map((i) => reflectClass(i)).toList(growable:false); 417 .map((i) => reflectClass(i)).toList(growable:false);
466 } 418 }
467 return _superinterfaces; 419 return _superinterfaces;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 _invokeSetter(reflectee, setterName, value) 576 _invokeSetter(reflectee, setterName, value)
625 native 'ClassMirror_invokeSetter'; 577 native 'ClassMirror_invokeSetter';
626 578
627 static _invokeConstructor(reflectee, constructorName, positionalArguments) 579 static _invokeConstructor(reflectee, constructorName, positionalArguments)
628 native 'ClassMirror_invokeConstructor'; 580 native 'ClassMirror_invokeConstructor';
629 581
630 static _ClassMirror_type_variables(reflectee) 582 static _ClassMirror_type_variables(reflectee)
631 native "ClassMirror_type_variables"; 583 native "ClassMirror_type_variables";
632 } 584 }
633 585
634 class _LazyFunctionTypeMirror {
635 _LazyFunctionTypeMirror(this.reflectee, this.returnType, this.parameters) {}
636
637 ClassMirror resolve(MirrorSystem mirrors) {
638 return mirrors._lookupFunctionTypeMirror(reflectee,
639 returnType.resolve(mirrors),
640 parameters);
641 }
642
643 final reflectee;
644 final returnType;
645 final List<ParameterMirror> parameters;
646 }
647
648 class _LocalFunctionTypeMirrorImpl extends _LocalClassMirrorImpl 586 class _LocalFunctionTypeMirrorImpl extends _LocalClassMirrorImpl
649 implements FunctionTypeMirror { 587 implements FunctionTypeMirror {
650 _LocalFunctionTypeMirrorImpl(reflectee, 588 _LocalFunctionTypeMirrorImpl(reflectee) : super(reflectee, null);
651 simpleName,
652 this._returnType,
653 this.parameters)
654 : super(reflectee,
655 simpleName);
656 589
657 Map<Symbol, Mirror> get members => new Map<Symbol,Mirror>(); 590 // FunctionTypeMirrors have a simpleName generated from their signature.
658 Map<Symbol, MethodMirror> get constructors => new Map<Symbol,MethodMirror>(); 591 Symbol _simpleName = null;
592 Symbol get simpleName {
593 if (_simpleName == null) {
594 _simpleName = _s(_makeSignatureString(returnType, parameters));
595 }
596 return _simpleName;
597 }
659 598
660 var _returnType; 599 TypeMirror _returnType = null;
661 TypeMirror get returnType { 600 TypeMirror get returnType {
662 if (_returnType is! Mirror) { 601 if (_returnType == null) {
663 _returnType = _returnType.resolve(mirrors); 602 _returnType = _FunctionTypeMirror_return_type(_reflectee);
664 } 603 }
665 return _returnType; 604 return _returnType;
666 } 605 }
667 606
668 final List<ParameterMirror> parameters; 607 List<ParameterMirror> _parameters = null;
608 List<ParameterMirror> get parameters {
609 if (_parameters == null) {
610 _parameters = _FunctionTypeMirror_parameters(_reflectee);
611 }
612 return _parameters;
613 }
614
615 Map<Symbol, Mirror> get members => new Map<Symbol,Mirror>();
616 Map<Symbol, MethodMirror> get constructors => new Map<Symbol,MethodMirror>();
669 final Map<Symbol, TypeVariableMirror> typeVariables = const {}; 617 final Map<Symbol, TypeVariableMirror> typeVariables = const {};
670 618
671 String toString() => "FunctionTypeMirror on '${_n(simpleName)}'"; 619 String toString() => "FunctionTypeMirror on '${_n(simpleName)}'";
620
621 static TypeMirror _FunctionTypeMirror_return_type(reflectee)
622 native "FunctionTypeMirror_return_type";
623
624 static List<ParameterMirror> _FunctionTypeMirror_parameters(reflectee)
625 native "FunctionTypeMirror_parameters";
672 } 626 }
673 627
674 abstract class _LocalDeclarationMirrorImpl extends _LocalMirrorImpl 628 abstract class _LocalDeclarationMirrorImpl extends _LocalMirrorImpl
675 implements DeclarationMirror { 629 implements DeclarationMirror {
676 _LocalDeclarationMirrorImpl(this._reflectee, this.simpleName); 630 _LocalDeclarationMirrorImpl(this._reflectee, this.simpleName);
677 631
678 final _reflectee; 632 final _reflectee;
679 633
680 final Symbol simpleName; 634 final Symbol simpleName;
681 635
682 Symbol _qualifiedName = null; 636 Symbol _qualifiedName = null;
683 Symbol get qualifiedName { 637 Symbol get qualifiedName {
684 if (_qualifiedName == null) { 638 if (_qualifiedName == null) {
685 _qualifiedName = _computeQualifiedName(owner, simpleName); 639 _qualifiedName = _computeQualifiedName(owner, simpleName);
686 } 640 }
687 return _qualifiedName; 641 return _qualifiedName;
688 } 642 }
689 643
690 List<InstanceMirror> get metadata { 644 List<InstanceMirror> get metadata {
691 // Get the metadata objects, convert them into InstanceMirrors using 645 // Get the metadata objects, convert them into InstanceMirrors using
692 // reflect() and then make them into a Dart list. 646 // reflect() and then make them into a Dart list.
693 return _metadata(_reflectee).map(reflect).toList(growable:false); 647 return _metadata(_reflectee).map(reflect).toList(growable:false);
694 } 648 }
695 } 649 }
696 650
697 class _LazyTypeVariableMirror {
698 _LazyTypeVariableMirror(String variableName, this._owner)
699 : this._variableName = _s(variableName);
700
701 TypeVariableMirror resolve(MirrorSystem mirrors) {
702 ClassMirror owner = _owner.resolve(mirrors);
703 return owner.typeVariables[_variableName];
704 }
705
706 final Symbol _variableName;
707 final _LazyTypeMirror _owner;
708 }
709
710 class _LocalTypeVariableMirrorImpl extends _LocalDeclarationMirrorImpl 651 class _LocalTypeVariableMirrorImpl extends _LocalDeclarationMirrorImpl
711 implements TypeVariableMirror { 652 implements TypeVariableMirror {
712 _LocalTypeVariableMirrorImpl(reflectee, 653 _LocalTypeVariableMirrorImpl(reflectee,
713 String simpleName, 654 String simpleName,
714 this._owner) 655 this._owner)
715 : super(reflectee, _s(simpleName)); 656 : super(reflectee, _s(simpleName));
716 657
717 var _owner; 658 DeclarationMirror _owner;
718 DeclarationMirror get owner { 659 DeclarationMirror get owner {
719 if (_owner == null) { 660 if (_owner == null) {
720 _owner = _LocalTypeVariableMirror_owner(_reflectee); 661 _owner = _LocalTypeVariableMirror_owner(_reflectee);
721 } 662 }
722 // TODO(11897): This will go away, as soon as lazy mirrors go away.
723 if (_owner is! Mirror) {
724 _owner = _owner.resolve(mirrors);
725 }
726 return _owner; 663 return _owner;
727 } 664 }
728 665
729 bool get isPrivate => false; 666 bool get isPrivate => false;
730 667
731 final bool isTopLevel = false; 668 final bool isTopLevel = false;
732 669
733 SourceLocation get location { 670 SourceLocation get location {
734 throw new UnimplementedError( 671 throw new UnimplementedError(
735 'TypeVariableMirror.location is not implemented'); 672 'TypeVariableMirror.location is not implemented');
(...skipping 19 matching lines...) Expand all
755 692
756 static TypeMirror _LocalTypeVariableMirror_upper_bound(reflectee) 693 static TypeMirror _LocalTypeVariableMirror_upper_bound(reflectee)
757 native "LocalTypeVariableMirror_upper_bound"; 694 native "LocalTypeVariableMirror_upper_bound";
758 } 695 }
759 696
760 697
761 class _LocalTypedefMirrorImpl extends _LocalDeclarationMirrorImpl 698 class _LocalTypedefMirrorImpl extends _LocalDeclarationMirrorImpl
762 implements TypedefMirror { 699 implements TypedefMirror {
763 _LocalTypedefMirrorImpl(reflectee, 700 _LocalTypedefMirrorImpl(reflectee,
764 String simpleName, 701 String simpleName,
765 this._owner, 702 this._owner)
766 this._referent)
767 : super(reflectee, _s(simpleName)); 703 : super(reflectee, _s(simpleName));
768 704
769 var _owner; 705 DeclarationMirror _owner;
770 DeclarationMirror get owner { 706 DeclarationMirror get owner {
771 if (_owner == null) { 707 if (_owner == null) {
772 _owner = _LocalClassMirrorImpl._library(_reflectee); 708 _owner = _LocalClassMirrorImpl._library(_reflectee);
773 } 709 }
774 if (_owner is! Mirror) {
775 _owner = _owner.resolve(mirrors);
776 }
777 return _owner; 710 return _owner;
778 } 711 }
779 712
780 bool get isPrivate => false; 713 bool get isPrivate => false;
781 714
782 final bool isTopLevel = true; 715 final bool isTopLevel = true;
783 716
784 SourceLocation get location { 717 SourceLocation get location {
785 throw new UnimplementedError( 718 throw new UnimplementedError(
786 'TypedefMirror.location is not implemented'); 719 'TypedefMirror.location is not implemented');
787 } 720 }
788 721
789 var _referent; 722 TypeMirror _referent = null;
790 TypeMirror get referent { 723 TypeMirror get referent {
791 if (_referent is! Mirror) { 724 if (_referent == null) {
792 _referent = _referent.resolve(mirrors); 725 return new _LocalFunctionTypeMirrorImpl(
726 _TypedefMirror_referent(_reflectee));
793 } 727 }
794 return _referent; 728 return _referent;
795 } 729 }
796 730
797 String toString() => "TypedefMirror on '${_n(simpleName)}'"; 731 String toString() => "TypedefMirror on '${_n(simpleName)}'";
798 }
799 732
800 733 static _TypedefMirror_referent(_reflectee)
801 class _LazyLibraryMirror { 734 native "TypedefMirror_referent";
802 _LazyLibraryMirror(String this.libraryUrl);
803
804 LibraryMirror resolve(MirrorSystem mirrors) {
805 return mirrors.libraries[Uri.parse(libraryUrl)];
806 }
807
808 final String libraryUrl;
809 } 735 }
810 736
811 class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl 737 class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
812 implements LibraryMirror { 738 implements LibraryMirror {
813 _LocalLibraryMirrorImpl(reflectee, 739 _LocalLibraryMirrorImpl(reflectee,
814 String simpleName, 740 String simpleName,
815 String url) 741 String url)
816 : this.simpleName = _s(simpleName), 742 : this.simpleName = _s(simpleName),
817 this.uri = Uri.parse(url), 743 this.uri = Uri.parse(url),
818 super(reflectee); 744 super(reflectee);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 this.isAbstract, 849 this.isAbstract,
924 this.isGetter, 850 this.isGetter,
925 this.isSetter, 851 this.isSetter,
926 this.isConstructor, 852 this.isConstructor,
927 this.isConstConstructor, 853 this.isConstConstructor,
928 this.isGenerativeConstructor, 854 this.isGenerativeConstructor,
929 this.isRedirectingConstructor, 855 this.isRedirectingConstructor,
930 this.isFactoryConstructor) 856 this.isFactoryConstructor)
931 : super(reflectee, _s(simpleName)); 857 : super(reflectee, _s(simpleName));
932 858
933 var _owner; 859 DeclarationMirror _owner;
934 DeclarationMirror get owner { 860 DeclarationMirror get owner {
935 // For nested closures it is possible, that the mirror for the owner has not 861 // For nested closures it is possible, that the mirror for the owner has not
936 // been created yet. 862 // been created yet.
937 if (_owner == null) { 863 if (_owner == null) {
938 _owner = _MethodMirror_owner(_reflectee); 864 _owner = _MethodMirror_owner(_reflectee);
939 } 865 }
940 // TODO(11897): This will go away, as soon as lazy mirrors go away.
941 if (_owner is! Mirror) {
942 _owner = _owner.resolve(mirrors);
943 }
944 return _owner; 866 return _owner;
945 } 867 }
946 868
947 bool get isPrivate { 869 bool get isPrivate {
948 return _n(simpleName).startsWith('_') || 870 return _n(simpleName).startsWith('_') ||
949 _n(constructorName).startsWith('_'); 871 _n(constructorName).startsWith('_');
950 } 872 }
951 873
952 bool get isTopLevel => owner is LibraryMirror; 874 bool get isTopLevel => owner is LibraryMirror;
953 875
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 native "MethodMirror_return_type"; 947 native "MethodMirror_return_type";
1026 948
1027 static List<MethodMirror> _MethodMirror_parameters(reflectee) 949 static List<MethodMirror> _MethodMirror_parameters(reflectee)
1028 native "MethodMirror_parameters"; 950 native "MethodMirror_parameters";
1029 } 951 }
1030 952
1031 class _LocalVariableMirrorImpl extends _LocalDeclarationMirrorImpl 953 class _LocalVariableMirrorImpl extends _LocalDeclarationMirrorImpl
1032 implements VariableMirror { 954 implements VariableMirror {
1033 _LocalVariableMirrorImpl(reflectee, 955 _LocalVariableMirrorImpl(reflectee,
1034 String simpleName, 956 String simpleName,
1035 this._owner, 957 this.owner,
1036 this._type, 958 this._type,
1037 this.isStatic, 959 this.isStatic,
1038 this.isFinal) 960 this.isFinal)
1039 : super(reflectee, _s(simpleName)); 961 : super(reflectee, _s(simpleName));
1040 962
1041 var _owner; 963 final DeclarationMirror owner;
1042 DeclarationMirror get owner {
1043 if (_owner is! Mirror) {
1044 _owner = _owner.resolve(mirrors);
1045 }
1046 return _owner;
1047 }
1048 964
1049 bool get isPrivate { 965 bool get isPrivate {
1050 return _n(simpleName).startsWith('_'); 966 return _n(simpleName).startsWith('_');
1051 } 967 }
1052 968
1053 bool get isTopLevel { 969 bool get isTopLevel {
1054 return owner is LibraryMirror; 970 return owner is LibraryMirror;
1055 } 971 }
1056 972
1057 SourceLocation get location { 973 SourceLocation get location {
1058 throw new UnimplementedError( 974 throw new UnimplementedError(
1059 'VariableMirror.location is not implemented'); 975 'VariableMirror.location is not implemented');
1060 } 976 }
1061 977
1062 var _type; 978 TypeMirror _type;
1063 TypeMirror get type { 979 TypeMirror get type {
1064 if (_type == null) { 980 if (_type == null) {
1065 _type = _VariableMirror_type(_reflectee); 981 _type = _VariableMirror_type(_reflectee);
1066 } 982 }
1067 if (_type is! Mirror) {
1068 _type = _type.resolve(mirrors);
1069 }
1070 return _type; 983 return _type;
1071 } 984 }
1072 985
1073 final bool isStatic; 986 final bool isStatic;
1074 final bool isFinal; 987 final bool isFinal;
1075 988
1076 String toString() => "VariableMirror on '${_n(simpleName)}'"; 989 String toString() => "VariableMirror on '${_n(simpleName)}'";
1077 990
1078 static _VariableMirror_type(reflectee) 991 static _VariableMirror_type(reflectee)
1079 native "VariableMirror_type"; 992 native "VariableMirror_type";
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
1201 static Expando<ClassMirror> _classMirrorCache = new Expando("ClassMirror"); 1114 static Expando<ClassMirror> _classMirrorCache = new Expando("ClassMirror");
1202 static ClassMirror reflectClass(Type key) { 1115 static ClassMirror reflectClass(Type key) {
1203 var classMirror = _classMirrorCache[key]; 1116 var classMirror = _classMirrorCache[key];
1204 if (classMirror == null) { 1117 if (classMirror == null) {
1205 classMirror = makeLocalClassMirror(key); 1118 classMirror = makeLocalClassMirror(key);
1206 _classMirrorCache[key] = classMirror; 1119 _classMirrorCache[key] = classMirror;
1207 } 1120 }
1208 return classMirror; 1121 return classMirror;
1209 } 1122 }
1210 } 1123 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698