diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-28 17:50:33 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-28 17:50:33 +0000 |
| commit | 93db2923dab761c986a923ef86c5b002ec6b4397 (patch) | |
| tree | 243a4d535ab1ff066398ff1a3571fee881c6a1bc /clang/tools/libclang | |
| parent | ceeb19cf189ecbea878df707d28d1780862ef2e5 (diff) | |
| download | bcm5719-llvm-93db2923dab761c986a923ef86c5b002ec6b4397.tar.gz bcm5719-llvm-93db2923dab761c986a923ef86c5b002ec6b4397.zip | |
[libclang] When indexing an objc property, also provide information about
the getter/setter objc method entities that the property is associated with.
rdar://10244558
llvm-svn: 151634
Diffstat (limited to 'clang/tools/libclang')
| -rw-r--r-- | clang/tools/libclang/Indexing.cpp | 12 | ||||
| -rw-r--r-- | clang/tools/libclang/IndexingContext.cpp | 22 | ||||
| -rw-r--r-- | clang/tools/libclang/IndexingContext.h | 16 | ||||
| -rw-r--r-- | clang/tools/libclang/libclang.exports | 1 |
4 files changed, 49 insertions, 2 deletions
diff --git a/clang/tools/libclang/Indexing.cpp b/clang/tools/libclang/Indexing.cpp index 1aed5313b79..1475859e335 100644 --- a/clang/tools/libclang/Indexing.cpp +++ b/clang/tools/libclang/Indexing.cpp @@ -608,6 +608,18 @@ clang_index_getObjCProtocolRefListInfo(const CXIdxDeclInfo *DInfo) { return 0; } +const CXIdxObjCPropertyDeclInfo * +clang_index_getObjCPropertyDeclInfo(const CXIdxDeclInfo *DInfo) { + if (!DInfo) + return 0; + + const DeclInfo *DI = static_cast<const DeclInfo *>(DInfo); + if (const ObjCPropertyDeclInfo *PropInfo = dyn_cast<ObjCPropertyDeclInfo>(DI)) + return &PropInfo->ObjCPropDeclInfo; + + return 0; +} + const CXIdxIBOutletCollectionAttrInfo * clang_index_getIBOutletCollectionAttrInfo(const CXIdxAttrInfo *AInfo) { if (!AInfo) diff --git a/clang/tools/libclang/IndexingContext.cpp b/clang/tools/libclang/IndexingContext.cpp index 2963f3b9453..6797cc244aa 100644 --- a/clang/tools/libclang/IndexingContext.cpp +++ b/clang/tools/libclang/IndexingContext.cpp @@ -517,8 +517,26 @@ bool IndexingContext::handleSynthesizedObjCMethod(const ObjCMethodDecl *D, } bool IndexingContext::handleObjCProperty(const ObjCPropertyDecl *D) { - DeclInfo DInfo(/*isRedeclaration=*/false, /*isDefinition=*/false, - /*isContainer=*/false); + ObjCPropertyDeclInfo DInfo; + EntityInfo GetterEntity; + EntityInfo SetterEntity; + ScratchAlloc SA(*this); + + DInfo.ObjCPropDeclInfo.declInfo = &DInfo; + + if (ObjCMethodDecl *Getter = D->getGetterMethodDecl()) { + getEntityInfo(Getter, GetterEntity, SA); + DInfo.ObjCPropDeclInfo.getter = &GetterEntity; + } else { + DInfo.ObjCPropDeclInfo.getter = 0; + } + if (ObjCMethodDecl *Setter = D->getSetterMethodDecl()) { + getEntityInfo(Setter, SetterEntity, SA); + DInfo.ObjCPropDeclInfo.setter = &SetterEntity; + } else { + DInfo.ObjCPropDeclInfo.setter = 0; + } + return handleDecl(D, D->getLocation(), getCursor(D), DInfo); } diff --git a/clang/tools/libclang/IndexingContext.h b/clang/tools/libclang/IndexingContext.h index ea457052b42..8463e3fedf9 100644 --- a/clang/tools/libclang/IndexingContext.h +++ b/clang/tools/libclang/IndexingContext.h @@ -53,6 +53,8 @@ struct DeclInfo : public CXIdxDeclInfo { Info_ObjCProtocol, Info_ObjCCategory, + Info_ObjCProperty, + Info_CXXClass }; @@ -168,6 +170,20 @@ struct ObjCCategoryDeclInfo : public ObjCContainerDeclInfo { static bool classof(const ObjCCategoryDeclInfo *D) { return true; } }; +struct ObjCPropertyDeclInfo : public DeclInfo { + CXIdxObjCPropertyDeclInfo ObjCPropDeclInfo; + + ObjCPropertyDeclInfo() + : DeclInfo(Info_ObjCProperty, + /*isRedeclaration=*/false, /*isDefinition=*/false, + /*isContainer=*/false) { } + + static bool classof(const DeclInfo *D) { + return D->Kind == Info_ObjCProperty; + } + static bool classof(const ObjCPropertyDeclInfo *D) { return true; } +}; + struct CXXClassDeclInfo : public DeclInfo { CXIdxCXXClassDeclInfo CXXClassInfo; diff --git a/clang/tools/libclang/libclang.exports b/clang/tools/libclang/libclang.exports index b028bb46028..8645b15f7b2 100644 --- a/clang/tools/libclang/libclang.exports +++ b/clang/tools/libclang/libclang.exports @@ -158,6 +158,7 @@ clang_index_getIBOutletCollectionAttrInfo clang_index_getObjCCategoryDeclInfo clang_index_getObjCContainerDeclInfo clang_index_getObjCInterfaceDeclInfo +clang_index_getObjCPropertyDeclInfo clang_index_getObjCProtocolRefListInfo clang_index_isEntityObjCContainerKind clang_index_setClientContainer |

