© DrHitch/Shutterstock.com
Eclipse meets JavaFX

2 JavaFX, Xtended - Active Annotations in Xtend


Active Annotations ermöglichen es, an der Übersetzung von Xtend-Code zu Java-Quellcode mitzuwirken. Im Wesentlichen wird eine Annotation deklariert und zusätzlich um Verarbeitungsvorschriften für den Compiler angereichert. So wird es möglich

  • Fehler und Warnungen auszugeben
  • entsprechende Quickfixes bereitzustellen
  • alle möglichen Änderungen und Erweiterungen auf die Ziel-Java-Klassen anzuwenden
  • neue Java-Typen einzuführen und sogar
  • gewöhnliche Textdateien (z. B. web.xml) zu aktualisieren oder zu erstellen.

Um solch eine Annotation nutzen zu können, muss man sie lediglich wie jede andere übliche Java-Annotation auf den Klassenpfad legen. So ist zum Beispiel eine Annotation @Entity denkbar, die einfache Klassen mit Feldern in Datenklassen verwandelt, zugeschnitten auf den eigenen projektspezifischen Kontext. In diesem Fall würde man die Definition der Entity direkt im Projekt vornehmen und pflegen und sie genau wie jedes andere API versionieren und verteilen. Die IDE wird alle Änderungen in der Verarbeitung mitverfolgen. So werden nicht nur Fehler, Warnungen und Quickfixes in der IDE verfügbar sein, sondern auch die Sichtbarkeiten und die Berechnung der Typen und der Autovervollständigung werden sich gemäß der Verarbeitungsvorschriften verhalten.

Allgemeine Anwendungsfälle

In Xtend gibt es bereits zwei Annotationen, deren Verarbeitung zurzeit noch fest im Compiler kodiert ist. Hintergrund ist, dass wir zunächst einige Erfahrungen mit dem Konzept an sich sammeln wollten. Selbstverständlich werden wir in einem zukünftigen Release die fest kodierte Version zu 100 Prozent durch Library-basierte Active Annotations ersetzen. Eine dieser Annotationen ist die @Property-Annotation, die ein einfaches Feld zu einer Java-Bean-Property übersetzt. Der Xtend-Code

// Xtend
@Property String name

ergibt also folgenden Java-Code:

// Java
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}

Die andere Annotation, die Xtend bereits enthält, ist @Data. Sie übersetzt eine Klasse mit Feldern in ein Value Object à la Domain-driven Design. Konkreter: Sie erzeugt eine Klasse mit einer wertbasierten equals- und hashcode-Implementierung sowie einer schönen toString-Implementierung. Voraussichtlich werden weitere generische Anwendungsfälle unterstützt werden, etwa @Delegate, um Delegate-Methoden für ein annotiertes Feld zu erzeugen, und @Builder, um automatisch ein Builder-API für mehrere Klassen abzuleiten.

Frameworksp...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang