aboutsummaryrefslogtreecommitdiff
path: root/tools/libclang/IndexingContext.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-12-13 18:47:35 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-12-13 18:47:35 +0000
commitc2be04eaec94e20fc825fb98b713112d9d82562f (patch)
tree0f572a5f7483e0f2e2a1df7487f9dd5b18ff6c67 /tools/libclang/IndexingContext.cpp
parent7cb210100dedc2ebd0910cf270c794480a728be2 (diff)
[libclang] Indexing API: Fix suppressing of references in macros and suppress
@class forward references. rdar://10568080&10568103&10568119 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146496 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/libclang/IndexingContext.cpp')
-rw-r--r--tools/libclang/IndexingContext.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/tools/libclang/IndexingContext.cpp b/tools/libclang/IndexingContext.cpp
index b95d22d010..66e552c8f4 100644
--- a/tools/libclang/IndexingContext.cpp
+++ b/tools/libclang/IndexingContext.cpp
@@ -228,7 +228,8 @@ bool IndexingContext::handleDecl(const NamedDecl *D,
if (!DInfo.EntInfo.USR || Loc.isInvalid())
return false;
- markEntityOccurrenceInFile(D, Loc);
+ if (suppressRefs())
+ markEntityOccurrenceInFile(D, Loc);
DInfo.entityInfo = &DInfo.EntInfo;
DInfo.cursor = Cursor;
@@ -304,6 +305,12 @@ bool IndexingContext::handleObjCClass(const ObjCClassDecl *D) {
SourceLocation Loc = Ref->getLocation();
bool isRedeclaration = IFaceD->getLocation() != Loc;
+ // For @class forward declarations, suppress them the same way as references.
+ if (suppressRefs()) {
+ if (markEntityOccurrenceInFile(IFaceD, Loc))
+ return false; // already occurred.
+ }
+
ObjCContainerDeclInfo ContDInfo(/*isForwardRef=*/true, isRedeclaration,
/*isImplementation=*/false);
return handleObjCContainer(IFaceD, Loc,
@@ -373,6 +380,9 @@ bool IndexingContext::handleObjCCategory(const ObjCCategoryDecl *D) {
: D->getCategoryNameLoc();
getEntityInfo(IFaceD, ClassEntity, SA);
+ if (suppressRefs())
+ markEntityOccurrenceInFile(IFaceD, ClassLoc);
+
CatDInfo.ObjCCatDeclInfo.containerInfo = &CatDInfo.ObjCContDeclInfo;
if (IFaceD) {
CatDInfo.ObjCCatDeclInfo.objcClass = &ClassEntity;
@@ -583,10 +593,13 @@ bool IndexingContext::handleCXXRecordDecl(const CXXRecordDecl *RD,
bool IndexingContext::markEntityOccurrenceInFile(const NamedDecl *D,
SourceLocation Loc) {
+ if (!D || Loc.isInvalid())
+ return true;
+
SourceManager &SM = Ctx->getSourceManager();
D = getEntityDecl(D);
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(SM.getFileLoc(Loc));
FileID FID = LocInfo.first;
if (FID.isInvalid())
return true;