Java Getriebe

Java und NetBeans

Annotations statt Layereinträge

„Der neue Besen kehrt gut, bevor er voll Staub ist.“ — Freidank ((http://de.wikiquote.org/wiki/Freidank))

Geertjan schreibt in seinem Blog, dass die Programmbeispiele von NetBeans in der Version 7.0 überarbeitet wurden. Vor allem die direkten Einträge im XML Layer wurden durch Annotations direkt in den entsprechenden Klassen ersetzt.

So nett ich die Idee hinter den Annotations auch finde. Die Screenshots in dem Blogbeitrag lassen mich allerdings auch ein wenig daran zweifeln, ob sie der Weisheit letzter Schluss sind. Zumindest in Sachen „Übersicht“ sind sie meiner Meinung nach ein Schritt zurück. Unbestritten sehe ich allerdings auch den Vorteil, dass die Annotations das Refactoring der Klassen einfacher (und auch Sicherer) machen und dass sie potentielle Fehleingaben im XML Layer vermindern.

Ich tue mich aber etwas schwer mit der „Darstellung“ die sich aus der Syntax einer Annotation ergibt. Es lässt sich (auf den ersten Blick in den Quelltext) nur schwer erkennen, welche korrespondierenden Einträge in der Layer zu diesen Annotations gehören. Sicherlich kann man in der generates-layer.xml nachsehen, aber das ist ja auch nicht Sinn der Sache. Hier würde eine Art „Editor“ oder zumindest „Viewer“ für den Annotationblock hilfreich sein. Allerdings muss ich auch gestehen, dass mir im Moment keine passende Darstellung dafür einfällt.

Vielleicht hat jemand ja eine Idee, wie man die Übersicht bei den Annotation/Layereintägen zurück gewinnen kann.

Jens

2 Responses to Annotations statt Layereinträge

  1. Moin!

    Es ist die Crux, deklarative Registrierung inklusive loser Kopplung irgendwie beschreibbar zu machen. XML ist strukturell dafür gut geeignet. Die Layer.xml in NetBeans aber dermaßen generell sprechend (filesystem/folder/file/attr/position für alles), dass man damit keinerlei semantische Checks durchführen kann.

    Mit den Annotationen werden die „fehlenden“ Tags aus der Layer.xml wieder in sprechende Interface-Namen gebracht. Also man hat nun ActionID, ActionReferences, TopComponent.Registration usw.. Nur die Werte (wie Bundle-Übersetzungen, Pfade, Icons, IDs usw) kann man nicht statisch definieren, weil einem sonst die lose Kopplung zwischen den Modulen verloren geht.

    Man hätte auch den Weg gehen können, das Schema der layer.xml-Dateien zu erweitern. Aber da wäre man dem Refactoring keinen Schritt näher gekommen (außer durch proprietäre Lösungen in der IDE). Annotationen sind da wenigstens IDE-unabhängig und funktionieren auch in Ant- oder Maven-Builds.

    Ja, Annotationen sind unheimlich geschwätzig, besonders, wenn diese nur noch aus Key-Value Deklarationen bestehen – und auch noch so umfangreich, wie es das NetBeans Platform Framework vorgibt. Aber man hat zumindest Syntax-Highlighting, Bundle-Keys werden gegen existierende Bundle-Dateien und Werte geprüft (ansonsten gibt es einen Fehler-Badge-Icon im Quelltext), Refactoring funktioniert.

    Mir fällt im Moment auch keine bessere Lösung ein. Ich habe es aber auch gerne auf einem Blick, warum eine Klasse existiert (z.B. Actions) und wo sie verwendet werden. Nur mit den Layer.xml-Dateien war man immer auf der Suche…

    Beste Grüße,
    Josch.

  2. Pingback: Java Getriebe » Blog Archive » Bundletexte zurück in den Quelltext