in facebook-clang-plugins/libtooling/ASTExporter.h [2710:2751]
void ASTExporter<ATDWriter>::VisitObjCInterfaceDecl(
const ObjCInterfaceDecl *D) {
VisitObjCContainerDecl(D);
const ObjCInterfaceDecl *SC = D->getSuperClass();
const ObjCImplementationDecl *Impl = D->getImplementation();
ObjCInterfaceDecl::protocol_iterator IP = D->protocol_begin(),
EP = D->protocol_end();
bool HasProtocols = IP != EP;
ObjCInterfaceDecl::known_categories_iterator IC = D->known_categories_begin(),
EC = D->known_categories_end();
bool HasKnownCategories = IC != EC;
ObjectScope Scope(
OF, 0 + (bool)SC + (bool)Impl + HasProtocols + HasKnownCategories);
if (SC) {
OF.emitTag("super");
dumpDeclRef(*SC);
}
if (Impl) {
OF.emitTag("implementation");
dumpDeclRef(*Impl);
}
if (HasProtocols) {
OF.emitTag("protocols");
ArrayScope Scope(OF, std::distance(IP, EP));
for (; IP != EP; ++IP) {
assert(*IP);
dumpDeclRef(**IP);
}
}
if (HasKnownCategories) {
OF.emitTag("known_categories");
ArrayScope Scope(OF, std::distance(IC, EC));
for (; IC != EC; ++IC) {
assert(*IC);
dumpDeclRef(**IC);
}
}
}