Typealias? parseTypedefDeclaration()

in lib/src/header_parser/sub_parsers/typedefdecl_parser.dart [46:104]


Typealias? parseTypedefDeclaration(
  clang_types.CXCursor cursor, {
  bool pointerReference = false,
}) {
  _stack.push(_ParsedTypealias());
  final typedefName = cursor.spelling();
  final typedefUsr = cursor.usr();
  if (shouldIncludeTypealias(typedefUsr, typedefName)) {
    final ct = clang.clang_getTypedefDeclUnderlyingType(cursor);
    final s = getCodeGenType(ct, pointerReference: pointerReference);

    if (bindingsIndex.isSeenUnsupportedTypealias(typedefUsr)) {
      // Do not process unsupported typealiases again.
    } else if (s.broadType == BroadType.Unimplemented) {
      _logger
          .fine("Skipped Typedef '$typedefName': Unimplemented type referred.");
      bindingsIndex.addUnsupportedTypealiasToSeen(typedefUsr);
    } else if (s.broadType == BroadType.Compound &&
        s.compound!.originalName == typedefName) {
      // Ignore typedef if it refers to a compound with the same original name.
      bindingsIndex.addUnsupportedTypealiasToSeen(typedefUsr);
      _logger.fine(
          "Skipped Typedef '$typedefName': Name matches with referred struct/union.");
    } else if (s.broadType == BroadType.Enum) {
      // Ignore typedefs to Enum.
      bindingsIndex.addUnsupportedTypealiasToSeen(typedefUsr);
      _logger.fine("Skipped Typedef '$typedefName': typedef to enum.");
    } else if (s.broadType == BroadType.Handle) {
      // Ignore typedefs to Handle.
      _logger.fine("Skipped Typedef '$typedefName': typedef to Dart Handle.");
      bindingsIndex.addUnsupportedTypealiasToSeen(typedefUsr);
    } else if (s.broadType == BroadType.ConstantArray ||
        s.broadType == BroadType.IncompleteArray) {
      // Ignore typedefs to Constant Array.
      _logger.fine("Skipped Typedef '$typedefName': typedef to array.");
      bindingsIndex.addUnsupportedTypealiasToSeen(typedefUsr);
    } else if (s.broadType == BroadType.Boolean) {
      // Ignore typedefs to Boolean.
      _logger.fine("Skipped Typedef '$typedefName': typedef to bool.");
      bindingsIndex.addUnsupportedTypealiasToSeen(typedefUsr);
    } else {
      // Create typealias.
      _stack.top.typealias = Typealias(
        usr: typedefUsr,
        originalName: typedefName,
        name: config.typedefs.renameUsingConfig(typedefName),
        type: s,
        dartDoc: getCursorDocComment(cursor),
      );
      bindingsIndex.addTypealiasToSeen(typedefUsr, _stack.top.typealias!);
    }
  }

  if (bindingsIndex.isSeenTypealias(typedefUsr)) {
    _stack.top.typealias = bindingsIndex.getSeenTypealias(typedefUsr);
  }

  return _stack.pop().typealias;
}