Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] Eclipse CDT - Get the definition of a C++ method when I have the declaration

Lukas,

Thanks a lot for your input. This helped me solve the problem I've been struggling with! Thanks so much!

Best,
Sonia


From: Lukas Felber <lfelber@xxxxxx>
To: CDT General developers list. <cdt-dev@xxxxxxxxxxx>
Sent: Thu, November 11, 2010 2:24:33 AM
Subject: Re: [cdt-dev] Eclipse CDT - Get the definition of a C++ method when I have the declaration

Hi Sonia

I see I missed something here (my fault). the code would be correct as
follows:
CPPClassType classBinding = (ICPPClassType)
compTypeSpecifier.getName().resolveBinding();

Lukas


On Thu, 2010-11-11 at 01:59 +0100, HAIDUC SONIA wrote:
> Hi Lukas,
>
>
> Thank you so much for your reply! This really helped!! I managed to
> get until the following statement just fine:
> CPPClassType classBinding =
> (ICPPClassType) compTypeSpecifier.resolveBinding();
> The class ICPPASTCompositeTypeSpecifier does not have a
> resolveBinding() method, as far as I can see... Could you please tell
> me what would be an alternative to this stamement?
>
>
> Thank you very much!
> Sonia
>
>
> ______________________________________________________________________
> From: Lukas Felber <lfelber@xxxxxx>
> To: CDT General developers list. <cdt-dev@xxxxxxxxxxx>
> Sent: Wed, November 10, 2010 11:13:30 AM
> Subject: Re: [cdt-dev] Eclipse CDT - Get the definition of a C++
> method when I have the declaration
>
> Hi Sonia
>
> To solve your problem, I think that you have to use the Indexer and
> AST-Structure provided by CDT. I try to give you some hints in the
> following (incomplete) code:
>
>
> IIndex index = CCorePlugin.getIndexManager().getIndex(project);
> // you should lock and unlock the index before and after use
> int astStyle = ITranslationUnit.AST_CONFIGURE_USING_SOURCE_CONTEXT |
> ITranslationUnit.AST_SKIP_INDEXED_HEADERS;
> IASTTranslationUnit astTu = translationUnit.getAST(index, astStyle);
> //use a CPPASTVisitor (you have to subclass it) to find classes
> //(which in the ast are ICPPASTCompositeTypeSpecifier)
> //to find class source code use
> compTypeSpecifier.getRawSignature();
> //to find its methods use
> ICPPClassType classBinding = (ICPPClassType)
> compTypeSpecifier.resolveBinding();
> classBinding.getMethods();
> index.findNames(x, IIndex.FIND_DEFINITIONS);
> //this gives you the IName of the method definition.
> //you should be able to use the name's IASTFileLocation to get
> //information about the whereabout of the method's definition
>
> I hope this information helps you to solve your problem.
>
> Lukas
>
>
> On Tue, 2010-11-09 at 20:50 +0100, HAIDUC SONIA wrote:
> > Hi there,
> >
> >
> > I am trying to extract the source code of all C++ classes from  a C
> ++
> > program, and I need to get, for each class, its whole source code,
> > i.e., with both the definition of the class and the declaration of
> its
> > methods from a header file and the definition of its methods from a
> > source file. I am able to get the definition of the class, including
> > the declaration of its methods, by using the following code:
> >
> >
> > HashSet<ITranslationUnit> transUnits = new
> > HashSet<ITranslationUnit>();
> > ISourceRoot roots[] = project.getSourceRoots();
> > for (ISourceRoot root:roots){
> > transUnits.addAll(Arrays.asList(root.getTranslationUnits()));
> > }
> >
> > for (ITranslationUnit translationUnit:transUnits){
> > if (translationUnit.isCXXLanguage()){
> > ICElement elems[] = TypeUtil.getTypes(translationUnit);
> > for (int i=0;i<elems.length;i++)
> > if (TypeUtil.isClass(elems[i])){
> > String classDeclarationCode = ((IStructure)elem).getSource();
> > }
> > }
> > }
> >
> >
> > This gets me the definitions of classes from header files, including
> > the declarations of their methods. However, I still need to get the
> > definition of the class' methods, which are not in the header file.
> I
> > have been going around this for several days now, and I could not
> find
> > a solution to this.
> >
> >
> > I managed to get the method declarations from the header file, by
> > using the following code:
> >
> >
> > List<ICElement> methodDeclarationsClass = new
> ArrayList<ICElement>();
> >
> methodDeclarationsClass.addAll(((IStructure)elem).getChildrenOfType(ICElement.C_METHOD_DECLARATION));
> > String methodDeclarationCode;
> > for (int i = 0; i<methodDeclarationsClass.size(); i++) {
> > methodDeclarationCode =
> > ((IMethodDeclaration)methodDeclarationsClass.get(i)).getSource();
> > }
> >
> >
> > , but I can't get form this to the method definitions... I would
> > really appreciate some help on this, as I am kinda stuck...
> >
> >
> > Thanks a lot!
> >
> >
> > Sonia
> >
> >
> >
> >
> >
>
> _______________________________________________
> 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


Back to the top