resolve method

  1. @override
HTType resolve(
  1. HTDeclarationNamespace namespace
)
override

Implementation

@override
HTType resolve(HTDeclarationNamespace namespace) {
  if (_isResolved) return _resolvedType ?? this;

  assert(id != null);
  assert(klass == null);

  HTDeclarationNamespace nsp = namespace;
  if (namespacesWithin.isNotEmpty) {
    for (final id in namespacesWithin) {
      nsp = nsp.memberGet(id, from: namespace.fullName, isRecursive: true);
    }
  }
  var type = nsp.memberGet(id!, from: namespace.fullName, isRecursive: true);
  if (type is HTType) {
    _resolvedType = type.resolve(nsp);
  } else if (type is HTTypeAliasDeclaration) {
    type.resolve();
    _resolvedType = type.declType;
  } else if (type is HTClassDeclaration) {
    _resolvedType = HTNominalType(
      klass: type,
      typeArgs: typeArgs.map((e) => e.resolve(nsp)).toList(),
      isNullable: isNullable,
    );
  } else {
    throw HTError.notType(id!);
  }

  _isResolved = true;
  return _resolvedType!;
}