Everything Eclipse has in store for developers this year

Eclipse Neon highlights: Nine nice news

Holger Voormann
Eclipse Neon

Eclipse Neon, the simultaneous release around the new Eclipse 4.6 platform, saw the light of day last week. 84 Eclipse projects have aligned their development cycles successfully — so there‘s much to tell! In this article Holger Voormann reveals his nine personal highlights from the Eclipse Neon release train.

Eclipse Neon: Nine nice news

Everything started with the expandable Java development environment over 14 years ago. There are currently approximately 280 Eclipse projects; not all, but many use or extend the Eclipse platform upon which the Eclipse IDE is built. Nevertheless, the platform has been heavily criticized in the past two to three years.

People spoke about the tragedy of the commons, a phenomenon which teaches that care of much-used common property is often neglected [1][2]. Eclipse Neon, the eleventh annual simultaneous release, puts an end to this tragedy. Developers may celebrate many new features and enhancements this summer; here are my highlights.

The Eclipse Neon release train

277 projects reside under the Eclipse Foundation umbrella. Each year, more new projects are added than terminated. 84 of the 277 Eclipse projects, barely a third, published new versions of their software and coordinated within the eleventh simultaneous release on June 22 (Fig. 1).

Fig 1: Increase of projects and the amount of code in simultaneous releases over the years.

Fig 1: Increase of projects and the amount of code in simultaneous releases over the years.

All 79 projects from last year’s release are back again, all but the WindowBuilder, a graphical editor for the Creation of Java interfaces with SWT and Swing, who fell asleep during development [3]. Six projects have been added. The combined newsfeed for all 84 Neon projects would however be far beyond my scope of practice.

Therefore, I will talk about nine of the most exciting news while focusing on general development tools. But that doesn‘t mean that nothing has happened in the corner of frameworks such as Xtext, the remote application platform (RAP) or the newcomer EMF Parsley, which can be used as component or base for entire applications. I‘ll also ignore the use-web-for-web development environment Orion, although there have been three new versions in a year and despite the fact that version 12 is part of Eclipse Neon. Similarly, the cloud IDE Eclipse Che, which, in contrast to Orion, is aimed more at Java than at JavaScript / WebDev and received a lot of attention as the company Codenvy made their Exo platform an Eclipse project last year, remains unmentioned.

But I can‘t resist mentioning an anecdote, which shows how people prioritize Eclipse and not the company. Sven Efftinge, project manager of Xtext, left itemis, took the majority of developers and founded his own company [4]. The developers took their Rights at Eclipse to their new company TypeFox and itemis was left hanging [5].But enough with the opening speech,let’s dive into my top nine list.

Eclipse Neon highlight #9: Code of Conduct

The competition between open source und commercial software shouldn‘t be fought ideologically, but technically. The comment „We told you so“ coming from the Executive Director of Eclipse, Mike Milinkovich aimed at JetBrains‘ notice to change their payment model to a subscription model was perceived by some as spiteful and inappropriate [6]. But when it comes to collaboration, open source and preferably independence from a single company are important criteria for me.

Another important consideration which pleads for Eclipse is the following: The aim of the „Code of Conduct“, which was announced last year, is meant to prevent discrimination of any kind [7]. The idea of belonging to such a community is helping me not to lose faith in humanity and co-existence, while refugee camps in my neighborhood are, for xenophobic reasons, repeatedly set on fire and Europe‘s partitioning policy is the reason why so many refugees drown in the Mediterranean Sea. One can see the fact that the Code of Conduct is not just a slogan [8].

#8: JavaScript- and Android download packages

As a popular IDE, Eclipse is used not only for Java, but also for other languages. The C/C++ package was downloaded 1.4 million times last year, the  PHP-package 0.8 million times. Both projects behind these download-packages jumped to the next full version with Eclipse Neon: C/C++-Development Tooling (CDT) reached v9.0; the PHP Development Tools (PDT) jumped to v4.0. These versions bring about a lot of improvements and new features [9], [10]. The target audience of Eclipse is further enlarged by two new download packages in Eclipse Neon: one for Android, one for JavaScript/Web. The Eclipse project will resume work on the abandoned Android Developer Tools, together with the newly-added project Andmore [11], [12]. To be able to compete with the IntelliJ IDEA-based Android Studio, they might need a few more developers. By adding the Android-Download-Package, project Andmore might just get a bit better known and gain some additional hands.

