Skip to content
Snippets Groups Projects
Commit f5fc20ff authored by Ted Kremenek's avatar Ted Kremenek
Browse files

Move logic to check if a class is tagged with objc_suppress_protocol_methods into a helper.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195559 91177308-0d34-0410-b5e6-96231b3b80d8
parent c3130a07
No related branches found
No related tags found
No related merge requests found
......@@ -925,6 +925,10 @@ public:
: superCls;
}
/// \brief Returns true if this class is marked to suppress being
/// used to determine if a subclass conforms to a protocol.
bool shouldSuppressProtocol(const ObjCProtocolDecl *P) const;
/// \brief Iterator that walks over the list of categories, filtering out
/// those that do not meet specific criteria.
///
......
......@@ -256,6 +256,22 @@ ObjCContainerDecl::FindPropertyDeclaration(IdentifierInfo *PropertyId) const {
void ObjCInterfaceDecl::anchor() { }
bool ObjCInterfaceDecl::shouldSuppressProtocol(const ObjCProtocolDecl *P) const{
if (!hasAttrs())
return false;
const AttrVec &V = getAttrs();
const IdentifierInfo *PI = P->getIdentifier();
for (AttrVec::const_iterator I = V.begin(), E = V.end(); I != E; ++I) {
if (const ObjCSuppressProtocolAttr *A =
dyn_cast<ObjCSuppressProtocolAttr>(*I)){
if (A->getProtocol() == PI) {
return true;
}
}
}
return false;
}
/// FindPropertyVisibleInPrimaryClass - Finds declaration of the property
/// with name 'PropertyId' in the primary class; including those in protocols
/// (direct or indirect) used by the primary class.
......@@ -477,18 +493,8 @@ ObjCMethodDecl *ObjCInterfaceDecl::lookupMethod(Selector Sel,
// If we are looking for a method that is part of protocol conformance,
// check if the superclass has been marked to suppress conformance
// of that protocol.
if (P && ClassDecl->hasAttrs()) {
const AttrVec &V = ClassDecl->getAttrs();
const IdentifierInfo *PI = P->getIdentifier();
for (AttrVec::const_iterator I = V.begin(), E = V.end(); I != E; ++I) {
if (const ObjCSuppressProtocolAttr *A =
dyn_cast<ObjCSuppressProtocolAttr>(*I)){
if (A->getProtocol() == PI) {
return 0;
}
}
}
}
if (P && ClassDecl->shouldSuppressProtocol(P))
return 0;
if ((MethodDecl = ClassDecl->getMethod(Sel, isInstance)))
return MethodDecl;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment