Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [cdt-dev] RE: Using CDT API to get C-AST

How are you running this code that you're getting a "Workspaces is closed."
error? This tells me you are trying to do this from outside Eclipse.

Doug Schaefer, QNX Software Systems
Eclipse CDT Project Lead, http://cdtdoug.blogspot.com


> -----Original Message-----
> From: cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx] On
> Behalf Of rainman
> Sent: Thursday, May 31, 2007 2:46 PM
> To: cdt-dev@xxxxxxxxxxx
> Subject: [cdt-dev] RE: Using CDT API to get C-AST
> 
> 
> Thank for the rapid response. The error i am facing from the second block
> of
> code is below:
> 
> Exception in thread "main" java.lang.ExceptionInInitializerError
> 
>      at Itest.main(Itest.java:25)
> 
> Caused by: java.lang.IllegalStateException: Workspace is closed.
> 
>      at
> org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.ja
> va:329)
> 
>      at org.eclipse.cdt.internal.core.model.CModel.<init>(CModel.java:34)
> 
>      at org.eclipse.cdt.internal.core.model.CModelManager
> .<init>(CModelManager.java:84)
> 
>      at
> org.eclipse.cdt.internal.core.model.CModelManager.getDefault(CModelManager
> .java:165)
> 
>      at org.eclipse.cdt.core.model.CoreModel.<clinit>(CoreModel.java :60)
> 
>      ... 1 more
> 
> Which is indicating the line: ITranslationUnit trUnit = (ITranslationUnit)
> cFile;
> 
> can you please correct me if i am wrong?
> after solving this problem i will get the IASTTranslationUnit by
> ITranslationUnit.getAST ()
> >From which i can get IASTDeclaration by
> IASTTranslationUnit.getDeclarations();
> i can get IName by IASTTranslationUnit.getDeclarations(Binding); (guessing
> i
> somehow know the global variable binding)
> or i can get global IScope by IASTTranslationUnit.getScope();
> 
> But which of this will help me to get the global variable declarations and
> the statements which are using it?
> 
> Any Help on how can i edit those statement nodes and unparse/Pretty Print
> them?
> 
> Thanks again.
> Regards,
> A.Rahman
> 
> Doug Schaefer-2 wrote:
> >
> > The proper way to get an AST now (I think, I'm starting to lose track as
> > I've been busy up in build/debug-land), is off the ITranslationUnit
> using
> > getAST().
> >
> > As for your exception, what was the exception? That's important
> > information.
> > Was it a ClassCastException? That would mean your IFile wasn't a
> > ITranslationUnit. You should always check the types before doing a cast.
> >
> > Doug Schaefer, QNX Software Systems
> > Eclipse CDT Project Lead, http://cdtdoug.blogspot.com
> >
> >
> >> -----Original Message-----
> >> From: cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx]
> On
> >> Behalf Of rainman
> >> Sent: Thursday, May 31, 2007 1:58 PM
> >> To: cdt-dev@xxxxxxxxxxx
> >> Subject: [cdt-dev] Using CDT API to get C-AST
> >>
> >>
> >> Hello All,
> >>  I am new to CDT and trying to do something with cdt since last 1
> month.
> >> I
> >> have searched many sites and mailed in cdt news portal as well. Please
> >> help
> >> me some one.
> >>
> >> >From this list I found some thing like below but failed to get the
> >> declaration of class to pass in IFile:
> >>  IFile file = ...
> >>  IASTTranslationUnit ast =
> >>  CDOM.getInstance().getTranslationUnit(file);
> >>  CPPNameCollector col = new CPPNameCollector();
> >>  ast.accept(col);
> >>
> >>  Iterator i = col.nameList.iterator();
> >>  while (i.hasNext()) {
> >>     IASTName n = (IASTName) i.next();
> >>     IBinding binding = n.resolveBinding();
> >>
> >>     if(binding instanceof CPPClassType) {
> >>        // do something with the class
> >>     }
> >>  }
> >>
> >>
> >> Also from another email I got something like below but when i pass
> >> Path(file
> >> location) it gives some exception with workspace and exits at first
> line
> >> of
> >> if block.
> >>
> >> ICElement cFile = CoreModel.getDefault().create(IPath);
> >> if(cFile != null)
> >> {
> >>     ITranslationUnit trUnit = (ITranslationUnit) cFile;
> >>     ICElement[] elts = trUnit.getChildren();
> >>     if(elts != null)
> >>      {
> >>          for(int i=0; i<elts.length; i++)
> >>           {
> >>                 System.out.println(elts[i].getElementName());
> >>                  System.out.println(elts[i].getElementType());
> >>            }
> >>       }
> >> }
> >>
> >> Any simple idea or link indication will be appreciable. I've been
> trying
> >> with the CDOM cause according to Doug Schaefer that is the starting
> point
> >> for creating AST. I want to traverse the AST to get the idea which
> >> statements using global variable. Change those statements and unparse
> to
> >> get
> >> the changed source.
> >> For this i created and searched the cdt doc. I got the idea that i need
> >> to
> >> check:
> >>
> >> IDeclaration.getElementType() == ICElement.C_VARIABLE
> >>
> >> To get the global variable type. But couldn't the idea how to get the
> >> IDeclaration from the IASTDeclaration (if i can successfully get ast
> that
> >> is
> >> :-).
> >>
> >> Also i got some knowledge that in IDeclaration there is
> >> ISourceManipulation
> >> which might be in help for ast modification. But not sure about the AST
> >> unparse or pretty printer help yet.
> >>
> >> Thank you for your patience.
> >> Hope to get some positive and fast response.
> >> Regards.
> >> A.Rahman
> >> --
> >> View this message in context: http://www.nabble.com/Using-CDT-API-to-
> get-
> >> C-AST-tf3847998.html#a10898933
> >> Sent from the Eclipse CDT - Development mailing list archive at
> >> Nabble.com.
> >>
> >> _______________________________________________
> >> 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
> >
> >
> 
> --
> View this message in context: http://www.nabble.com/Using-CDT-API-to-get-
> C-AST-tf3847998.html#a10899752
> Sent from the Eclipse CDT - Development mailing list archive at
> Nabble.com.
> 
> _______________________________________________
> cdt-dev mailing list
> cdt-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/cdt-dev


Back to the top