forked from OSchip/llvm-project
Move logic to check if a class is tagged with objc_suppress_protocol_methods into a helper.
llvm-svn: 195559
This commit is contained in:
parent
d480b1bf34
commit
33f504328f
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue