process method

  1. @override
QueryMethod process()
override

Implementation

@override
QueryMethod process() {
  final name = _methodElement.displayName;
  final parameters = _methodElement.parameters;
  final rawReturnType = _methodElement.returnType;

  final query = QueryProcessor(_methodElement, _getQuery()).process();

  final returnsStream = rawReturnType.isStream;

  _assertReturnsFutureOrStream(rawReturnType, returnsStream);

  final returnsList = _getReturnsList(rawReturnType, returnsStream);
  final flattenedReturnType = _getFlattenedReturnType(
    rawReturnType,
    returnsStream,
    returnsList,
  );

  _assertReturnsNullableSingle(
    returnsStream,
    returnsList,
    flattenedReturnType,
  );

  final queryable = _queryables.firstWhereOrNull((queryable) =>
      queryable.classElement.displayName ==
      flattenedReturnType.getDisplayString(withNullability: false));

  final parameterTypeConverters = parameters
      .expand((parameter) =>
          parameter.getTypeConverters(TypeConverterScope.daoMethodParameter))
      .toSet();

  final allTypeConverters = _typeConverters +
      _methodElement.getTypeConverters(TypeConverterScope.daoMethod) +
      parameterTypeConverters;

  if (queryable != null) {
    final fieldTypeConverters =
        queryable.fields.mapNotNull((field) => field.typeConverter);
    allTypeConverters.addAll(fieldTypeConverters);
  }

  return QueryMethod(
    _methodElement,
    name,
    query,
    rawReturnType,
    flattenedReturnType,
    parameters,
    queryable,
    allTypeConverters,
  );
}