The JavaScript Development Tools (JSDT) already made that step [13]. Over the course of two years, little to no progress was made – that stopped in late 2015, when, among others, Read Hat revived the project. Since then, the number of monthly commits continued to increase until it became as high as three to four digits. Starting with Eclipse Neon, JSDT now supports JavaScript Version 6, or, to use its real name: ECMAScript 6. Compared to ECMAScript 5, the language that is actively spreading beyond pure web-browser-use, was significantly extended [14].

SEE ALSO: Eclipse Neon: “We have been getting better at integrating automated error reporting into Eclipse”

To pull all necessary JavaScript libraries to a project using the Node Package Manager (npm), just click right on the file package.json, where the dependencies are defined. Choose Run As | npm Install in the opening menu. The package manager bower.json and Grunt (Gruntfile.js), a build tool, are supported in the same way.

Keep in mind: Calls to Node.js/npw, Bower, Grunt and Gulp will just be forwarded to the command line; therefore the corresponding software has to be installed locally. If npm has to use Git to download an additional library, Git needs to be installed separately too, even though Eclipse comes with a Git-integration and an implementation of JGit for versioning. A new JSON-editor and a JavaScript-Debugging-tool complete the JavaScript-/Web-Package (Fig. 2)

Img. 2: JavaScript-Debugging

Fig. 2: JavaScript-Debugging

The JavaEE package, which has had the highest number of downloads last year, will also profit from the before-mentioned and further improvements to the JavaScript-/Web-Package. Ant has always been supported for builds, Maven has been added a long time ago. Starting with Mars.1, users are now able to add support for Gradle, popular among Android Developers. For virtualization, the Linux Tool Project improved Docker tooling for Eclipse Neon and added Vagrant Tooling [15]. Working with Gerrit, the Git review system was improved by Projcet EGerrit. In combination with the two new download-packages, Eclipse Neon now offers both out-of-the-box and additional tool-support for a lot of use-cases in software development.

Attention: The primary Installation source changed to Eclipse Installer [16], but if you wish to install just one package, you can still find it in the Download Packages Link.

#7: Smaller changes to the platform

To illustrate the evolution of Eclipse-IDE, I will choose four minor changes to the platform. Spoiler alert: These are not the only improvements to the platform on my list. Let’s look at derived. A quick reminder: Derived is a file- and folder-attribute specific to Eclipse, used to exclude areas from versioning and search, like the bin-folder containing compiled *.class-files in Java. When searching for files, a new option was added. In addition to the derived resources option, there is now a checkbox called binary files available. When choosing this, binary files will be searched. This is very useful for instance when looking for comments on GIF-, PNG- or JPEG-picture files or when looking for byte sequences using regular expressions: e.g. \xCA\xFE\xBA\xBE will find the first four bytes of a *.class-file [17].

The second improvement (which I think is pretty useful) is the new preference option Terminate and Relaunch while launching from history (in Window | Preferences | Run/Debug | Launching); it can shut down instances of an application that is still running when starting the same application anew. Without using this option, you can force this behavior if necessary by holding down the shift key on launching an application. This works in the sub-menu Run | Run History and in the toolbar of the menus Debug, Run and External Tools; it won’t work after clicking on one of the buttons itself. Still, this function might be extended someday; pressing control to open the start configuration works everywhere too.

When you use Working Sets, you might like the third small improvement: New Working Sets now can be added directly from the dialogue to create new projects, using the option New… in the Working Sets Menu. Also new is the function Autosave, that will perform Save All after a predefined period of time. However, Autosave is disabled by default (Window | Preferences | General | Editors | Autosave), because saving starts an incremental build by default (Project | Build Automatically). As a result, input can be blocked temporarily.

One further novelty in the development of Autosave is that the function, among others, has been funded by financial donations through the Friend of Eclipse Enhancement Program (FEEP) [18]. Even though it can be criticized that the donors don’t have any influence on what their donations are used for, I like the program as long as it’s purely used to develop stuff no one else works on [19]. Furthermore, there are some performance improvements: The Eclipse-IDE got a bit faster on start-up.

