@@ -722,7 +722,7 @@ class _MockLibraryInfo {
722
722
Iterable <_MockTarget > mockTargets, {
723
723
required this .assetUris,
724
724
required LibraryElement entryLib,
725
- }) : sourceLibIsNonNullable = entryLib.isNonNullableByDefault,
725
+ }) : sourceLibIsNonNullable = entryLib.isNonNullableByDefault,
726
726
typeProvider = entryLib.typeProvider,
727
727
typeSystem = entryLib.typeSystem,
728
728
fallbackGenerators = {
@@ -907,8 +907,7 @@ class _MockLibraryInfo {
907
907
if (_returnTypeIsNonNullable (method) ||
908
908
_hasNonNullableParameter (method) ||
909
909
_needsOverrideForVoidStub (method)) {
910
- yield Method ((mBuilder) => _buildOverridingMethod (mBuilder, method,
911
- className: type.getDisplayString (withNullability: true )));
910
+ yield Method ((mBuilder) => _buildOverridingMethod (mBuilder, method));
912
911
}
913
912
}
914
913
if (type.mixins != null ) {
@@ -960,8 +959,7 @@ class _MockLibraryInfo {
960
959
///
961
960
/// This new method just calls `super.noSuchMethod` , optionally passing a
962
961
/// return value for methods with a non-nullable return type.
963
- void _buildOverridingMethod (MethodBuilder builder, MethodElement method,
964
- {required String className}) {
962
+ void _buildOverridingMethod (MethodBuilder builder, MethodElement method) {
965
963
var name = method.displayName;
966
964
if (method.isOperator) name = 'operator$name ' ;
967
965
builder
@@ -1161,41 +1159,20 @@ class _MockLibraryInfo {
1161
1159
}
1162
1160
1163
1161
Expression _dummyValueImplementing (analyzer.InterfaceType dartType) {
1164
- // For each type parameter on [dartType], the Mock class needs a type
1165
- // parameter with same type variables, and a mirrored type argument for the
1166
- // "implements" clause.
1167
- var typeParameters = < Reference > [];
1168
- var elementToFake = dartType.element;
1162
+ final elementToFake = dartType.element;
1169
1163
if (elementToFake.isEnum) {
1170
1164
return _typeReference (dartType).property (
1171
1165
elementToFake.fields.firstWhere ((f) => f.isEnumConstant).name);
1172
1166
} else {
1173
1167
// There is a potential for these names to collide. If one mock class
1174
1168
// requires a fake for a certain Foo, and another mock class requires a
1175
1169
// fake for a different Foo, they will collide.
1176
- var fakeName = '_Fake${elementToFake .name }' ;
1170
+ final fakeName = '_Fake${elementToFake .name }' ;
1177
1171
// Only make one fake class for each class that needs to be faked.
1178
1172
if (! fakedClassElements.contains (elementToFake)) {
1179
- fakeClasses.add (Class ((cBuilder) {
1180
- cBuilder
1181
- ..name = fakeName
1182
- ..extend = referImported ('Fake' , 'package:mockito/mockito.dart' );
1183
- if (elementToFake.typeParameters != null ) {
1184
- for (var typeParameter in elementToFake.typeParameters) {
1185
- cBuilder.types.add (_typeParameterReference (typeParameter));
1186
- typeParameters.add (refer (typeParameter.name));
1187
- }
1188
- }
1189
- cBuilder.implements .add (TypeReference ((b) {
1190
- b
1191
- ..symbol = elementToFake.name
1192
- ..url = _typeImport (elementToFake)
1193
- ..types.addAll (typeParameters);
1194
- }));
1195
- }));
1196
- fakedClassElements.add (elementToFake);
1197
- }
1198
- var typeArguments = dartType.typeArguments;
1173
+ _addFakeClass (fakeName, elementToFake);
1174
+ }
1175
+ final typeArguments = dartType.typeArguments;
1199
1176
return TypeReference ((b) {
1200
1177
b
1201
1178
..symbol = fakeName
@@ -1204,6 +1181,41 @@ class _MockLibraryInfo {
1204
1181
}
1205
1182
}
1206
1183
1184
+ /// Adds a [Fake] implementation of [elementToFake] , named [fakeName] .
1185
+ void _addFakeClass (String fakeName, ClassElement elementToFake) {
1186
+ fakeClasses.add (Class ((cBuilder) {
1187
+ // For each type parameter on [elementToFake], the Fake class needs a type
1188
+ // parameter with same type variables, and a mirrored type argument for
1189
+ // the "implements" clause.
1190
+ final typeParameters = < Reference > [];
1191
+ cBuilder
1192
+ ..name = fakeName
1193
+ ..extend = referImported ('Fake' , 'package:mockito/mockito.dart' );
1194
+ if (elementToFake.typeParameters != null ) {
1195
+ for (var typeParameter in elementToFake.typeParameters) {
1196
+ cBuilder.types.add (_typeParameterReference (typeParameter));
1197
+ typeParameters.add (refer (typeParameter.name));
1198
+ }
1199
+ }
1200
+ cBuilder.implements .add (TypeReference ((b) {
1201
+ b
1202
+ ..symbol = elementToFake.name
1203
+ ..url = _typeImport (elementToFake)
1204
+ ..types.addAll (typeParameters);
1205
+ }));
1206
+
1207
+ final toStringMethod = elementToFake.methods
1208
+ .firstWhereOrNull ((method) => method.name == 'toString' );
1209
+ if (toStringMethod != null ) {
1210
+ // If [elementToFake] includes an overriding `toString` implementation,
1211
+ // we need to include an implementation which matches the signature.
1212
+ cBuilder.methods.add (Method (
1213
+ (mBuilder) => _buildOverridingMethod (mBuilder, toStringMethod)));
1214
+ }
1215
+ }));
1216
+ fakedClassElements.add (elementToFake);
1217
+ }
1218
+
1207
1219
/// Returns a [Parameter] which matches [parameter] .
1208
1220
///
1209
1221
/// If [parameter] is unnamed (like a positional parameter in a function
0 commit comments