Eclipse Project Neon (4.6) M7 - New and Noteworthy

Here are some of the more noteworthy things available in the Neon milestone build M7 which is now available for download.
We also recommend to read the Tips and Tricks, either via Help > Tips and Tricks... or online for Platform, JDT, and PDE.

Platform
Improved interactive performance and reduced memory consumption This and earlier milestones contain a multitude of fixes to enhance interactive and startup performance of the Eclipse IDE, and to reduce overall memory consumption.
Import projects A new Import Projects wizard is available via the File > Open Projects... menu and via the general Import... command under General > Projects from Folder or Archive.

Compared to other ways to import or create projects, this wizard aims at being a universal wizard that, from a source directory or archive, can detect and configure various kinds of projects.

This wizard relies on an extensible set of strategies that look at the content of the import source to detect file types, project layout patterns, or even look into some files in order to deduct which folders should be turned into projects and how those should be configured. Configuration usually involves setting up project natures and preferences.

The import strategies are contributed via the new extension point org.eclipse.ui.ide.projectConfigurator, so that other IDE components can contribute detection and configuration specific to the technology they're supporting.

Themed scroll bar enabled for editors in dark theme It's now possible to replace the native scroll bar of a StyledText by a styled overlay. This is enabled by default in the dark theme on Windows.

This feature can be disabled in the Windows dark theme by setting the swt.enable.themedScrollBar VM argument to false (or enabled on the dark theme for other platforms by setting it to true) in eclipse.ini or on the command line after -vmargs:

-Dswt.enable.themedScrollBar=false

Note that it may be added through css to any theme (see properties available for customization and a css example) -- the user may always override the theme setting by using the swt.enable.themedScrollBar VM argument.

Caveats: We're aware that the themed scroll bar is not currently available for all elements (such as trees and tables), and some places where the scroll bar was invisible (such as compare editors) may now show a scroll bar. These will only be fixed for Eclipse 4.7.

Advanced capabilities preferences are now displayed in place (no extra dialog) Previously, the entries in the Capabilities preference page were displayed in a list. If you wanted to edit them, you had to open an extra dialog. Now you can directly enable or disable the capabilities from the preference page, as depicted in the following screenshot.

Since this dialog has API to prevent advanced editing, if the property ALLOW_ADVANCED is set to false, the original list is maintained and will be shown, which allows you to enable/disable only the main categories (not individual capabilities).

Quick Access improvements Quick Access (Ctrl+3) is a small text field in the toolbar. You can use it to trigger any command in the Eclipse IDE.

You can now restrict the search to Views, Commands, etc. by typing the category name followed by a colon. For example, to filter the list of all the views, start typing "Views: " in the search-box.

A few usability bugs have been fixed: The tooltip shows the keyboard shortcut, the number of search results per category is independent of the size of the proposals window, and the list with previous choices already opens when you click the field with the mouse.

Workspace name shown in window title by default The workspace name is now shown at the beginning of the window title by default. The initial name is the name of the workspace directory.

This the name can be changed or cleared in Preferences > General > Workspace.

Full Screen The Full Screen feature is now also available on Windows and Linux. You can toggle the mode via shortcut (Alt+F11) or menu (Window > Appearance > Toggle Full Screen).

When Full Screen is activated, you'll see a dialog which tells you how to turn it off again.

Automatic Save of dirty editors Auto-save of dirty editors is now available in Eclipse. The autosave option is disabled by default. A new autosave preference page (Preferences > General > Editors > Autosave) is available and allows to enable/disable the autosave and change the interval of autosave. The countdown is reset on keyboard activity, mouse click, or when a popup is displayed (e.g. content assist, preference page, ...).

Terminate and Relaunch from history A Terminate and Relaunch option is now available while launching from history. The default setting is to launch without terminating previous launches. To enable automatic termination, select the option "Terminate and Relaunch while launching from history" on Preferences > Run/Debug > Launching.

The behavior not selected on the preference page can also be activated on-demand by holding the Shift key while launching the configuration from history.

Hint: You can still open the dialog to edit a launch configuration by holding the Ctrl key while selecting the configuration from history.

Solaris builds are now 64-bit only The 32-bit builds of Solaris (both x86 and SPARC) have been discontinued as there is no 32-bit Java 8 JRE available on Solaris.

These builds are instead being replaced by the corresponding 64-bit builds. The 64-bit build for Solaris x86 is already available in M7 and the 64-bit SPARC build will be available soon.

JDT
Grouping of referenced libraries in Project Explorer The Project Explorer view now groups referenced libraries in a new container node.

View menu > Show 'Referenced Libraries' node

Hiding empty library containers in Project Explorer You can now hide empty library containers in the Project Explorer view by selecting the new filter in its Customize View... dialog.

Adding meta-annotations while creating a new Java annotation type You can now choose to add @Retention, @Target and @Documented meta-annotations along with their applicable values while creating a new Java annotation type.

Create new fields from method parameters You can now assign all parameters of a method or constructor to new fields at once using the new Quick Assist (Ctrl+1):

Assign all parameters to new fields

