invokeNestedMappingForStaticFunction function

Expression invokeNestedMappingForStaticFunction(
  1. ExecutableElement sourceFunction,
  2. ClassElement abstractMapper,
  3. VariableElement targetField,
  4. Expression sourceFieldAssignment,
)

Implementation

Expression invokeNestedMappingForStaticFunction(
  ExecutableElement sourceFunction,
  ClassElement abstractMapper,
  VariableElement targetField,
  Expression sourceFieldAssignment,
) {
  final returnType = sourceFunction.returnType;
  final matchingMappingMethods =
      _findMatchingMappingMethod(abstractMapper, targetField.type, returnType);
  if (matchingMappingMethods.isNotEmpty) {
    final nestedMappingMethod = matchingMappingMethods.first;

    if (nestedMappingMethod.parameters.first.type.nullabilitySuffix !=
            NullabilitySuffix.question &&
        sourceFunction.returnType.nullabilitySuffix ==
            NullabilitySuffix.question) {
      final str = makeNullCheckCall(
        sourceFieldAssignment.accept(DartEmitter()).toString(),
        nestedMappingMethod,
      );
      sourceFieldAssignment = refer(str);
    } else {
      sourceFieldAssignment = refer(matchingMappingMethods.first.name)
          .call([sourceFieldAssignment]);
    }
  }
  return sourceFieldAssignment;
}