r293134 - [index] When indexing an ObjC method declaration use its base name for the location.

Argyrios Kyrtzidis via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 27 13:44:21 PST 2017


Thanks!

> On Jan 27, 2017, at 9:07 AM, Hans Wennborg <hans at chromium.org> wrote:
> 
> Merged in r293303.
> 
> Thanks,
> Hans
> 
> On Fri, Jan 27, 2017 at 8:19 AM, Argyrios Kyrtzidis via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>> *bump*
>> 
>>> On Jan 25, 2017, at 6:36 PM, Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:
>>> 
>>> Hi Hans,
>>> 
>>> Could this go into the stable branch ?
>>> 
>>>> On Jan 25, 2017, at 6:11 PM, Argyrios Kyrtzidis via cfe-commits <cfe-commits at lists.llvm.org> wrote:
>>>> 
>>>> Author: akirtzidis
>>>> Date: Wed Jan 25 20:11:50 2017
>>>> New Revision: 293134
>>>> 
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=293134&view=rev
>>>> Log:
>>>> [index] When indexing an ObjC method declaration use its base name for the location.
>>>> 
>>>> Instead of using the location of the beginning '-'/'+'.
>>>> This is consistent with location used for function decls and ObjC method calls where we use the base name as the location as well.
>>>> 
>>>> Modified:
>>>>  cfe/trunk/lib/Index/IndexDecl.cpp
>>>>  cfe/trunk/test/Index/Core/index-source.m
>>>>  cfe/trunk/test/Index/Core/index-subkinds.m
>>>>  cfe/trunk/test/Index/index-decls.m
>>>>  cfe/trunk/test/Index/index-module.m
>>>>  cfe/trunk/tools/libclang/CXIndexDataConsumer.cpp
>>>>  cfe/trunk/tools/libclang/CXIndexDataConsumer.h
>>>> 
>>>> Modified: cfe/trunk/lib/Index/IndexDecl.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Index/IndexDecl.cpp?rev=293134&r1=293133&r2=293134&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/Index/IndexDecl.cpp (original)
>>>> +++ cfe/trunk/lib/Index/IndexDecl.cpp Wed Jan 25 20:11:50 2017
>>>> @@ -92,7 +92,13 @@ public:
>>>>     Relations.emplace_back((unsigned)SymbolRole::RelationAccessorOf,
>>>>                            AssociatedProp);
>>>> 
>>>> -    if (!IndexCtx.handleDecl(D, (unsigned)SymbolRole::Dynamic, Relations))
>>>> +    // getLocation() returns beginning token of a method declaration, but for
>>>> +    // indexing purposes we want to point to the base name.
>>>> +    SourceLocation MethodLoc = D->getSelectorStartLoc();
>>>> +    if (MethodLoc.isInvalid())
>>>> +      MethodLoc = D->getLocation();
>>>> +
>>>> +    if (!IndexCtx.handleDecl(D, MethodLoc, (unsigned)SymbolRole::Dynamic, Relations))
>>>>     return false;
>>>>   IndexCtx.indexTypeSourceInfo(D->getReturnTypeSourceInfo(), D);
>>>>   bool hasIBActionAndFirst = D->hasAttr<IBActionAttr>();
>>>> 
>>>> Modified: cfe/trunk/test/Index/Core/index-source.m
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/Core/index-source.m?rev=293134&r1=293133&r2=293134&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/test/Index/Core/index-source.m (original)
>>>> +++ cfe/trunk/test/Index/Core/index-source.m Wed Jan 25 20:11:50 2017
>>>> @@ -3,10 +3,10 @@
>>>> @interface Base
>>>> // CHECK: [[@LINE-1]]:12 | class/ObjC | Base | c:objc(cs)Base | _OBJC_CLASS_$_Base | Decl | rel: 0
>>>> -(void)meth;
>>>> -// CHECK: [[@LINE-1]]:1 | instance-method/ObjC | meth | c:objc(cs)Base(im)meth | -[Base meth] | Decl,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE-1]]:8 | instance-method/ObjC | meth | c:objc(cs)Base(im)meth | -[Base meth] | Decl,Dyn,RelChild | rel: 1
>>>> // CHECK-NEXT: RelChild | Base | c:objc(cs)Base
>>>> +(Base*)class_meth;
>>>> -// CHECK: [[@LINE-1]]:1 | class-method/ObjC | class_meth | c:objc(cs)Base(cm)class_meth | +[Base class_meth] | Decl,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE-1]]:9 | class-method/ObjC | class_meth | c:objc(cs)Base(cm)class_meth | +[Base class_meth] | Decl,Dyn,RelChild | rel: 1
>>>> // CHECK: [[@LINE-2]]:3 | class/ObjC | Base | c:objc(cs)Base | _OBJC_CLASS_$_Base | Ref,RelCont | rel: 1
>>>> // CHECK-NEXT: RelCont | class_meth | c:objc(cs)Base(cm)class_meth
>>>> 
>>>> @@ -92,7 +92,7 @@ extern int setjmp(jmp_buf);
>>>> 
>>>> @class I1;
>>>> @interface I1
>>>> -// CHECK: [[@LINE+1]]:1 | instance-method/ObjC | meth | c:objc(cs)I1(im)meth | -[I1 meth] | Decl,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE+1]]:8 | instance-method/ObjC | meth | c:objc(cs)I1(im)meth | -[I1 meth] | Decl,Dyn,RelChild | rel: 1
>>>> -(void)meth;
>>>> @end
>>>> 
>>>> @@ -117,7 +117,7 @@ extern int setjmp(jmp_buf);
>>>> // CHECK-NEXT: RelChild | I2 | c:objc(cs)I2
>>>> @synthesize prop = _prop;
>>>> 
>>>> -// CHECK: [[@LINE+5]]:1 | instance-method(IB)/ObjC | doAction:foo: | c:objc(cs)I2(im)doAction:foo: | -[I2 doAction:foo:] | Def,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE+5]]:12 | instance-method(IB)/ObjC | doAction:foo: | c:objc(cs)I2(im)doAction:foo: | -[I2 doAction:foo:] | Def,Dyn,RelChild | rel: 1
>>>> // CHECK-NEXT: RelChild | I2 | c:objc(cs)I2
>>>> // CHECK: [[@LINE+3]]:22 | class/ObjC | I1 | c:objc(cs)I1 | _OBJC_CLASS_$_I1 | Ref,RelCont,RelIBType | rel: 1
>>>> // CHECK-NEXT: RelCont,RelIBType | doAction:foo: | c:objc(cs)I2(im)doAction:foo:
>>>> @@ -127,11 +127,11 @@ extern int setjmp(jmp_buf);
>>>> 
>>>> @interface I3
>>>> @property (readwrite) id prop;
>>>> -// CHECK: [[@LINE+3]]:1 | instance-method/acc-get/ObjC | prop | c:objc(cs)I3(im)prop | -[I3 prop] | Decl,Dyn,RelChild,RelAcc | rel: 2
>>>> +// CHECK: [[@LINE+3]]:6 | instance-method/acc-get/ObjC | prop | c:objc(cs)I3(im)prop | -[I3 prop] | Decl,Dyn,RelChild,RelAcc | rel: 2
>>>> // CHECK-NEXT: RelChild | I3 | c:objc(cs)I3
>>>> // CHECK-NEXT: RelAcc | prop | c:objc(cs)I3(py)prop
>>>> -(id)prop;
>>>> -// CHECK: [[@LINE+3]]:1 | instance-method/acc-set/ObjC | setProp: | c:objc(cs)I3(im)setProp: | -[I3 setProp:] | Decl,Dyn,RelChild,RelAcc | rel: 2
>>>> +// CHECK: [[@LINE+3]]:8 | instance-method/acc-set/ObjC | setProp: | c:objc(cs)I3(im)setProp: | -[I3 setProp:] | Decl,Dyn,RelChild,RelAcc | rel: 2
>>>> // CHECK-NEXT: RelChild | I3 | c:objc(cs)I3
>>>> // CHECK-NEXT: RelAcc | prop | c:objc(cs)I3(py)prop
>>>> -(void)setProp:(id)p;
>>>> 
>>>> Modified: cfe/trunk/test/Index/Core/index-subkinds.m
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/Core/index-subkinds.m?rev=293134&r1=293133&r2=293134&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/test/Index/Core/index-subkinds.m (original)
>>>> +++ cfe/trunk/test/Index/Core/index-subkinds.m Wed Jan 25 20:11:50 2017
>>>> @@ -9,11 +9,11 @@
>>>> @end
>>>> // CHECK: [[@LINE+1]]:17 | class(test)/ObjC | MyTestCase | c:objc(cs)MyTestCase | <no-cgname> | Def | rel: 0
>>>> @implementation MyTestCase
>>>> -// CHECK: [[@LINE+1]]:1 | instance-method(test)/ObjC | testMe | c:objc(cs)MyTestCase(im)testMe | -[MyTestCase testMe] | Def,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE+1]]:8 | instance-method(test)/ObjC | testMe | c:objc(cs)MyTestCase(im)testMe | -[MyTestCase testMe] | Def,Dyn,RelChild | rel: 1
>>>> -(void)testMe {}
>>>> -// CHECK: [[@LINE+1]]:1 | instance-method/ObjC | testResult | c:objc(cs)MyTestCase(im)testResult | -[MyTestCase testResult] | Def,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE+1]]:6 | instance-method/ObjC | testResult | c:objc(cs)MyTestCase(im)testResult | -[MyTestCase testResult] | Def,Dyn,RelChild | rel: 1
>>>> -(id)testResult { return 0; }
>>>> -// CHECK: [[@LINE+1]]:1 | instance-method/ObjC | testWithInt: | c:objc(cs)MyTestCase(im)testWithInt: | -[MyTestCase testWithInt:] | Def,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE+1]]:8 | instance-method/ObjC | testWithInt: | c:objc(cs)MyTestCase(im)testWithInt: | -[MyTestCase testWithInt:] | Def,Dyn,RelChild | rel: 1
>>>> -(void)testWithInt:(int)i {}
>>>> @end
>>>> 
>>>> @@ -22,7 +22,7 @@
>>>> @end
>>>> // CHECK: [[@LINE+1]]:17 | class(test)/ObjC | SubTestCase | c:objc(cs)SubTestCase | <no-cgname> | Def | rel: 0
>>>> @implementation SubTestCase
>>>> -// CHECK: [[@LINE+1]]:1 | instance-method(test)/ObjC | testIt2 | c:objc(cs)SubTestCase(im)testIt2 | -[SubTestCase testIt2] | Def,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE+1]]:8 | instance-method(test)/ObjC | testIt2 | c:objc(cs)SubTestCase(im)testIt2 | -[SubTestCase testIt2] | Def,Dyn,RelChild | rel: 1
>>>> -(void)testIt2 {}
>>>> @end
>>>> 
>>>> @@ -34,7 +34,7 @@
>>>> // CHECK: [[@LINE+2]]:17 | class(test)/ObjC | MyTestCase | c:objc(cs)MyTestCase | _OBJC_CLASS_$_MyTestCase | Ref,RelCont | rel: 1
>>>> // CHECK: [[@LINE+1]]:28 | extension/ObjC | MyTestCase | c:objc(cy)MyTestCase at cat | <no-cgname> | Def | rel: 0
>>>> @implementation MyTestCase(cat)
>>>> -// CHECK: [[@LINE+1]]:1 | instance-method(test)/ObjC | testInCat | c:objc(cs)MyTestCase(im)testInCat | -[MyTestCase(cat) testInCat] | Def,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE+1]]:9 | instance-method(test)/ObjC | testInCat | c:objc(cs)MyTestCase(im)testInCat | -[MyTestCase(cat) testInCat] | Def,Dyn,RelChild | rel: 1
>>>> - (void)testInCat {}
>>>> @end
>>>> 
>>>> @@ -47,7 +47,7 @@
>>>> @property (readonly) IBOutlet id prop;
>>>> // CHECK: [[@LINE+1]]:54 | instance-property(IB,IBColl)/ObjC | propColl | c:objc(cs)IBCls(py)propColl | <no-cgname> | Decl,RelChild | rel: 1
>>>> @property (readonly) IBOutletCollection(NSButton) id propColl;
>>>> -// CHECK: [[@LINE+1]]:1 | instance-method(IB)/ObjC | doIt | c:objc(cs)IBCls(im)doIt | -[IBCls doIt] | Decl,Dyn,RelChild | rel: 1
>>>> +// CHECK: [[@LINE+1]]:12 | instance-method(IB)/ObjC | doIt | c:objc(cs)IBCls(im)doIt | -[IBCls doIt] | Decl,Dyn,RelChild | rel: 1
>>>> -(IBAction)doIt;
>>>> @end
>>>> 
>>>> 
>>>> Modified: cfe/trunk/test/Index/index-decls.m
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/index-decls.m?rev=293134&r1=293133&r2=293134&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/test/Index/index-decls.m (original)
>>>> +++ cfe/trunk/test/Index/index-decls.m Wed Jan 25 20:11:50 2017
>>>> @@ -58,7 +58,7 @@ int test1() {
>>>> // RUN: c-index-test -index-file %s -target x86_64-apple-macosx10.7 > %t
>>>> // RUN: FileCheck %s -input-file=%t
>>>> // CHECK: [indexDeclaration]: kind: objc-class | name: I | {{.*}} | loc: 1:12
>>>> -// CHECK: [indexDeclaration]: kind: objc-instance-method | name: prop | {{.*}} | loc: 3:2
>>>> +// CHECK: [indexDeclaration]: kind: objc-instance-method | name: prop | {{.*}} | loc: 3:7
>>>> // CHECK: [indexDeclaration]: kind: objc-property | name: prop | {{.*}} | loc: 2:25
>>>> // CHECK: [indexDeclaration]: kind: objc-category | name:  | {{.*}} | loc: 6:12
>>>> // CHECK: [indexDeclaration]: kind: objc-instance-method | name: setProp: | {{.*}} | loc: 7:33
>>>> @@ -82,5 +82,5 @@ int test1() {
>>>> // CHECK-NOT: [indexDeclaration]: kind: objc-instance-method {{.*}} loc: 37:
>>>> // CHECK-NOT: [indexDeclaration]: kind: objc-instance-method {{.*}} loc: 43:
>>>> 
>>>> -// CHECK: [indexDeclaration]: kind: objc-instance-method | name: meth | {{.*}} loc: 54:1 | {{.*}} | isRedecl: 0 | isDef: 0 |
>>>> +// CHECK: [indexDeclaration]: kind: objc-instance-method | name: meth | {{.*}} loc: 54:8 | {{.*}} | isRedecl: 0 | isDef: 0 |
>>>> // CHECK: [indexDeclaration]: kind: objc-property | name: c | USR: c:objc(cs)I5(cpy)c | lang: ObjC | cursor: ObjCPropertyDecl=c:55:23 [class,] | loc: 55:23
>>>> 
>>>> Modified: cfe/trunk/test/Index/index-module.m
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/index-module.m?rev=293134&r1=293133&r2=293134&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/test/Index/index-module.m (original)
>>>> +++ cfe/trunk/test/Index/index-module.m Wed Jan 25 20:11:50 2017
>>>> @@ -52,7 +52,7 @@ int glob;
>>>> // CHECK-TMOD-NEXT: [indexDeclaration]: kind: objc-class | name: Module | {{.*}} | loc: [[TMOD_MODULE_H]]:15:12
>>>> // CHECK-TMOD-NEXT:      <ObjCContainerInfo>: kind: interface
>>>> // CHECK-TMOD-NEXT: [indexDeclaration]: kind: objc-class-method | name: version | {{.*}} | loc: [[TMOD_MODULE_H]]:16:1
>>>> -// CHECK-TMOD-NEXT: [indexDeclaration]: kind: objc-class-method | name: alloc | {{.*}} | loc: [[TMOD_MODULE_H]]:17:1
>>>> +// CHECK-TMOD-NEXT: [indexDeclaration]: kind: objc-class-method | name: alloc | {{.*}} | loc: [[TMOD_MODULE_H]]:17:2
>>>> // CHECK-TMOD-NEXT: [indexDeclaration]: kind: typedef | name: FILE | {{.*}} | loc: [[TMOD_MODULE_H]]:30:3
>>>> // CHECK-TMOD-NEXT: [indexDeclaration]: kind: struct | name: __sFILE | {{.*}} | loc: [[TMOD_MODULE_H]]:28:16
>>>> // CHECK-TMOD-NEXT: [indexDeclaration]: kind: field | name: _offset | {{.*}} | loc: [[TMOD_MODULE_H]]:29:7
>>>> 
>>>> Modified: cfe/trunk/tools/libclang/CXIndexDataConsumer.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXIndexDataConsumer.cpp?rev=293134&r1=293133&r2=293134&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/tools/libclang/CXIndexDataConsumer.cpp (original)
>>>> +++ cfe/trunk/tools/libclang/CXIndexDataConsumer.cpp Wed Jan 25 20:11:50 2017
>>>> @@ -95,7 +95,7 @@ public:
>>>>   if (isa<ObjCImplDecl>(LexicalDC) && !D->isThisDeclarationADefinition())
>>>>     DataConsumer.handleSynthesizedObjCMethod(D, DeclLoc, LexicalDC);
>>>>   else
>>>> -      DataConsumer.handleObjCMethod(D);
>>>> +      DataConsumer.handleObjCMethod(D, DeclLoc);
>>>>   return true;
>>>> }
>>>> 
>>>> @@ -801,7 +801,8 @@ bool CXIndexDataConsumer::handleObjCCate
>>>> return handleObjCContainer(D, CategoryLoc, getCursor(D), CatDInfo);
>>>> }
>>>> 
>>>> -bool CXIndexDataConsumer::handleObjCMethod(const ObjCMethodDecl *D) {
>>>> +bool CXIndexDataConsumer::handleObjCMethod(const ObjCMethodDecl *D,
>>>> +                                           SourceLocation Loc) {
>>>> bool isDef = D->isThisDeclarationADefinition();
>>>> bool isContainer = isDef;
>>>> bool isSkipped = false;
>>>> @@ -814,7 +815,7 @@ bool CXIndexDataConsumer::handleObjCMeth
>>>> DeclInfo DInfo(!D->isCanonicalDecl(), isDef, isContainer);
>>>> if (isSkipped)
>>>>   DInfo.flags |= CXIdxDeclFlag_Skipped;
>>>> -  return handleDecl(D, D->getLocation(), getCursor(D), DInfo);
>>>> +  return handleDecl(D, Loc, getCursor(D), DInfo);
>>>> }
>>>> 
>>>> bool CXIndexDataConsumer::handleSynthesizedObjCProperty(
>>>> 
>>>> Modified: cfe/trunk/tools/libclang/CXIndexDataConsumer.h
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXIndexDataConsumer.h?rev=293134&r1=293133&r2=293134&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/tools/libclang/CXIndexDataConsumer.h (original)
>>>> +++ cfe/trunk/tools/libclang/CXIndexDataConsumer.h Wed Jan 25 20:11:50 2017
>>>> @@ -418,7 +418,7 @@ public:
>>>> bool handleObjCCategory(const ObjCCategoryDecl *D);
>>>> bool handleObjCCategoryImpl(const ObjCCategoryImplDecl *D);
>>>> 
>>>> -  bool handleObjCMethod(const ObjCMethodDecl *D);
>>>> +  bool handleObjCMethod(const ObjCMethodDecl *D, SourceLocation Loc);
>>>> 
>>>> bool handleSynthesizedObjCProperty(const ObjCPropertyImplDecl *D);
>>>> bool handleSynthesizedObjCMethod(const ObjCMethodDecl *D, SourceLocation Loc,
>>>> 
>>>> 
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list