resolve method

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

Implementation

@override
HTType resolve(HTDeclarationNamespace namespace) {
  var type =
      namespace.memberGet(id, from: namespace.fullName, isRecursive: true);
  if (type is HTType && type.isResolved) {
    return type;
  } else if (type is HTAbstractTypeDeclaration) {
    if (type is HTTypeAliasDeclaration) {
      type = type.declType;
    }
    final resolvedTypeArgs = <HTType>[];
    for (final arg in typeArgs) {
      final resolved = arg.resolve(namespace);
      resolvedTypeArgs.add(resolved);
    }
    if (type is HTClassDeclaration) {
      return HTNominalType(type, typeArgs: resolvedTypeArgs);
    } else if (type is HTFunctionType) {
      return type;
    } // TODO: interface type, union type, literal type etc...
    else {
      throw HTError.notType(id);
    }
  } else {
    throw HTError.notType(id);
  }
}