<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">Hi all,<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>I'd like to do the following.<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>Given the use of a function, how can I get the following information:<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>* The range of the function name of the specific call.<br>
* The range of the accessor (in case of a non-global method  or calls on this)<br>
* The range of the expression on which the method is called (in case of non global methods or calls on this)<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>I have the idea that non of this information is currently accessible given the use of a function (i.e. one of the SimpleRange objects returned by ClassFunctionDeclaration::uses() or FunctionDeclaration::uses()). I think this needs work in the DUChain builder but I dont' understand it well enough yet.<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>My idea would be to add a new structure FunctionCall, which will be stored in the DUChain and contain the above information. In addition it could also store a pointer to the declaration of the this object (i.e. the object on which it is called) in case of non global functions. Any suggestions on how to implement this would be more than welcome. If you think this is an useful addition for KDevelop in general I'd of course be more than happy to add it to the (cpp)duchain directly.<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>By the way, the use case is this: In my transform language i'd like to provide access to different parts of a call.<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>before transform:<br>
<span style=" font-family:'courier 10 pitch'; color:#000000;">Class *obj2 = (Class*)someObj->child("name", "Class");</span><br>
<span style=" font-family:'courier 10 pitch'; color:#000000;">Class *obj3 = (Class*)child("name", "Class");</span><br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>After transform:<br>
<span style=" font-family:'courier 10 pitch'; color:#000000;">Class *obj2 = (Class*)qFindChild<Class>(someObj, "name");</span><br>
<span style=" font-family:'courier 10 pitch'; color:#000000;">Class *obj3 = (Class*)qFindChild<Class>("name", "Class");</span><br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>Rule:<br>
<action type="Replace" item="*"><br>
qFindChild&lt;${literalVal(MemberArg[1])}&gt;(${Object},${MemberArg[0]})<br>
</action><br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>Cheers,<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>Bertjan</p></body></html>