Suche
Der Eclipse Mars Release Train

Eclipse Mars für Java-Entwickler: Was ist neu in Eclipse 4.5?

Holger Voormann

(c) Shutterstock / jupeart

Eclipse Mars ist das zehnte jährliche Simultaneous Release von Eclipse. 79 Eclipse-Projekte, drei mehr als im Vorjahr, haben daran mitgewirkt. In diesem Jahr will Eclipse 4.5 vor allem schneller und zuverlässiger sein. Was Mars sonst noch bringt möchte ich im Folgenden erzählen.

Eclipse Mars für Java-Entwickler

Das Team der Eclipse Java Development Tools (JDT) steht im Spannungsfeld zwischen dem einjährigen Zyklus des Eclipse Simultaneous Release und dem recht unregelmäßigen von Java. Java 8 wurde im März 2014 veröffentlicht, und Java 9 ist für Ende September 2016 angekündigt. Die Entwicklung für Java 9 wurde zwar bereits gestartet, aber in Mars gibt es nur Verbesserungen zu Java 8 und den Versionen davor. Bei Lambda-Ausdrücken, die mit Java 8 kamen, zieht Eclipse mit NetBeans und IntelliJ IDEA gleich und bietet nun einige neue Quick Assist (Ctrl+1) Funktionen.

Neue Quick Assist (Ctrl+1) Funktionen bei Lambda-Funktionen

Abb. 1: Neue Quick Assist (Ctrl+1) Funktionen bei Lambda-Funktionen

Die meisten Neuerungen gibt es bei der Null-Analyse. Dank verbesserter Flussanalyse gibt es bei Schleifen und Verzweigungen weniger Warnungen/Fehler, wo keine sein sollten. Im Detail übertrifft Eclipse damit NetBeans und sogar IntelliJ IDEA. Die Voreinstellungen für Null pointer access und Potential null pointer access (in Window | Preferences unter Java | Compiler | Errors/Warnings) blieben aber zurückhaltend bei Warning und Ignore, statt sie auf Error und Warning zu setzen.

Die neue Flussanalyse kommt auch dem Aufspüren und Anzeigen von sogenannten Resource Leaks zugute. Eine viel umfangreichere Null-Analyse ist mittels der @Nullable/@NonNull-Annotationen möglich. Das Problem dabei: bei der Java-Laufzeitumgebung und fast allen JARs fehlen diese Annotationen. Ein Java-Entwickler weiß zwar, dass new HashMap<String, String>().get(„key“).length(); eine NullPointerException verursacht, weil bei einer leeren HashMap get unweigerlich null zurückliefert. Der Compiler dagegen kann das nur vermuten, wenn der Rückgabewert von get mit @Nullable annotiert wurde.

Um dieses Problem zu lösen, wurden External Annotations eingeführt. Damit können separate Dateien referenziert werden, die diese Null-Annotationen enthalten. Leider gibt es aber noch keine externen Annotationen für die Laufzeitumgebung und für gängige JARs. Und leider unterscheidet sich auch das Dateiformat vom Konkurrenten IntelliJ IDEA, der bereits externe Annotationen für die Laufzeitumgebung mitliefert. Bis die Eclipse Community externe Annotationen bereitstellt, bleibt einem nichts anderes übrig, als sie selbst zu erstellen. Dazu muss die standardmäßig ausgeschaltete Annotations-basierte Null-Analyse eingeschaltet sein, und externe Annotationen dürfen nicht auf eine ZIP-Datei, sondern müssen auf ein Verzeichnis verweisen. Wenn diese beiden Vorbedingungen erfüllt sind, lassen sich im Java-Class-Editor mittels Quick Assist (Ctrl+1) die entsprechenden externen Null-Annotationen hinzufügen und wieder entfernen.

voormann_mars_1

Abb. 2: Mit jedem Jahr nahm die Anzahl der Projekte und die Gesamtcodemenge der Simultaneous Releases zu

Beim Debuggen können wie bei NetBeans und bei IntelliJ IDEA nun auch bei mit final gekennzeichneten Klassenvariablen Breakpoints, die hier Watchpoints heißen, gesetzt werden. Außerdem hat nun der Befehl Skip All Breakpoints standardmäßig ein Tastaturkürzel (Strg+Alt+B) bekommen. In der JUnit View gibt es ein neues Show Skipped Tests Only Icon, und parametrisierte Tests können nun auch nur für bestimmte Parameter erneut ausgeführt werden (Rechtsklick auf Parametergruppe und Run auswählen). Außerdem gibt es nun einen Extension Point für Java-Formatierer, damit Dritthersteller Alternativen zum neu geschriebenen Eclipse-eigenen Formatierer anbieten können.

