Das Language Toolkit: API für automatisierte Refactorings in Eclipse-basierten IDEs

Neutral im Sinne der Qualität

Leif Frenzel

Wer eine Programmiersprache in einer Eclipse-basierten IDE unterstützt, wird früher oder später gefragt, ob er denn auch automatisierte Refactorings anbietet – von der Art, wie sie in den Java Development Tools (JDT) enthalten sind (und auf die kaum ein Benutzer von Eclipse inzwischen noch verzichten möchte). Seit Eclipse 3.1 wird zumindest ein Teil dieser keineswegs einfachen Aufgabe von einem sprachneutralen API unterstützt: dem Language Toolkit (LTK). Doch wie wird dieses API verwendet?

Unter „Refactoring“ versteht man in erster Linie eine Programmiertechnik, bei der die Qualität des Quelltextes (z.B. hinsichtlich der Wartbarkeit oder Erweiterbarkeit) verbessert wird. Dies geschieht durch die schrittweise Umformulierung des Codes, bei der die Semantik des bearbeiteten Programmteils unverändert belassen wird. Um sicherzustellen, dass nicht versehentlich Fehler eingebaut werden, wird das Refactoring mittels einer Sammlung (Suite) von Unit-Tests kontrolliert.Größere Refactorings können eine erhebliche Menge an Programmcode betreffen und einen nicht geringen Arbeitsaufwand bedeuten. Solange allerdings das Prinzip der kleinen Schritte eingehalten wird, können sie oft einfach als eine Sequenz atomarer Änderungen angesehen werden. Solche Änderungen, wie etwa das Umbenennen einer Variablen oder das Extrahieren eines Programmblocks in eine Hilfsmethode, werden ebenfalls als Refactoring bezeichnet. Speziell für Java bietet [1] einen umfangreichen Katalog mit präziser Beschreibung der jeweils erforderlichen Schritte – und auch der potenziellen Gefahren – in einem bestimmten Refactoring.Die Zuverlässigkeit ist am größten, wenn die atomaren Schritte des Refactorings automatisiert werden können – nicht nur, weil die Korrektheit der automatisierten Schritte durch ein Werkzeug gewährleistet ist, sondern auch, weil die Entwickler, die das Refactoring durchführen, ihr Augenmerk auf den größeren Zusammenhang richten können, statt die vielen kleinen Änderungen am Quellcode selbst durchführen zu müssen. Die Java IDE von Eclipse (JDT) bietet inzwischen eine Vielzahl solcher automatisierter Refactorings (die gebräuchlichsten werden in [2] im Detail beschrieben).Einen Teil der immer wiederkehrenden Elemente in der Implementierung dieser Refactorings hat das Team von JDT in eine sprachunabhängige Schicht extrahiert, die nunmehr in der Eclipse-Plattform als eigenständiges API verfügbar ist und somit unabhängig von der Java-Unterstützung benutzt werden kann. Diese Schicht wird als Language Toolkit (LTK) bezeichnet und findet sich in den Plug-ins org.eclipse.ltk.core.refactoring und org.eclipse.ltk.ui.refactoring. Sie enthält auch eine Infrastruktur (die so genannten Refactoring Participants), die es anderen Plug-ins ermöglicht, an Refactorings via Extensions gezielt teilzunehmen (siehe Kasten „Refactoring Participants“).

Abb. 2: Die Vorschau-Seite gibt einen Überblick über alle Änderungen im Zuge des Refactorings.
Geschrieben von
Leif Frenzel
Kommentare

Schreibe einen Kommentar

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