In einem unserer Kundenprojekte werden ~100 Services über ein altes Binärdatenprotokoll aufgerufen. Diese Services sollen nun über eine Webschnittstelle kommunizieren, daher müssen auch die Aufrufe entsprechend verändert werden. Diese Aufgabe ist händisch aufwändig und fehleranfällig zu lösen, daher haben wir uns dazu entschieden, OpenRewrite zu verwenden.
Bei OpenRewrite handelt es sich um ein Tool, mit dem man automatisierte Refactorings durchführen kann. Rezepte sind dabei die einzelnen Bausteine des Refactorings, die jeweils eine Aufgabe kapseln. OpenRewrite erstellt dafür eine Baumstruktur deines Codes (der Lossless Semantics Tree, kurz LST) und implementiert das Visitor-Pattern für Zugriffe auf diesen. Ein Visitor definiert die Lese- und Schreibzugriffe auf gewisse Arten von Knoten im LST (z.B. Methodenaufrufe, Klassendeklarationen).
Dieser Blogeintrag soll einen Überblick über die Herausforderungen und Hilfsmittel geben, auf die wir gestoßen sind. Falls du wissen möchtest, wie man Rezepte überhaupt entwickelt, möchten wir auf die offizielle Dokumentation von OpenRewrite, bzw. zu den Sourcen der offiziellen Rezepte verweisen.