blob: 733632507008d75a50f978d7aab1e1a2ab26e507 [file] [log] [blame]
import 'package:analyzer/dart/element/element.dart';
import 'package:mobx_codegen/src/template/params.dart';
import 'package:mobx_codegen/src/type_names.dart';
import 'package:source_gen/source_gen.dart';
// ignore: avoid_annotating_with_dynamic
String surroundNonEmpty(String prefix, String suffix, dynamic content) {
final contentStr = content.toString();
return contentStr.isEmpty ? '' : '$prefix$contentStr$suffix';
}
const _streamChecker = TypeChecker.fromRuntime(Stream);
class AsyncMethodChecker {
AsyncMethodChecker([TypeChecker? checkStream]) {
_checkStream = checkStream ?? _streamChecker;
}
late TypeChecker _checkStream;
bool returnsFuture(MethodElement method) =>
method.returnType.isDartAsyncFuture ||
(method.isAsynchronous &&
!method.isGenerator &&
method.returnType.isDynamic);
bool returnsStream(MethodElement method) =>
_checkStream.isAssignableFromType(method.returnType) ||
(method.isAsynchronous &&
method.isGenerator &&
method.returnType.isDynamic);
}
TypeParamTemplate typeParamTemplate(
TypeParameterElement param,
LibraryScopedNameFinder typeNameFinder,
) =>
TypeParamTemplate(
name: param.name,
bound: param.bound != null
? typeNameFinder.findTypeParameterBoundsTypeName(param)
: null);