#6: Java (9)

Java 9 is not officially supported by Eclipse 4.6 yet, but you can already download a beta version and add it manually (Fig. 3) [20].

Fig. 3: Java-9-Module-Editor

Fig. 3: Java-9-Module-Editor

Java 9, which is supposed to be finished in March 2017, is a moving target for Eclipse [21], [22]. But the date isn’t fixed yet: Java 9 might be finished even later. I’d actually prefer if Java had fixed release dates like Eclipse, even if that meant some features could not be finished on time. While the implementations of Java 9 in the competing IDEs NetBeans and IntelliJ IDEA consist of changes to the Java-tooling, Eclipse also changed their own Java compiler. By the way, this compiler is also included in IntelliJ IDEA and can be used optionally there [23].

The incremental Java compiler has been one of the biggest advantages of Eclipse right from the beginning. It will be interesting to see how competitors use this feature for incremental compiling of Java 9 SDK and how tooling for Java-Modules from Java 9 on differ from competitor to competitor [24]. Eclipse Neon requires at least Java 8 and can be executed using the early version of Java 9 when following the directions [25].

As far as the tooling for Java 8 and older versions is concerned, Eclipse Neon includes only minor improvements. Issues found when compiling can now be shown as information; therefore the option Errors/Warnings in settings (Window | Preferences) under Java | Compiler should now be named Errors/Warnings/Infos. Infos are marked in blue in the editor; in the file-icons, a little blue “i” announces infos. Analysis to avoid NullPointerExceptions using annotations was enhanced as far as Java-Generic-Types are concerned. Now you can configure different null-annotations at the same time, e.g. both org.eclipse.jdt.annotation.Nullable and javax.annotation.Nullable for @Nullable. Sadly, there are no predefined null-annotations.

Speaking of annotations: You can choose @Retention, @Target and @Documented and set their values using checkboxes and optional fields in the dialogue to create an annotation. Preferences for Code-Formatting have been refined. Using Ctrl+Shift+V, you can now by default access the command Open from Clipboard to open a class in the editor or Stacktraces in the Java Stack Trace Console, if the class name or the multi-line Stacktrace is saved to clipboard. It is now possible to choose different Java-Elements at the same time and to search for them using the corresponding tool from the context menu or the keyboard shortcut: References (Ctrl+Shift+G), Declarations (Ctrl+G) or with Interfaces Implementor and Read Access and Write Access in Fields (Fig. 4)

Fig. 4: Where is the running method used?

Fig. 4: Where is the running method used?

#5: Git support in Eclipse Neon

Seven years ago, an own implementation was chosen for versioning and for the Java-compiler. Lots of effort was put into it, but it was worth it: Eclipse JGit, the only Java-implementation of Git, is widely used, even by NetBeans. IntelliJ IDEA on the other hand still requires a separate installation of the command line version of Git. In Neon, JGit can now handle settings made in the file .gitattributes to define how different styles of line breaks should be handled in Windows, Linux and Mac OS.

By using EGit, the implementation of JGit in Eclipse, you can find some changes in the Git Staging View, which is now used by default, instead of the blocking commit-dialogue: Unstaged Changes can be grouped this way: untracked, missing and modified; the Commit Message area will be shown below or, as before, next to Unstaged Changes and Staged Changes, depending on the available space [26]. The extension Git Large File Storage (LFS) is still under construction, but will hopefully be available out-of-the-box soon [27]. This tool will avoid local storage of older versions of large files to save storage space and bandwidth.

#4 Synchronize settings on different devices

Eclipse started offering cloud services so that users can synchronize their settings on multiple devices [28]. The function is oriented at Microsoft Visual Studio. To use it, you need to set your preferences (Window | Preferences) to Record in Oomph | Setup Tasks | Preference Recorder and to Synchronize with Eclipse.org in Oomph | Setup Tasks | Preference Synchronizer [29]. When changing any preferences after setting these values, you will be asked for your Eclipse Login. If you don’t have one already, just follow the provided link to create an account. Before synchronizing any changes, an additional dialogue will be shown, giving details on the settings to be stored in the cloud (Fig. 5).

Fig. 5: Do you want to save your settings to the cloud?

