in lib/src/builder.dart [1064:1130]
Expression _dummyValue(analyzer.DartType type) {
if (type is analyzer.FunctionType) {
return _dummyFunctionValue(type);
}
if (type is! analyzer.InterfaceType) {
// TODO(srawlins): This case is not known.
return literalNull;
}
var typeArguments = type.typeArguments;
if (type.isDartCoreBool) {
return literalFalse;
} else if (type.isDartCoreDouble) {
return literalNum(0.0);
} else if (type.isDartCoreFunction) {
return refer('() {}');
} else if (type.isDartAsyncFuture || type.isDartAsyncFutureOr) {
final typeArgument = typeArguments.first;
final futureValueArguments =
typeSystem.isPotentiallyNonNullable(typeArgument)
? [_dummyValue(typeArgument)]
: <Expression>[];
return _futureReference(_typeReference(typeArgument))
.property('value')
.call(futureValueArguments);
} else if (type.isDartCoreInt) {
return literalNum(0);
} else if (type.isDartCoreIterable || type.isDartCoreList) {
assert(typeArguments.length == 1);
final elementType = _typeReference(typeArguments[0]);
return literalList([], elementType);
} else if (type.isDartCoreMap) {
assert(typeArguments.length == 2);
final keyType = _typeReference(typeArguments[0]);
final valueType = _typeReference(typeArguments[1]);
return literalMap({}, keyType, valueType);
} else if (type.isDartCoreNum) {
return literalNum(0);
} else if (type.isDartCoreSet) {
assert(typeArguments.length == 1);
final elementType = _typeReference(typeArguments[0]);
return literalSet({}, elementType);
} else if (type.element.declaration == typeProvider.streamElement) {
assert(typeArguments.length == 1);
final elementType = _typeReference(typeArguments[0]);
return TypeReference((b) {
b
..symbol = 'Stream'
..types.add(elementType);
}).property('empty').call([]);
} else if (type.isDartCoreString) {
return literalString('');
} else if (type.isDartTypedDataList) {
// These "List" types from dart:typed_data are "non-subtypeable", but they
// have predicatble constructors; each has an unnamed constructor which
// takes a single int argument.
return referImported(type.displayName, 'dart:typed_data')
.call([literalNum(0)]);
// TODO(srawlins): Do other types from typed_data have a "non-subtypeable"
// restriction as well?
}
// This class is unknown; we must likely generate a fake class, and return
// an instance here.
return _dummyValueImplementing(type);
}