aboutsummaryrefslogtreecommitdiff
path: root/tools/libclang/IndexingContext.cpp
diff options
context:
space:
mode:
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;