Fig. 5: Do you want to save your settings to the cloud?

You can specify settings that will not be uploaded – once or permanently. One thing you should be aware of: Eclipse plans on keeping your data private, but can’t guarantee it. Therefore, users need to agree on putting their settings under public domain [30], [31]. When this concerns only settings, it should not be much of a problem. But you might want to think twice before uploading templates or settings for plug-ins from other sources.

The Eclipse User Storage Service (EUSS) is open to other applications. It is also used by the Marketplace Client (Help | Eclipse Marketplace…) to store favorites. Your favorites will be shown in the new Favourites-Tab inside the IDE. This makes installing favorite plug-ins to other devices easy. I’m curious to see further uses of EUSS.

#3 Automatic line breaks

The story of integrating a Word-Wrap-Mode, automated line breaks instead of horizontal scroll bars, is a very emotional one for me. Proposed first in March 2003, it took 10 years until the first usable solution was presented by Florian Weßling, still a student back then [32]. To finish up, it took three more years. It was a pretty frustrating experience to see the suggestion I worked on not being taken into consideration due to formal reasons at first. Now, with Neon, I got my happy ending: I’m proud something I worked on has made it to the release.

The state of the entry on the bug tracker with the highest number of votes on it has finally been set to RESOLVED FIXED [33]. Finally, automatic line breaks are available not only in the console view, but in all editors based on the text editor: in Java, C/C++, PHP, HTML, XML, JSON and many other editors, even those that are not developed by Eclipse (Fig. 6).

Fig. 6: Automatic Line Breaks now supported

Fig. 6: Automatic Line Breaks now supported

The Word-Wrap-Mode even got its own keyboard shortcut: Alt+shift+Y and an own symbol in the toolbar, to the left of the block-selection-mode. The icon is only shown by default, if a pure text editor is used. This can be changed in the Customize Perspective Dialogue (Window | Perspective | Customize Perspective…). Go to the Tab Action Set Availability and check the box next to Editor Presentation. Anyone too lazy to remember the keyboard shortcut and change the preferences; you can also find the option in Quick Access (Ctrl+3) under Toggle Word Wrap.

#2: (High Resultion) Display

Since my next computer will probably come with a high-definition monitor, Eclipse should look good on it. There are already a lot of them in Neon, although not all icons are available in resolutions twice as high as before. (Fig. 7)

Fig. 7: Not all icons are available in double resolution, for example the flashlight icon.

Fig. 7: Not all icons are available in double resolution, for example the flashlight icon.

One year ago the team started to redo the Bitmap-GIF-Icons as Vector-Graphic-SVG-Icons. But I expect that some time will pass until all icons are available in higher resolution. Speaking of display: in Mac OS, Neon will display the toolbar in the style already known from different applications; in Linux, most of the problems with GTK3 have been solved by now. Ubuntu 16.04, which was released after Mars.2, turned out to be problematic [34]. Furthermore, the fullscreen-mode (Window | Appearance | Toggle Full Screen) is now available for Windows and Linux too, and the font size in text editors can be adjusted by using the shortcuts STRG+ and STRG++.

#1: Smart tooling

If you open a file for which there is no editor available, a search for a Plug-In with the matching editor is opened in the Eclipse Marketplace, based on the file extension. If something is found, you will be advised to install it. (Fig. 8)

Fig. 8: For *.gradle-files there would be an editor.

Fig. 8: For *.php-files there would be an editor.

This behaviour, which is inspired by IntelliJ IDEA, can be turned off via settings (Window | Preferences) under General | Editors | File Associations. You have to choose something different than Search Marketplace for Open unassociated file with. But who would want to miss such a convenient way to adjust their development tools to their current needs? In order to discover the treasures of the rich Marketplace, I would rather see the feature made available for different occasions, for example for the New-Dialog, as well as the Import– and Export-Dialog.

Another new thing in Neon is Smart Import [35]. Instead of installing Plug-ins afterwards, the existing tooling is going to be used in a more efficient way. In order to do this, Smart Import analyses the content of a directory, proposes sub-directories to import them as projects und configures the directory after the import is done. For example, based on the content of an existing pom.xml-file, Smart Import recognizes that it deals with a Java-Project und finds out which source directories have to be added to the Build Path (Fig. 9).

