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

Side by Side Diff: reflectable/lib/src/reflectable_mirror_based.dart

Issue 1473073009: Added `dynamicReflected..Type`, corrected type expressions. (Closed) Base URL: https://github.com/dart-lang/reflectable.git@master
Patch Set: Review response. Created 5 years 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
« no previous file with comments | « reflectable/lib/mirrors.dart ('k') | reflectable/lib/src/reflectable_transformer_based.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) 2015, the Dart Team. All rights reserved. Use of this 1 // Copyright (c) 2015, the Dart Team. All rights reserved. Use of this
2 // source code is governed by a BSD-style license that can be found in 2 // source code is governed by a BSD-style license that can be found in
3 // the LICENSE file. 3 // the LICENSE file.
4 4
5 // TODO(sigurdm) doc: Make NoSuchCapability messages streamlined (the same in 5 // TODO(sigurdm) doc: Make NoSuchCapability messages streamlined (the same in
6 // both `reflectable_mirror_based.dart` and 6 // both `reflectable_mirror_based.dart` and
7 // `reflectable_transformer_based.dart`, and explaining as well as possible 7 // `reflectable_transformer_based.dart`, and explaining as well as possible
8 // which capability is missing.) 8 // which capability is missing.)
9 9
10 /// Implementation of the reflectable interface using dart mirrors. 10 /// Implementation of the reflectable interface using dart mirrors.
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 791
792 class ClassMirrorImpl extends _TypeMirrorImpl 792 class ClassMirrorImpl extends _TypeMirrorImpl
793 with _ObjectMirrorImplMixin 793 with _ObjectMirrorImplMixin
794 implements rm.ClassMirror { 794 implements rm.ClassMirror {
795 dm.ClassMirror get _classMirror => _declarationMirror; 795 dm.ClassMirror get _classMirror => _declarationMirror;
796 796
797 ClassMirrorImpl(dm.ClassMirror classMirror, ReflectableImpl reflectable) 797 ClassMirrorImpl(dm.ClassMirror classMirror, ReflectableImpl reflectable)
798 : super(classMirror, reflectable) {} 798 : super(classMirror, reflectable) {}
799 799
800 @override 800 @override
801 bool get hasDynamicReflectedType => _classMirror.typeVariables.isEmpty;
802
803 @override
804 Type get dynamicReflectedType {
805 if (!hasDynamicReflectedType) {
806 /// We cannot hope to implement this based on 'dart:mirrors' for generic
807 /// classes, because there is no support for obtaining one instantiation
808 /// of a generic class based on a different one (we cannot obtain
809 /// `List<dynamic>` from `List<int>` or any such thing); and when
810 /// `isOriginalDeclaration` is true we do not have a `reflectedType` at
811 /// all.
812 throw new UnsupportedError(
813 "Attempt to get dynamicReflectedType on $_classMirror");
814 }
815 return reflectedType;
816 }
817
818 @override
801 List<rm.TypeVariableMirror> get typeVariables { 819 List<rm.TypeVariableMirror> get typeVariables {
802 if (!reflectableSupportsDeclarations(_reflectable)) { 820 if (!reflectableSupportsDeclarations(_reflectable)) {
803 throw new NoSuchCapabilityError( 821 throw new NoSuchCapabilityError(
804 "Attempt to get typeVariables without `declarationsCapability`"); 822 "Attempt to get typeVariables without `declarationsCapability`");
805 } 823 }
806 return _classMirror.typeVariables.map((v) { 824 return _classMirror.typeVariables.map((v) {
807 return new _TypeVariableMirrorImpl(v, _reflectable); 825 return new _TypeVariableMirrorImpl(v, _reflectable);
808 }).toList(); 826 }).toList();
809 } 827 }
810 828
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 1067
1050 class _FunctionTypeMirrorImpl extends ClassMirrorImpl 1068 class _FunctionTypeMirrorImpl extends ClassMirrorImpl
1051 implements rm.FunctionTypeMirror { 1069 implements rm.FunctionTypeMirror {
1052 dm.FunctionTypeMirror get _functionTypeMirror => _classMirror; 1070 dm.FunctionTypeMirror get _functionTypeMirror => _classMirror;
1053 1071
1054 _FunctionTypeMirrorImpl( 1072 _FunctionTypeMirrorImpl(
1055 dm.FunctionTypeMirror functionTypeMirror, ReflectableImpl reflectable) 1073 dm.FunctionTypeMirror functionTypeMirror, ReflectableImpl reflectable)
1056 : super(functionTypeMirror, reflectable); 1074 : super(functionTypeMirror, reflectable);
1057 1075
1058 @override 1076 @override
1077 bool get hasDynamicReflectedType => false;
1078
1079 @override
1080 Type get dynamicReflectedType => throw unimplementedError(
1081 "Attempt to get dynamicReflectedType on a function type mirror");
1082
1083 @override
1059 rm.MethodMirror get callMethod { 1084 rm.MethodMirror get callMethod {
1060 return new MethodMirrorImpl(_functionTypeMirror.callMethod, _reflectable); 1085 return new MethodMirrorImpl(_functionTypeMirror.callMethod, _reflectable);
1061 } 1086 }
1062 1087
1063 @override 1088 @override
1064 List<rm.ParameterMirror> get parameters { 1089 List<rm.ParameterMirror> get parameters {
1065 return _functionTypeMirror.parameters 1090 return _functionTypeMirror.parameters
1066 .map((dm.ParameterMirror parameterMirror) { 1091 .map((dm.ParameterMirror parameterMirror) {
1067 return new _ParameterMirrorImpl(parameterMirror, _reflectable); 1092 return new _ParameterMirrorImpl(parameterMirror, _reflectable);
1068 }); 1093 });
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1153 @override 1178 @override
1154 Type get reflectedReturnType { 1179 Type get reflectedReturnType {
1155 if (impliesReflectedType(_reflectable.capabilities)) { 1180 if (impliesReflectedType(_reflectable.capabilities)) {
1156 return _methodMirror.returnType.reflectedType; 1181 return _methodMirror.returnType.reflectedType;
1157 } 1182 }
1158 throw new NoSuchCapabilityError( 1183 throw new NoSuchCapabilityError(
1159 "Attempt to get reflectedReturnType without capability"); 1184 "Attempt to get reflectedReturnType without capability");
1160 } 1185 }
1161 1186
1162 @override 1187 @override
1188 bool get hasDynamicReflectedReturnType {
1189 if (impliesReflectedType(_reflectable.capabilities)) {
1190 return _methodMirror.returnType.typeVariables.isEmpty &&
1191 _methodMirror.returnType.hasReflectedType;
1192 }
1193 throw new NoSuchCapabilityError("Attempt to get "
1194 "hasDynamicReflectedReturnType without `reflectedTypeCapability`");
1195 }
1196
1197 @override
1198 Type get dynamicReflectedReturnType {
1199 if (impliesReflectedType(_reflectable.capabilities)) {
1200 if (_methodMirror.returnType.typeVariables.isEmpty) {
1201 return _methodMirror.returnType.reflectedType;
1202 } else {
1203 // The value returned by `hasDynamicReflectedReturnType` is false, so
1204 // even though this is unimplemented and may be implemented if we get
1205 // the required runtime support, it is currently an `UnsupportedError`.
1206 throw new UnsupportedError("Attempt to obtain the "
1207 "dynamicReflectedReturnType of a generic type "
1208 "${_methodMirror.returnType}");
1209 }
1210 }
1211 throw new NoSuchCapabilityError("Attempt to get dynamicReflectedReturnType "
1212 "without `reflectedTypeCapability`");
1213 }
1214
1215 @override
1163 String get source => _methodMirror.source; 1216 String get source => _methodMirror.source;
1164 1217
1165 @override 1218 @override
1166 List<rm.ParameterMirror> get parameters { 1219 List<rm.ParameterMirror> get parameters {
1167 return _methodMirror.parameters.map((p) { 1220 return _methodMirror.parameters.map((p) {
1168 return new _ParameterMirrorImpl(p, _reflectable); 1221 return new _ParameterMirrorImpl(p, _reflectable);
1169 }).toList(); 1222 }).toList();
1170 } 1223 }
1171 1224
1172 @override 1225 @override
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1274 @override 1327 @override
1275 Type get reflectedType { 1328 Type get reflectedType {
1276 if (impliesReflectedType(_reflectable.capabilities)) { 1329 if (impliesReflectedType(_reflectable.capabilities)) {
1277 return _variableMirror.type.reflectedType; 1330 return _variableMirror.type.reflectedType;
1278 } 1331 }
1279 throw new NoSuchCapabilityError( 1332 throw new NoSuchCapabilityError(
1280 "Attempt to get reflectedType without `reflectedTypeCapability`"); 1333 "Attempt to get reflectedType without `reflectedTypeCapability`");
1281 } 1334 }
1282 1335
1283 @override 1336 @override
1337 bool get hasDynamicReflectedType {
1338 if (impliesReflectedType(_reflectable.capabilities)) {
1339 return _variableMirror.type.typeVariables.isEmpty &&
1340 _variableMirror.type.hasReflectedType;
1341 }
1342 throw new NoSuchCapabilityError("Attempt to get hasDynamicReflectedType "
1343 "without `reflectedTypeCapability`");
1344 }
1345
1346 @override
1347 Type get dynamicReflectedType {
1348 if (impliesReflectedType(_reflectable.capabilities)) {
1349 if (_variableMirror.type.typeVariables.isEmpty) {
1350 return _variableMirror.type.reflectedType;
1351 } else {
1352 // The value returned by `hasDynamicReflectedReturnType` is false, so
1353 // even though this is unimplemented and may be implemented if we get
1354 // the required runtime support, it is currently an `UnsupportedError`.
1355 throw new UnsupportedError("Attempt to obtain the dynamicReflectedType "
1356 "of a generic type ${_variableMirror.type}");
1357 }
1358 }
1359 throw new NoSuchCapabilityError("Attempt to get dynamicReflectedType "
1360 "without `reflectedTypeCapability`");
1361 }
1362
1363 @override
1284 bool get isStatic => _variableMirror.isStatic; 1364 bool get isStatic => _variableMirror.isStatic;
1285 1365
1286 @override 1366 @override
1287 bool get isFinal => _variableMirror.isFinal; 1367 bool get isFinal => _variableMirror.isFinal;
1288 1368
1289 @override 1369 @override
1290 bool get isConst => _variableMirror.isConst; 1370 bool get isConst => _variableMirror.isConst;
1291 1371
1292 @override 1372 @override
1293 bool operator ==(other) => other is VariableMirrorImpl 1373 bool operator ==(other) => other is VariableMirrorImpl
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
1978 } 2058 }
1979 } 2059 }
1980 } 2060 }
1981 2061
1982 bool _isSetterName(String name) => name.endsWith("="); 2062 bool _isSetterName(String name) => name.endsWith("=");
1983 2063
1984 String _setterNameToGetterName(String name) { 2064 String _setterNameToGetterName(String name) {
1985 assert(_isSetterName(name)); 2065 assert(_isSetterName(name));
1986 return name.substring(0, name.length - 1); 2066 return name.substring(0, name.length - 1);
1987 } 2067 }
OLDNEW
« no previous file with comments | « reflectable/lib/mirrors.dart ('k') | reflectable/lib/src/reflectable_transformer_based.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698