diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-28 17:50:39 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-28 17:50:39 +0000 |
commit | f911242f43ae1b0a85c323631fe817df95c9cbe9 (patch) | |
tree | 03cd3e316b71ca61e1ba900de00367b40d8d07a9 /tools/libclang/IndexingContext.cpp | |
parent | 792db266f3d2f12a7a16bf37d90074f54bca1e6f (diff) |
[AST] When we @synthesize a property with a user-defined ivar name,
make sure to record the source location of the ivar name.
[libclang] When indexing @synthesized objc methods, report the @implementation
as the lexical container.
Fixes rdar://10905472
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151635 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/libclang/IndexingContext.cpp')
-rw-r--r-- | tools/libclang/IndexingContext.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/tools/libclang/IndexingContext.cpp b/tools/libclang/IndexingContext.cpp index 6797cc244a..c9150b9a5d 100644 --- a/tools/libclang/IndexingContext.cpp +++ b/tools/libclang/IndexingContext.cpp @@ -257,7 +257,8 @@ void IndexingContext::handleDiagnosticSet(CXDiagnostic CXDiagSet) { bool IndexingContext::handleDecl(const NamedDecl *D, SourceLocation Loc, CXCursor Cursor, - DeclInfo &DInfo) { + DeclInfo &DInfo, + const DeclContext *LexicalDC) { if (!CB.indexDeclaration || !D) return false; if (D->isImplicit() && shouldIgnoreIfImplicit(D)) @@ -269,6 +270,9 @@ bool IndexingContext::handleDecl(const NamedDecl *D, || Loc.isInvalid()) return false; + if (!LexicalDC) + LexicalDC = D->getLexicalDeclContext(); + if (shouldSuppressRefs()) markEntityOccurrenceInFile(D, Loc); @@ -284,7 +288,7 @@ bool IndexingContext::handleDecl(const NamedDecl *D, getContainerInfo(D->getDeclContext(), DInfo.SemanticContainer); DInfo.semanticContainer = &DInfo.SemanticContainer; - if (D->getLexicalDeclContext() == D->getDeclContext()) { + if (LexicalDC == D->getDeclContext()) { DInfo.lexicalContainer = &DInfo.SemanticContainer; } else if (isTemplateImplicitInstantiation(D)) { // Implicit instantiations have the lexical context of where they were @@ -295,7 +299,7 @@ bool IndexingContext::handleDecl(const NamedDecl *D, // information anyway. DInfo.lexicalContainer = &DInfo.SemanticContainer; } else { - getContainerInfo(D->getLexicalDeclContext(), DInfo.LexicalContainer); + getContainerInfo(LexicalDC, DInfo.LexicalContainer); DInfo.lexicalContainer = &DInfo.LexicalContainer; } @@ -510,10 +514,11 @@ bool IndexingContext::handleSynthesizedObjCProperty( } bool IndexingContext::handleSynthesizedObjCMethod(const ObjCMethodDecl *D, - SourceLocation Loc) { + SourceLocation Loc, + const DeclContext *LexicalDC) { DeclInfo DInfo(/*isRedeclaration=*/true, /*isDefinition=*/true, /*isContainer=*/false); - return handleDecl(D, Loc, getCursor(D), DInfo); + return handleDecl(D, Loc, getCursor(D), DInfo, LexicalDC); } bool IndexingContext::handleObjCProperty(const ObjCPropertyDecl *D) { |