Fig. 9: Smart Import

Fig. 9: Smart Import

Smart Import can be found in the menu under File | Import… | General | Projects from Folder or Archive as well as under File | Open Projects from File System. The old, similarly named import function Existing Projects into Workspace requires an Eclipse-.project-file, whereas Smart Import can open or import projects created not only with Eclipse.

In addition, Smart Import can be applied to configure existing projects: just select the project folder, right click and choose Configure | Configure and Detect Nested Projects. Plug-ins can contribute detectors / configurators and can thereby make the importing process smarter. Still, the interface is marked unstable und uses java.io.File instead of org.eclipse.core.resources.IFile. This leads to zip archives being unpacked right at the beginning of the analysis, which then can’t be deleted if the import is aborted. Nevertheless, Smart Import already impresses with its usefulness, although to be fair it would have better if it had been marked as experimental.

Still room for more

Neon’s successor will be Oxygen or – if annual figures win over the previous naming scheme – Eclipse 2017 [36]. The Error Reporting introduced by Mars helped identify and dispose of countless errors [37] and should be available for non-Eclipse projects and Eclipse-based applications in the near future. If you want to improve Eclipse, you should allow error reporting. I like Mikaël Barbero’s idea of complementing the UI Responsiveness Monitor with the Job Canceling Monitor for jobs that cannot be canceled [38]. In order to better understand user behavior, it should be tracked using a so-called Unique User ID (UUID). But due to privacy concerns, this never materialized [39].

Also, fine-tuning the support for high definition displays will still take some time. The official support for Java 9 can be expected to arrive with Oxygen und maybe then working in the Java-IDE will feel a lot faster thanks to the new Java-Indexer [40]. If everything goes as planned, EclEmma will enrich the Java-IDE with the ability to detect the test coverage [41]. The plans for JavaScript are quite ambitious, too: exchanging the parser hopefully results in better performance and a higher fault-tolerance [42]. A lot is happing in Eclipse. I’m especially happy with the resurrection of the platform and the IDE as well as the reanimation of Web/JavaScript. Even considering the Internet of Things, which I didn’t mention in this article at all, things are looking good for Eclipse. If you want to stay on top of things, I recommend checking out Dominik Mohilo’s column Eclipse Weekly on JAXenter.de. [43]

IDE #1

Although from a user’s perspective it was carried out too early, the important change of platforms from 3.x to 4.x is now behind us. It was very exhausting and slowed down the development of new features. There was a change of generations even within the developers’ team. Eclipse’s forefather, Erich Gamma, who introduced the 1.0-version of Eclipse in November 2001, now works for Microsoft, where he recently presented the half editor, half IDE Visual Studio Code 1.0. Visual Studio Code is open source; Microsoft has been a member of Eclipse since March this year – further proof that things are changing. [44]

There is also this idea of implementing the support for Visual Studio Codes Language-Server-Protocol [45]. The goal of the protocol is to transfer many language-specific features like Code-Highlighting or the proposals for the autocomplete-function to a server. An editor supporting this protocol could immediately handle all languages if it had a Language Server available. The other way round is also possible: by providing a Language Server for a certain language, we may have language support in every editor/IDE supporting the protocol.

If you remember Xtext for IntelliJ IDEA and JetBrains Eclipse-Plug-ins for Kotlin, there is not only cooperation between Eclipse and Jetbrains, but also competition. The user wins in both cases, since he can choose between different IDEs. I took a look at Visual Studio Code (quite spartan and keeps crashing reproducible), NetBeans (interesting for beginners, but with a limited set of extensions) and IntelliJ IDEA (unfortunately it’s not open source; I liked a few things better than Eclipse, but more often than not it was the other way round [46]). Although the Eclipse Neon website with its 80s charm would suggest otherwise, I think Eclipse is the most modern IDE and it remains my number one. [47]

Holger Voormann
Holger Voormann is a freelance software developer, consultant, avid Eclipse user, Eclipse committer and contributor. His interest is in the design of user interfaces, quality assurance and agile processes. He blogs at eclipsehowl.wordpress.com. You can e-mail him at: eclipse@voormann.de.

comments powered by Disqus