Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I traverse the EMF object tree generated by Xtext?

I'm using Xtext to define my DSL. Xtext generates a parser that lets me traverse the EMF model of my input DSL. I'd like to translate this EMF model into some other tree. To do this translation, I need to traverse the tree. But, I couldn't find a visitor class for the EMF model generated by Xtext. The closest thing that I've found is a Switch class that visits a single node. I can traverse the EMF model myself and invoke the Switch class on each node that I visit. But, I wonder if there exists a visitor functionality in Xtext that implements the model traversal.

like image 831
reprogrammer Avatar asked May 01 '10 16:05

reprogrammer


2 Answers

If you consider this thread, Switch (used here for instance) is pretty much the official visitor pattern for XText.
You also have the custom Validation process:

The purpose of the AbstractDeclarativeValidator is to allow you to write constraints in a declarative way – as the class name already suggests.
That is instead of writing exhaustive if-else constructs or extending the generated EMF switch you just have to add the @Check annotation to any method and it will be invoked automatically when validation takes place.

That may be not exactly what you need, though.

like image 158
VonC Avatar answered Oct 31 '22 16:10

VonC


I guess EcoreUtil.getAllProperContents(Resource, false) might be what you are looking for. You'll get a TreeIterator that will traverse the contents of the resource. Pass the result of iter.next() into a Switch and perform the transformation logic depending on the element type.

like image 45
Sebastian Zarnekow Avatar answered Oct 31 '22 18:10

Sebastian Zarnekow