in facebook-clang-plugins/libtooling/ASTExporter.h [4503:4539]
void ASTExporter<ATDWriter>::VisitObjCPropertyRefExpr(
const ObjCPropertyRefExpr *Node) {
VisitExpr(Node);
bool IsSuperReceiver = Node->isSuperReceiver();
bool IsMessagingGetter = Node->isMessagingGetter();
bool IsMessagingSetter = Node->isMessagingSetter();
ObjectScope Scope(OF,
1 + IsSuperReceiver + IsMessagingGetter +
IsMessagingSetter); // not covered by tests
OF.emitTag("kind");
if (Node->isImplicitProperty()) {
VariantScope Scope(OF, "MethodRef");
{
bool HasImplicitPropertyGetter = Node->getImplicitPropertyGetter();
bool HasImplicitPropertySetter = Node->getImplicitPropertySetter();
ObjectScope Scope(
OF, 0 + HasImplicitPropertyGetter + HasImplicitPropertySetter);
if (HasImplicitPropertyGetter) {
OF.emitTag("getter");
dumpSelector(Node->getImplicitPropertyGetter()->getSelector());
}
if (HasImplicitPropertySetter) {
OF.emitTag("setter");
dumpSelector(Node->getImplicitPropertySetter()->getSelector());
}
}
} else {
VariantScope Scope(OF, "PropertyRef");
dumpDeclRef(*Node->getExplicitProperty());
}
OF.emitFlag("is_super_receiver", IsSuperReceiver);
OF.emitFlag("is_messaging_getter", IsMessagingGetter);
OF.emitFlag("is_messaging_setter", IsMessagingSetter);
}