Mit dem Eclipse-Tool Refactory eigene Metamodelle und DSLs um Refactorings erweitern

Refactorings für DSLs und Modelle

Jan Reimann

Refactorings werden in der Eclipse IDE angeboten, um vorhandenen Code derart umzustrukturieren, dass sich das Design verbessert, das Verhalten jedoch beibehalten wird. Das wohl bekannteste Refactoring ist Extract Method, womit Anweisungen (z. B. in einer Methode einer Java-Klasse) in eine neue Methode verschoben werden. An der ursprünglichen Position der Anweisungen wird anschließend ein Aufruf zur neuen Methode eingefügt, wodurch der resultierende Programmfluss derselbe bleibt.

Im Zuge der modellgetriebenen Softwareentwicklung (MDSD) spielen Modelle mittlerweile eine zentrale Rolle, um die Komplexität der umzusetzenden Anwendung zu beherrschen. Aus diesem Grund gewinnen Techniken wie das Refactoring auch in der Welt der Modelle immer mehr an Bedeutung. In Editoren für eigene DSLs und Metamodelle (z. B. Baumeditoren von EMF, GMF-Editoren oder Texteditoren von EMFText oder Xtext) sind Refactorings jedoch noch nicht verfügbar, obwohl das Design von Modellen entscheidend für Wiederverwendbarkeit, Verständlichkeit und Lesbarkeit ist. Um Refactorings auch für Modelle verfügbar zu machen, wurde Refactory entwickelt. Refactory nutzt generische Refactorings, die durch einfache Mappings auf beliebige Metamodelle übertragbar sind. So können Modell-Refactorings wiederverwendet und müssen nicht für jede DSL neu definiert werden.

Das vom JDT bekannte Refactoring Extract Superclass wurde mit Refactory für Ecore umgesetzt und kann in gewohnter Manier mittels Kontextmenü aufgerufen werden (Abb. 1).

Abb. 1: Aufruf von Modell-Refactorings per Kontextmenü

Die Ausführung der mit Refactory definierten Refactorings ist vollständig in das Language Toolkit (LTK) von Eclipse integriert, wodurch das gewohnte Look and Feel des Refactoring Wizards erhalten bleibt. Des Weiteren ist durch die LTK-Integration eine Vorschau verfügbar, in der alle durchzuführenden Umstrukturierungen des Modell-Refactorings ersichtlich sind. In dem Beispiel aus Abbildung 1 soll das Attribut name der Metaklassen Person und Company in eine neue Superklasse verschoben werden. Anschließend sollen beide Metaklassen von dieser erben. Nach dem Refactoring hat das Beispielmodell die Struktur aus Abbildung 2. Die ursprünglichen Metaklassen besitzen nun kein Attribut mehr, sind aber Unterklassen der neuen Metaklasse Nameable.

Abb. 2: Ecore-Modell nach dem Refactoring

Mit Refactory ist es möglich, DSL-Editoren um Refactorings zu erweitern, wodurch sie mehr und mehr den Charakter einer vollwertigen IDE erhalten. Zu beziehen ist Refactory über den Eclipse Marketplace oder die unter [1] angegebene Updatesite. Bisher konnten auf diese Weise aus neun generischen 53 konkrete Refactorings erstellt werden. Bekannte Zielsprachen sind z. B. Ecore, UML2, BPMN oder Java. Eine vollständige Liste des Refactoring-Katalogs ist unter [2] zu finden.

Jan Reimann ist Dipl.-Inf. an der TU Dresden. In seiner Diplomarbeit hat er das Thema des generischen Modell-Refactorings untersucht. Demnächst beginnt er seine Promotion an der TU Dresden.
Geschrieben von
Jan Reimann
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.