Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] How to open a file at a particular function

Here's some code that shows how I did it, in case anybody is interested:

public  void  findFunctionInSource(IProject  project,  String  functionName)  {
  ICProject  cProject  =  CoreModel.getDefault().getCModel().getCProject(
      project.getName());
  IIndexManager  manager  =  CCorePlugin.getIndexManager();
  try  {
    index  =  manager.getIndex(cProject);
    index.acquireReadLock();
    IBinding[]  bindings  =  index.findBindings(
        functionName.toCharArray(),  IndexFilter.ALL,
        new  NullProgressMonitor());
    for  (int  binding  =  0;  binding  <  bindings.length;  binding++)  {
      if  (bindings[binding]  instanceof  IFunction)  {
        IFunction  ifunction  =  (IFunction)  bindings[binding];
        IIndexName[]  names  =  index.findNames(ifunction,
            IIndex.FIND_DEFINITIONS);
        for  (int  j  =  0;  j  <  names.length;  j++)  {
          IIndexFile  file  =  names[j].getFile();
          if  (file  !=  null)  {
            IIndexFileLocation  filelocation  =  file
                 .getLocation();
             String  fileName  =  filelocation.getFullPath();
           }
           IASTFileLocation  location  =  names[j].getFileLocation();
           if  (location  !=  null)  {
             int  .offset  =  location.getNodeOffset();
           }
       }
    }
 }

 }  catch  (Exception  e)  {

 }  finally  {
      if  (index  !=  null)
        index.releaseReadLock();
 }
}

Doug  Schaefer  wrote:
 -----Original  Message-----
 From:  cdt-dev-bounces@xxxxxxxxxxx  [mailto:cdt-dev-bounces@xxxxxxxxxxx]  On
 Behalf  Of  subs
 Sent:  Wednesday,  November  14,  2007  12:16  PM
 To:  CDT  General  developers  list.
 Subject:  Re:  [cdt-dev]  How  to  open  a  file  at  a  particular  function

 Phew  -  I'm  there.

 Whilst  there  are  docs  for  the  API,  there  doesn't  seem  to  be  anything  that
 describes  *how*  to  use  them.  Maybe  it  is  documented  in  this  series  of
 emails?
I think you just did ;) Documenting something like this is definitely on my wish list for API docs.
 Not  just  javadoc,  but  howto's  too.
 Anyway,  thanks  very  much  for  your  help  -  it  is  very  much  appreciated.


 Schorn,  Markus  wrote:
 Line  numbers  are  not  stored  in  the  index,  you  can  only  obtain  the
 offset.
 Markus.

 -----Original  Message-----
 From:  cdt-dev-bounces@xxxxxxxxxxx
 [mailto:cdt-dev-bounces@xxxxxxxxxxx]  On  Behalf  Of  subs
 Sent:  Mittwoch,  14.  November  2007  15:11
 To:  CDT  General  developers  list.
 Subject:  Re:  [cdt-dev]  How  to  open  a  file  at  a  particular  function
 Importance:  Low

 Markus,

 Almost  there  now...

 I  now  get  a  list  of  all  my  functions  in  an  IIndexName[].  I
 can  get  the  files
 they  are  defined  in  through  IIndexName#getFile().  However,
 IIndexName#getFileLocation().getStartingLineNumber()  always
 returns  zero.  The
 javaDoc  (for  IASTFileLocation)  states  "Locations  obtained  via
 the  index  do  not
 have  line  numbers  and  return  0".

 So,  (hopefully)  one  last  question:  how  do  obtain  the  line  number?

 Thanks  very  much  for  you  help  so  far.

 Schorn,  Markus  wrote:
 An  IBinding  does  not  have  a  location,  you  need  to  obtain  a  name
 (declaration  or  reference)  first.
 IIndex.findName(IBinding  ...)  or  similar.
 Markus.

 -----Original  Message-----
 From:  cdt-dev-bounces@xxxxxxxxxxx
 [mailto:cdt-dev-bounces@xxxxxxxxxxx]  On  Behalf  Of  subs
 Sent:  Mittwoch,  14.  November  2007  10:02
 To:  CDT  General  developers  list.
 Subject:  Re:  [cdt-dev]  How  to  open  a  file  at  a  particular  function
 Importance:  Low

 Markus,

 OK,  I  now  have  an  IBinding  to  my  function,  but  again  it's  not
 obvious  how  to
 turn  this  into  a  source  file/line  number  (or  a  direct  way  to
 open  the  source
 file  at  the  line  number).  I've  tried  ILinkage,  IScope,  ...

 Thanks  again.

 Schorn,  Markus  wrote:
 Far  from  obvious:
 CoreModel.getDefault().getCModel().getCProject(..
 Markus.
 -----Original  Message-----
 From:  cdt-dev-bounces@xxxxxxxxxxx
 [mailto:cdt-dev-bounces@xxxxxxxxxxx]  On  Behalf  Of  subs
 Sent:  Dienstag,  13.  November  2007  22:07
 To:  CDT  General  developers  list.
 Subject:  Re:  [cdt-dev]  How  to  open  a  file  at  a
 particular  function
 Importance:  Low

 Markus,

 I've  just  come  to  implement  this  -  thanks  for  the  pointer.

 One  question  -  how  do  I  convert  an  IProject  (which  I  have
 readily  available  at
 debug  time)  into  its  corresponding  ICProject?

 Thanks

 Schorn,  Markus  wrote:
 You  should  use  the  interface
 org.eclipse.cdt.core.index.IIndex.  It's
 experimental  API  but  most  likely  it  will  only  be  extended,
 not  changed.
 The  interfaces  for  accessing  the  index  are  well  documented.
 Many  of  the
 testcases  in  CDT  illustrate  how  to  use  them,
 e.g.:  org.eclipse.cdt.internal.index.tests.IndexBugsTests
 Markus.

 -----Original  Message-----
 From:  cdt-dev-bounces@xxxxxxxxxxx
 [mailto:cdt-dev-bounces@xxxxxxxxxxx]  On  Behalf  Of  subs
 Sent:  Mittwoch,  17.  Oktober  2007  22:11
 To:  CDT  General  developers  list.
 Subject:  [cdt-dev]  How  to  open  a  file  at  a  particular  function
 Importance:  Low

 Hi,

 Given  a  function  or  method  name  (as  a  String),  how  can  I
 locate  the  file  it  is
 defined  in  and  open  that  file  at  the  function  definition?  Any
 pointers  to  code,
 snippets  or  docs  would  be  very  useful.

 Thanks

 --
 Derek

 --
 Derek
 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev

 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev

 --
 Derek
 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev

 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev

 --
 Derek
 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev

 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev

 --
 Derek
 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev

 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev

 --
 Derek
 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev
 _______________________________________________
 cdt-dev  mailing  list
 cdt-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/cdt-dev

--
Derek


Back to the top