Im Java-Editor stellt die Code-Vervollständigung (Strg+Leertaste) drei neue Templates zur Verfügung: lock, try_finally und finally. Mehr Templates bietet der Code Recommenders Snipmatch (Strg+Alt+Leertaste), der in den Java-Programmpaketen dabei ist und nicht mehr wie bei Luna nachinstalliert werden muss. Snipmatch holt seine Snippets von einem Repository, das derzeit 129 Snippets enthält und zu dem man auch eigene Vorschläge einreichen kann.

Eclipse Mars Platform News

Wer viele Projekte in einem Workspace hat und diese mit Working Sets organisiert, für den dürften die neuen, von Oomph beigesteuerten Dynamic Working Sets interessant sein. Statt durch die manuelle Auswahl einzelner Projekte werden Bedingungen definiert, wann ein Projekt zu einem Working Set gehört. Eine Bedingung kann beispielsweise ein regulärer Ausdruck, der sich auf den Namen des Projekts bezieht, oder ein bestimmter Projekttyp sein. Die Definition der Dynamic Working Sets findet man in Window | Preferences unter Oomph | Dynamic Working Sets.

Eine Verbesserung hat auch der Open With… Dialog erfahren, der bei Open With | Other… im Rechtsklickmenü einer Datei oder im Open Resource Dialog angeboten wird. Wie man es von den meisten Betriebssystemen her kennt, kann man hier nun den ausgewählten Editor zusätzlich auch für alle Dateien gleichen Namens beziehungsweise mit gleicher Endung vorauswählen. Nach drei Jahren funktioniert endlich wieder der Customize-Perspective-Dialog (Window | Perspective | Customize Perspective) richtig, der in der neuen Oberfläche von Eclipse 4.x bisher noch nicht fertig umgesetzt war. Immer mehr Icons wurden als SVG redesigned. Davon profitiert das verbesserte Dark Theme (Abb. 3). Bis auch die Darstellung auf hochauflösende Monitore von den SVG-Icons profitieren wird, wird es aber noch etwas dauern.

Abb. 3: Detailverbesserungen beim Dark Theme, insbesondere bei Verzeichnisbäumen und den Icons hier unter Windows

Abb. 3: Detailverbesserungen beim Dark Theme, insbesondere bei Verzeichnisbäumen und den Icons hier unter Windows

Eclipse Mars Error Reporting

Bereits Ende letzten Jahres hielten bei der Jagd nach Stabilitäts- und Performanceproblemen zwei Neuerungen Einzug in den Entwicklerzweig. Das ist zum einen das automatische Error Reporting, das im Fehlerfall und mit Zustimmung des Benutzers Problemberichte zurücksendet. Wer die Entwicklung unterstützen will und keine Datenschutzbedenken hat, kann auf die Zustimmung auch verzichten (in Window | Preferences unter General | Error Reporting bei Action „Always send silently“ auswählen). Beim Senden wird nicht gleich ein Eintrag im Eclipse Bugtracker erstellt, sondern ein spezieller Server sammelt und gruppiert die im Wesentlichen aus Stack Traces bestehenden Berichte und stellt diese Informationen ausschließlich den Entwicklern bereit. Der Server ist eine Entwicklung der Firma Codetrails, einem Spin-Off des Eclipse-Code-Recommenders-Projekts unter der Leitung von Marcel Bruch.

Die andere Neuerung, die zur Qualitätssteigerung beitragen soll, ist der UI Responsiveness Monitor, der Teil der Plattform ist. Aktiviert man diesen (in Window | Preferences unter General | Error Reporting Häkchen bei „Detect periods of unresponsive UI“ setzen), dann werden Zeiten, in denen die Oberfläche nicht reagiert, als Fehler geloggt. Via Error Reporting können diese Fehler dann den Eclipse-Entwicklern gemeldet werden. Dass sich Great Fixes for Mars, die neuen Committer, das Error Reporting und der UI Responsiveness Monitor bereits positiv auf Performance und Stabilität auswirkten, konnte ich nicht feststellen. Ich finde, dass bereits die Vorjahresversion zuverlässig und flott war. Bei wem das nicht so ist, der sollte sich einmal die Optimierungs-Tipps von Andrey Loskutov, den Optimizer for Eclipse von ZeroTurnaround oder Saneclipse von Lars Vogel anschauen.

Eclipse Mars Highlight: RCP Testing Tool

Zum ersten Mal in einem Eclipse Release Train dabei ist das RCP Testing Tool (RCPTT) zum Testen von Eclipse-basierten Anwendungen. RCPTT war ursprünglich das kommerzielle Produkt Q7 der Firma Xored Software, Inc., die 2005 mit dem Dynamic Languages Toolkit schon einmal Eclipse ein Projekt schenkte. Zwar gibt es nicht wie bei Jubula ein Mars-Programmpaket, aber eine Stand-alone IDE auf der Projektseite zum Herunterladen. Das Benutzerhandbuch ist nur Online verfügbar, die Bedienung kinderleicht. Zuerst wird das Verzeichnis der zu testenden Anwendung ausgewählt, dann ein RCP Testing Tool Project und ein Test Case angelegt. Ein Klick auf Record startet die Aufnahme und erzeugt ein Skript in einer auch für Nicht-Programmierer verständlichen Sprache. Im Editor kann das Skript dann noch nachbearbeitet und um Überprüfungen ergänzt werden (Abb. 4). Ein Klick auf Replay führt den Test aus. Für mich ist RCPTT definitiv eines der Highlights von Mars.