Search on multi-selections You can now select multiple elements in views like Package Explorer and Outline and then search for References, Declarations, Implementors, and Read/Write Access (where applicable):

You can even select results in the Search view and start a new search for those elements. To follow method call chains, you'd probably use Open Call Hierarchy, though.
Enabled assertions for new JUnit launch configurations Assertions are now enabled by default for new JUnit launch configurations. You can disable this on Preferences > Java > JUnit page:

Quick Fix to add @NonNull to local variable When a "potential null pointer access" problem is raised against a local variable, the reason is not always obvious. Perhaps null is assigned somewhere deep inside a complex control flow. If annotation-based null analysis is enabled, a new Quick Fix is offered (Ctrl+1), that adds a @NonNull annotation to the local variable.

While this may not produce correct code, it tells the compiler your intention to not allow null in this variable, and subsequently the compiler will answer with more helpful warnings or errors pointing to the root problem. In the given example, it will alert you of subtleties about using unconstrained type variables (see also Improved null analysis with generics (M6)):

New options in code formatter A few new options have been added in the formatter profile editor.

(1) In the new Parentheses tab, you can order the formatter to keep parentheses of various Java elements on separate lines, i.e. put a line break after the opening parenthesis and before the closing parenthesis. This can be done always, only when parentheses are not empty, or when their content is wrapped. There's also an option to preserve existing positions, if you want to manually manage parentheses positions on a case-by-case basis.

(2) In the Line Wrapping tab, you can set the wrapping policy for parameterized types.

(3) Also in the Line Wrapping tab, you can decide to wrap before or after operators in assignments and conditional expressions.

Installing breakpoints from unrelated projects Multiple versions of the same Java type can be available in a workspace, and each version can have breakpoints configured at different source locations. When debugging, JDT tries to determine the "right" set of breakpoints to install in the target VM. This analysis now uses Java project dependencies by default.

To always install all enabled breakpoints, you can disable the new option Preferences > Java > Debug > Do not install breakpoints from unrelated projects

Note that not all projects use explicit Java project dependencies. E.g. OSGi bundles typically use a dynamically computed classpath where project dependencies are computed by PDE.

PDE
New Plug-in wizard does not create activator by default By default, the new plug-in wizard does not suggest the creation of an activator class anymore. Functionality in activators can in most cases be replaced with other means (e.g. OSGi declarative services), and activators can slow down the startup of an application.
Multi-version support for API analysis builder The API Analysis Builder now supports API baselines with multi-version bundles. While doing API analysis for a bundle for which multiple versions exist in the baseline, the comparisons are performed with the bundle in the baseline which best matches the development bundle that is being built.
DS Annotations Bundle-ActivationPolicy generation The Declarative Service Annotations support added with M6 can now be configured to generate the bundle header for lazy activation. The Bundle-ActivationPolicy: lazy header is necessary when starting an Eclipse application that uses the Equinox launcher. Otherwise, the bundle that provides the declarative service will not be started automatically and therefore the service won't be available. In a plain OSGi environment, this header is not necessary and might not have any effect. Therefore, it can be configured via preferences whether the header should be generated or not.

Platform Developers
Disable drag and drop for toolbars You can disable drag and drop of toolbars and tool components by tagging the corresponding model element with the 'NoMove' tag.

Support for setting the help ID in Eclipse 4 application To enable help entries for menus, you can define an ID for the help system for your MCommand, your MHandledMenuItem or your MDirectMenuItem model elements by adding an entry to the Persisted State Map with the key 'HelpContextId' and your help context id as the value.

Different package for ISideEffect The ISideEffect and ISideEffectFactory interfaces and the CompositeSideEffect class have been moved to a new package org.eclipse.core.databinding.observable.sideeffect.
ISideEffectFactory for composite ISideEffects You can use the ISideEffectFactory to create several ISideEffect instances that share the same life cycle.

For example, all ISideEffect instances that are created by the ISideEffectFactory obtained from the WidgetSideEffects#createFactory(Widget disposableWidget) method are automatically disposed once the corresponding widget is disposed.

Example:

ISWTObservableValue personFirstNameTextObservable = WidgetProperties.text(SWT.Modify)
	.observe(personFirstNameText);
ISWTObservableValue personLastNameTextObservable = WidgetProperties.text(SWT.Modify)
	.observe(personLastNameText);

ISideEffectFactory sideEffectFactory = WidgetSideEffects.createFactory(personFirstNameText);

sideEffectFactory.create(person::getFirstName, personFirstNameText::setText);
sideEffectFactory.create(personFirstNameTextObservable::getValue, person::setFirstName);
sideEffectFactory.create(person::getLastName, personLastNameText::setText);
sideEffectFactory.create(personLastNameTextObservable::getValue, person::setLastName);
SWT device zoom SWT exposes the device zoom level at which it is currently operating via the system property

"org.eclipse.swt.internal.deviceZoom"

Note: This is a read-only value, so setting it on the command line doesn't make sense. Furthermore, SWT doesn't use the deviceZoom when HighDPI support is disabled via -Dswt.enable.autoScale=false

The above features are just the ones that are new since the previous milestone build. Summaries for earlier Neon milestone builds: