diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-27 21:10:05 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-27 21:10:05 +0000 |
commit | f28385991fa724ac0bd6017d709f17b1838cfea3 (patch) | |
tree | 27b683b6464027be47f69666240e0e47dd3b3359 /lib/Sema/SemaDeclObjC.cpp | |
parent | ada087c4518a18f844ecc051b07039064016a4ba (diff) |
Further improvement to point to category
whose protocolls methods needs implementation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99730 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclObjC.cpp')
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 79a664f2e1..cf7ffae236 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -769,7 +769,14 @@ void Sema::CheckProtocolMethodDefs(SourceLocation ImpLoc, bool& IncompleteImpl, const llvm::DenseSet<Selector> &InsMap, const llvm::DenseSet<Selector> &ClsMap, - ObjCInterfaceDecl *IDecl) { + ObjCContainerDecl *CDecl) { + ObjCInterfaceDecl *IDecl; + if (ObjCCategoryDecl *C = dyn_cast<ObjCCategoryDecl>(CDecl)) + IDecl = C->getClassInterface(); + else + IDecl = dyn_cast<ObjCInterfaceDecl>(CDecl); + assert (IDecl && "CheckProtocolMethodDefs - IDecl is null"); + ObjCInterfaceDecl *Super = IDecl->getSuperClass(); ObjCInterfaceDecl *NSIDecl = 0; if (getLangOptions().NeXTRuntime) { @@ -809,7 +816,7 @@ void Sema::CheckProtocolMethodDefs(SourceLocation ImpLoc, IDecl->lookupInstanceMethod(method->getSelector()); if (!MethodInClass || !MethodInClass->isSynthesized()) { WarnUndefinedMethod(ImpLoc, method, IncompleteImpl); - Diag(IDecl->getLocation(), diag::note_required_for_protocol_at) << + Diag(CDecl->getLocation(), diag::note_required_for_protocol_at) << PDecl->getDeclName(); } } @@ -955,7 +962,7 @@ void Sema::ImplMethodsVsClassMethods(ObjCImplDecl* IMPDecl, for (ObjCCategoryDecl::protocol_iterator PI = C->protocol_begin(), E = C->protocol_end(); PI != E; ++PI) CheckProtocolMethodDefs(IMPDecl->getLocation(), *PI, IncompleteImpl, - InsMap, ClsMap, C->getClassInterface()); + InsMap, ClsMap, CDecl); // Report unimplemented properties in the category as well. // When reporting on missing setter/getters, do not report when // setter/getter is implemented in category's primary class |