voormann_mars_6

Abb. 4: Das Stand-alone RCP Testing Tool mit der zu testenden Anwendung im Hintergrund

Mein persönliches Fazit

Als klar wurde, dass Word-Wrapping mal wieder nicht dabei sein wird, war ich ziemlich frustriert. Der Word-Wrapping-Bugtracker-Eintrag ist über 12 Jahre alt, hat 228 Kommentare, und 239 haben für ihn votiert – so viele wie für keinen anderen. Dabei gibt es seit über zwei Jahren einen Lösungsvorschlag, an dem ich auch ein bisschen mitgearbeitet habe. Aber der Code-Review wurde mehrmals wegen kleineren formalen Fehlern zurückgewiesen, bis es schließlich zu spät war. Dem Plattform-Team fehlt offensichtlich die Zeit, alle Code-Änderungsvorschläge zu begutachten. Vielleicht hat sich die Situation durch das erfolgreiche Rekrutieren neuer Plattform-Committer entspannt.

Aber ich kann trotzdem nicht verstehen, warum es keinen Fundraiser gibt, der Geld für Vollzeitentwickler einsammelt, die sich voranging um Änderungsvorschläge kümmern. So viele Firmen setzen die Eclipse-IDE ein, ohne Eclipse-Mitglied zu sein. Wenn man sie nur hartnäckig genug fragen würde, wäre sicherlich der ein oder andere bereit, etwas zu spenden, ohne sich durch eine Mitgliedschaft binden zu müssen. Sinnvoll finde ich den neuen Eclipse Installer beim Einrichten der Entwicklungsumgebungen zur Mitarbeit in Eclipse-Projekten (Advanced Mode). Als Installer (Simple Mode) hingegen überzeugt er mich in seiner jetzigen Form noch nicht. Wozu sollte ich unterschiedliche Programmpakete installieren? Ich möchte eine IDE und keine separierten Entwicklungsumgebungen. Und das Synchronisieren von Workspace-spezifischen Einstellungen ist für mich nur ein Workaround für fehlende globale Einstellungen.

Aber ich war auch von vielem positiv überrascht. Vor allem davon, dass die Plattform und die Qualität wieder mehr in den Mittelpunkt gerückt sind. Richtig Laune hat die Arbeit mit dem RCP Testing Tool gemacht. Ein echter Geheimtipp für Eclipse-Entwickler. Gespannt darf man auf die Daten vom automatischen Error Reporting sein und was daraus dann gemacht wird. Es gibt sogar einen Notfallplan, der verhindern soll, dass eine durch das Mars-Release ausgelöste Datenflut die Eclipse-Server in die Knie zwingt. Ich freue mich auf den Smart Import und die Weiterentwicklung der Launch Bar im nächsten Release.

Vielleicht wird es in Neon auch schon den neuen new-Project-Dialog geben. Dies alles würde das Leben insbesondere von Einsteigern leichter machen. NetBeans und IntelliJ IDEA haben hier mit mehr Features out-of-the-box durchaus ihre Vorteile. Die Geschichte von Eclipse hat gezeigt, wie schnell eine bessere IDE guten IDEs den Rang ablaufen kann. Die positiven Entwicklungen lassen mich optimistisch in die Zukunft von Eclipse für vielleicht weitere zehn Jahre Eclipse Simultaneous Release blicken.

Aufmacherbild: Planet Mars with moon von Shutterstock / Urheberrecht: jupeart

Geschrieben von
Holger Voormann
Holger Voormann
Holger Voormann: irgendwas mit Eclipse; früher festangestellt, seit 2010 freiberuflich; Eclipse Vex (a Visual Editor for XML) Committer, aber länger inaktiv; dafür kleinere Code-Beiträge für die Eclipse-Plattform, aber nicht als Committer; bloggt unregelmäßig (eclipsehowl.wordpress.com); antwortet nicht immer auf E-Mails (eclipse@voormann.de) und auf Tweets (@howlger)
Kommentare
  1. Mars Attacks! | eclipse howl2015-06-24 14:43:36

    […] For more information read my article on Mars (in German) in the upcoming Eclipse Magazin or in a condensed form online. […]

  2. Dani Megert2015-06-25 16:03:04

    Auf dem Eclipse Marketplace gibt es einen early access Preview für Java 9:
    http://marketplace.eclipse.org/content/eclipse-java%E2%84%A2-9-support-beta-mars

Schreibe einen Kommentar

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