@@ -1323,7 +1323,8 @@ class _MockClassInfo {
1323
1323
// [_MockTargetGatherer._checkFunction].
1324
1324
throw InvalidMockitoAnnotationException (
1325
1325
"Mockito cannot generate a valid override for '$name ', as it has a "
1326
- 'non-nullable unknown return type.' );
1326
+ 'non-nullable unknown return type or a private type in its '
1327
+ 'signature.' );
1327
1328
}
1328
1329
builder.body = refer ('UnsupportedError' )
1329
1330
.call ([
@@ -1771,20 +1772,26 @@ class _MockClassInfo {
1771
1772
builder
1772
1773
..name = getter.displayName
1773
1774
..annotations.add (referImported ('override' , 'dart:core' ))
1774
- ..type = MethodType .getter
1775
- ..returns = _typeReference (getter.returnType);
1775
+ ..type = MethodType .getter;
1776
+
1777
+ if (! getter.returnType.containsPrivateName) {
1778
+ builder.returns = _typeReference (getter.returnType);
1779
+ }
1776
1780
1777
1781
final returnType = getter.returnType;
1778
1782
final fallbackGenerator = fallbackGenerators[getter.name];
1779
- if (typeSystem.isPotentiallyNonNullable (returnType) &&
1780
- returnType is analyzer.TypeParameterType &&
1781
- fallbackGenerator == null ) {
1783
+ final returnTypeIsTypeVariable =
1784
+ typeSystem.isPotentiallyNonNullable (returnType) &&
1785
+ returnType is analyzer.TypeParameterType ;
1786
+ final throwsUnsupported = fallbackGenerator == null &&
1787
+ (returnTypeIsTypeVariable || getter.returnType.containsPrivateName);
1788
+ if (throwsUnsupported) {
1782
1789
if (! mockTarget.unsupportedMembers.contains (getter.name)) {
1783
1790
// We shouldn't get here as this is guarded against in
1784
1791
// [_MockTargetGatherer._checkFunction].
1785
1792
throw InvalidMockitoAnnotationException (
1786
1793
"Mockito cannot generate a valid override for '${getter .name }', as "
1787
- 'it has a non-nullable unknown type.' );
1794
+ 'it has a non-nullable unknown type or a private type .' );
1788
1795
}
1789
1796
builder.body = refer ('UnsupportedError' )
1790
1797
.call ([
@@ -1824,22 +1831,45 @@ class _MockClassInfo {
1824
1831
/// This new setter just calls `super.noSuchMethod` .
1825
1832
void _buildOverridingSetter (
1826
1833
MethodBuilder builder, PropertyAccessorElement setter) {
1834
+ final nameWithEquals = setter.name;
1835
+ final name = setter.displayName;
1827
1836
builder
1828
- ..name = setter.displayName
1837
+ ..name = name
1829
1838
..annotations.add (referImported ('override' , 'dart:core' ))
1830
1839
..type = MethodType .setter;
1831
1840
1832
1841
assert (setter.parameters.length == 1 );
1833
1842
final parameter = setter.parameters.single;
1834
- builder.requiredParameters.add (Parameter ((pBuilder) => pBuilder
1835
- ..name = parameter.displayName
1836
- ..type = _typeReference (parameter.type, forceNullable: true )));
1837
- final invocationPositionalArg = refer (parameter.displayName);
1843
+ builder.requiredParameters.add (Parameter ((pBuilder) {
1844
+ pBuilder.name = parameter.displayName;
1845
+ if (! parameter.type.containsPrivateName) {
1846
+ pBuilder.type = _typeReference (parameter.type, forceNullable: true );
1847
+ }
1848
+ }));
1849
+
1850
+ if (parameter.type.containsPrivateName) {
1851
+ if (! mockTarget.unsupportedMembers.contains (nameWithEquals)) {
1852
+ // We shouldn't get here as this is guarded against in
1853
+ // [_MockTargetGatherer._checkFunction].
1854
+ throw InvalidMockitoAnnotationException (
1855
+ "Mockito cannot generate a valid override for '$nameWithEquals ', "
1856
+ 'as it has a private parameter type.' );
1857
+ }
1858
+ builder.body = refer ('UnsupportedError' )
1859
+ .call ([
1860
+ literalString (
1861
+ "'$nameWithEquals ' cannot be used without a mockito fallback "
1862
+ 'generator.' )
1863
+ ])
1864
+ .thrown
1865
+ .code;
1866
+ return ;
1867
+ }
1838
1868
1839
1869
final invocation =
1840
1870
referImported ('Invocation' , 'dart:core' ).property ('setter' ).call ([
1841
- refer ('#${ setter . displayName } ' ),
1842
- invocationPositionalArg ,
1871
+ refer ('#$name ' ),
1872
+ refer (parameter.displayName) ,
1843
1873
]);
1844
1874
final returnNoSuchMethod = refer ('super' )
1845
1875
.property ('noSuchMethod' )
0 commit comments