ilya-biryukov added a subscriber: sammccall.
ilya-biryukov added inline comments.


================
Comment at: clangd/XRefs.cpp:669
+                          const CXXMethodDecl *Candidate) {
+  // FIXME: How do I determine if Method overrides Candidate?
+
----------------
kadircet wrote:
> ilya-biryukov wrote:
> > simark wrote:
> > > kadircet wrote:
> > > > https://github.com/llvm-mirror/clang/blob/master/lib/Sema/SemaDecl.cpp
> > > > 
> > > > you can check this sample, which simply traverses all base classes and 
> > > > gets methods with the same name, then checks whether one is overload of 
> > > > the other. If it they are not overloads then one in the base classes 
> > > > gets overriden by the other.
> > > > 
> > > > 
> > > > Another approach could be to search for one method in others 
> > > > overriden_methods.
> > > > 
> > > > But they are both inefficient, I would suggest calling these functions 
> > > > only when one of them is defined in the base class of other then you 
> > > > can just check for name equality and not being an overload.
> > > > https://github.com/llvm-mirror/clang/blob/master/lib/Sema/SemaDecl.cpp
> > > 
> > > Did you mean to link to a particular line?
> > > 
> > > > you can check this sample, which simply traverses all base classes and 
> > > > gets methods with the same name, then checks whether one is overload of 
> > > > the other. If it they are not overloads then one in the base classes 
> > > > gets overriden by the other.
> > > 
> > > > Another approach could be to search for one method in others 
> > > > overriden_methods.
> > > 
> > > I have tried using `overriden_methods`, but it only contains methods 
> > > marked virtual.  For this feature, I would like to consider non-virtual 
> > > methods too.
> > > 
> > > > But they are both inefficient, I would suggest calling these functions 
> > > > only when one of them is defined in the base class of other then you 
> > > > can just check for name equality and not being an overload.
> > > 
> > > I am not sure I understand, but maybe it will be clearer when I will see 
> > > the sample.
> > See the code that actually computes a list for `override_methods()`: 
> > Sema::AddOverriddenMethods.
> > Did you mean to link to a particular line?
> 
> 
> Yeah sorry, I was trying to link the function ilya mentioned.
> https://github.com/llvm-mirror/clang/blob/master/lib/Sema/SemaDecl.cpp#L7615
> 
> Since you also mentioned checking non-virtual method as well you might wanna 
> look at 
> https://github.com/llvm-mirror/clang/blob/master/lib/Sema/SemaDecl.cpp#L7555 
> as well.
> 
> Also I got the chance to look the rest of the patch, as I mentioned above you 
> are already checking two methods iff one lies in the others base classes. So 
> you can simply check for name equality and not being an overload case.
Also wanted to bring up what @sammccall already mentioned on clangd-dev: we 
probably shouldn't show methods that hide base methods rather than override the 
virtual base methods (at least, by default).

Those might be useful, but unless we can have a clear UI indicator of whether a 
method is overriding a virtual base method or is hiding some other method, it 
would to add more confusion than benefit IMO.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D51311



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to