in glean/lang/clang/ast.cpp [1804:1830]
bool VisitObjCPropertyImplDecl(const clang::ObjCPropertyImplDecl *decl) {
if (decl->getSourceRange().isValid()) {
if (auto r = objcPropertyDecls(decl->getPropertyDecl())) {
// TODO: remove?
folly::Optional<Fact<Cxx::Name>> name;
if (decl->isIvarNameSpecified()) {
name = db.name(decl->getPropertyIvarDecl()->getName());
}
if (auto ivar = decl->getPropertyIvarDecl()) {
if (auto s = varDecls(ivar)) {
db.fact<Cxx::ObjcPropertyIVar>(r->decl, s->decl);
}
}
db.fact<Cxx::ObjcPropertyImplementation>(
r->decl,
decl->getPropertyImplementation()
== clang::ObjCPropertyImplDecl::Synthesize
? Cxx::ObjcPropertyKind::Synthesize
: Cxx::ObjcPropertyKind::Dynamic,
maybe(name),
db.srcRange(decl->getSourceRange()).range);
}
}
return true;
}