Refactorings for Xpand / Xtend / Check
This project is part of the Google Summer of Code 2008
Mentor: Peter Friese
Student: Steven Reinisch
Model Driven Software Development (MDSD) describes an approach to Software Engineering that comprises the separated specification of a system's (abstract) functionality and its (concrete) technical implementation. The description of a system's (abstract) functionality is done by specifying formal models (e.g. UML (Unified Modeling Language) models), of which running code, the (concrete) technical implementation, is generated. The code generation is a multistep process. After specifying the formal functional models based on one or more metamodels they are in turn transformed into other models. At each transformation step a model is checked against the metamodel(s) to detect modelling errors. At a final step software artefacts, e.g. classes or configuration files, are generated. Xpand, Xtend and Check are languages that comprise the generator framework openArchitectureWare (oAW). These three languages are used to build custom code generators. Xtend is used for model transformations, Check for model validations and Xpand for controlling text generation. Besides these languages oAW offers tools, that extend the Eclipse IDE, to simplify the development of a code generator. Since a code generator is a software product itself, it is subject to decreasing code quality as its code base grows. The code quality maintenance can be achieved by applying refactorings to it. A refactoring is used to change the code's structure or the naming of artefacts to improve its readability and thus its maintainability without changing its functional behaviour. Refactorings can be very labour-intensive. The amount of time spent for refactorings can be reduced to a minimum by automating it. The goal of this project is to create a refactoring support for the oAW's Eclipse tools to achieve a higher maintainability of code generators comprised of Xpand, Xtend and Check files. One challenge is the fact, that extensions comprising XTend files can be used within XPand and Check files. Thus a local change to an extension is not only limited to the extension space. Another challenge is that the basis for a generator are one or more metamodels. Changes to them have an effect on all XTend, XPand and Check files. To reduce the implementation effort, the existing Eclipse refactoring and JDT (Java Development Tools) infrastructure will be used. Special attention will be paid to the LTK (Refactoring Language Toolkit), which offers an API for refactorings.
The poll has been closed. Thanks for participating!
The poll's results can be found here.
We will focus our implementation efforts on the following features:
- rename Xpand/Xtend/Check/MWE file (resource)
- XTend: rename extension
- XTend: extract extension
- XTend: move extension
- XPand: rename DEFINE
- XPand: extract DEFINE
I added the following features:
- rename package
- move Xtend/Check file
The move refactoring is not enabled for Xpand files yet. The reason is the namespace handling, which is different from Xtend files. I still find test cases the actual implementation is not working for. I have to rethink my abstractions, since the ones used for the features implemented so far do not fit that well for the namespace handling in Xpand files.
I added an action set to the menu bar allowing for undo of oAW refactorings and showing the refactoring history. Now, you do not need to mark the whole extension/define signature to refactor it as shown in the old screencast. Just right click somewhere within the extension/define as you are used from jdt refactorings.
Getting the source
__ please enter __