typeRefer function

Reference typeRefer(
  1. ImportableType type, [
  2. Uri? targetFile,
  3. bool withNullabilitySuffix = true
])

Implementation

Reference typeRefer(ImportableType type,
    [Uri? targetFile, bool withNullabilitySuffix = true]) {
  final import = targetFile == null
      ? ImportableTypeResolver.resolveAssetImport(type.import)
      : ImportableTypeResolver.relative(type.import, targetFile);

  if (type.isRecordType) {
    return RecordType(
      (b) => b
        ..url = import
        ..isNullable = type.isNullable
        ..positionalFieldTypes.addAll(
          type.typeArguments.where((e) => !e.isNamedRecordField).map(typeRefer),
        )
        ..namedFieldTypes.addAll({
          for (final entry in [
            ...type.typeArguments.where((e) => e.isNamedRecordField)
          ])
            entry.nameInRecord!: typeRefer(entry)
        }),
    );
  }

  return TypeReference((reference) {
    reference
      ..symbol = type.name
      ..url = import
      ..isNullable = withNullabilitySuffix && type.isNullable;
    if (type.typeArguments.isNotEmpty) {
      reference.types.addAll(
        type.typeArguments.map((e) => typeRefer(e, targetFile)),
      );
    }
  });
}