Eclipse Project Oxygen (4.7) M5 - New and Noteworthy

Here are some of the more noteworthy things available in the Oxygen milestone build M5 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.

Wildcards in Quick Access You can now use * and ? as wildcards to filter Quick Access (Ctrl+3) items. The match ranges are displayed in bold.

Show/hide Status Bar You can now hide and show the bottom status bar via menu: Window > Appearance > Hide (Show) Status Bar.

In Quick Access, the command is called Toggle Statusbar.
Improved Launch Groups The UI for the new Launch Groups feature in the Run/Debug Configurations... dialog has been reworked to be more intuitive and user friendly. Also, additional configuration possibilities have been added:
  • 'Wait for console output (regexp)' post launch action: Allows to delay further processing of launch group elements until a certain output (matching a regular expression) appears on the console of the given group element.
  • 'Adopt launch if already running': Allows to control the behaviour of the group when the launch configuration referenced by the launch group element is already running (no matter who launched it). If checked, the launch configuration will not be launched again if it is running already. The existing launch will be adopted by the group (i.e. terminating the group will also terminate this launch). Any configured post launch action will still be executed!

Content Assist for Feature Name in Model Editor You can now use Ctrl+Space to trigger content assist when selecting the Feature Name in the Model Editor.

Model Editor improvements The elements proposed in the Add child menu are now filtered to a minimal list containing allowed elements only.

Quick Fix to move type annotations The rules for the placement of Java 8 "type annotations" introduced via JSR 308 are sometimes surprising. In case of errors, a new Quick Fix Move type annotation is offered, that moves the type annotation to a location that corresponds to what was probably intended.

Toggle Tracepoint A new action Run > Toggle Tracepoint has been added.

The action creates a conditional breakpoint using the "systrace" template, which prints the class and method name.

This makes use of another new feature of conditional breakpoints: As long as the condition doesn't explicitly return a boolean true, the condition is now considered to implicitly return false, and the breakpoint will not suspend execution.
Filter in plugin and feature export wizards You can now use a text filter when selecting plug-ins in the Export.. > Deployable plug-ins and fragments or features in the Export.. > Deployable features wizards.

Target definition files can be edited with the generic editor An extension for the generic editor was supplied so that the target definition files (.target files) can now be edited via the generic editor. Syntax highlighting for the most used keywords is supported. Content Assist is also supported for tags and their attributes, installable units for a given repository, and the available versions for a given installable unit.

More descriptive plug-in template names The template names for plug-in have been reworked to be more descriptive.

Types marked with @noimplement and @noextend processed by API leak analysis Extending or implementing an interface marked as @noimplement is now reported as an API leak. This is because adding a field or method to the interface marked as @noimplement may break a client that is using the extended or implemented type. Also extending a type marked as @noextend may indirectly leak API types if the extended type is further extended by the client. Some of the new kinds of leak warnings are shown below:

API Tools flags field addition to class as a breaking change The addition of a field to class that is extendable by clients is now flagged as a breaking change. On the Plug-in Development > API Errors/Warnings preference page in the API Compatibility tab, there is a new option in the Class section to control the severity of a "field addition to class". Also there is a new link at the top of API Compatibility tab that has more details on achieving API binary compatibility.

The field addition error has a Quick Fix that opens help to explain the incompatibility in greater detail.

Platform Developers
Source-incompatible change in org.eclipse.equinox.common requires Java 8 BREE for some dependant plug-ins With bug 509234, org.eclipse.core.runtime.ListenerList now overrides Java 8 default method Iterable#spliterator() and provides stream() and parallelStream() methods. Thus it exposes Java 8 types in public API. This is a source-incompatible change that requires all plug-ins using ListenerList to have a minimum BREE set to JavaSE-1.8 if they want to properly compile against Oxygen and forthcoming versions (i.e. versions in the [3.9,4.0) range).

The typical compile error indicating that you should change your BREE is:

The type cannot be resolved. It is indirectly referenced from required .class files.

Note that this change is only required when using org.eclipse.core.runtime.ListenerList. However, now that some Java 8 types are being exposed in the public API, similar changes may be done in other API types.

Finally, note that this change is binary compatible. Any previously compiled bundle depending on org.eclipse.equinox.common within the [3.0,4.0) range will continue to work as before.
New API for controlling build order The extension point now allows extensions to influence the order in which projects are built by supplying an implementation of IDynamicReferenceProvider. This replaces the IProjectDescription#setDynamicReferences(IProject[]) API, which is now deprecated.
Asynchronous content-assistant With bug 251156, a new constructor org.eclipse.jface.text.contentassist.ContentAssistant(boolean asynchronous) was added. An asynchronous ContentAssistant triggers computation of completion proposals in the background and doesn't block the thread invoking the completion. As a result, it will prevent the UI thread to freeze when a completion proposal computer takes too long.

This supports the same API and methods as the usual ContentAssist, so shifting from synchronous/blocking ContentAssistant to asynchronous one only requires instantiating the ContentAssistant as asynchronous. Note that as the computation now happens in background, the IContentAssistProcessor attached to an asynchronous ContentAssistant must not require the UI Thread; any IContentAssistProcessor computer requiring the UI Thread will need to be modified in order to be used with an asynchronous ContentAssistant.

Another new API is ContentAssistant#addContentAssistProcessor(IContentAssistProcessor, String), which provides a way to directly add multiple processors to one content assistant.

The generic and extensible editor has been switched to use this asynchronous ContentAssistant.

New Declarative Services Implementation supporting OSGi R6 The previous release of Equinox only supported the OSGi R5 specification for the Declarative Services specification. With bug 501950 the Apache Felix Declarative Services implementation (org.apache.felix.scr) is now used as the Declarative Services implementation in the Platform and Equinox. This implementation fully supports the OSGi R6 Declarative Services specification. The Equinox bundle (org.eclipse.equinox.ds) is still included in order to configure and start the Felix SCR bundle but the Equinox Declarative Service implementation code is no longer shipped within the org.eclipse.equinox.ds bundle.

The OSGi R6 API for declarative services requires some additional packages (org.osgi.util.function and org.osgi.util.promise). These packages are now exported by the org.eclipse.osgi.util bundle. In order to resolve and run the new Declarative Services implementation the following bundles are required in your target:

  • org.apache.felix.scr
  • org.eclipse.equinox.ds
  • org.eclipse.osgi.util

The Equinox bundle org.eclipse.equinox.util is no longer needed for the Felix Declarative Services implementation.

Note that org.eclipse.equinox.ds automatically sets ds.delayed.keepInstances=true, which avoids failures in existing clients of Equinox DS that assume that component instances are not deactivated when their use count goes to zero.

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