resolveModuleMember method

DependencyConfig resolveModuleMember(
  1. ClassElement moduleClazz,
  2. ExecutableElement executableElement
)

Implementation

DependencyConfig resolveModuleMember(
  ClassElement moduleClazz,
  ExecutableElement executableElement,
) {
  var moduleType = _typeResolver.resolveType(moduleClazz.thisType);
  var initializerName = executableElement.name;
  var isAbstract = false;

  final returnType = executableElement.returnType;
  throwIf(
    returnType.element is! ClassElement,
    '${returnType.getDisplayString(withNullability: false)} is not a class element',
    element: returnType.element,
  );

  Element? clazz;
  var type = returnType;
  if (executableElement.isAbstract) {
    clazz = returnType.element;
    isAbstract = true;
    throwIf(
      executableElement.parameters.isNotEmpty,
      'Abstract methods can not have injectable or factory parameters',
      element: executableElement,
    );
  } else {
    if (returnType.isDartAsyncFuture) {
      final typeArg = returnType as ParameterizedType;
      clazz = typeArg.typeArguments.first.element;
      type = typeArg.typeArguments.first;
    } else {
      clazz = returnType.element;
    }
  }
  _moduleConfig = ModuleConfig(
    isAbstract: isAbstract,
    isMethod: executableElement is MethodElement,
    type: moduleType,
    initializerName: initializerName,
  );
  _type = _typeResolver.resolveType(type);
  return _resolveActualType(clazz as ClassElement, executableElement);
}