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;
}