blob: b096c66f1afdb8e753a174e07b834598d6c177c5 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="copyright"
content="Copyright (c) Eclipse contributors and others 2014. This page is made available under license. For full details, see the LEGAL section in the documentation that contains this page." />
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="default_style.css" charset="UTF-8" type="text/css" />
<style type="text/css">
table.news td {
border-top: solid thin black;
}
table.news tr {
vertical-align: top;
}
table.news tr td.section {
font-size: 20px;
font-weight: bold;
}
table.news tr td.title {
vertical-align: top;
width: 30%;
font-weight: bold;
}
table.news tr td.content {
vertical-align: top;
width: 70%;
}
</style>
<title>Eclipse Project Luna - New and Noteworthy</title>
</head>
<body>
<h2>Platform and Equinox API</h2>
<ul>
<li><a href="#Platform">Platform Changes</a></li>
<li><a href="#Equinox">Equinox Changes</a></li>
<li><a href="#SWT">SWT Changes</a></li>
</ul>
<!-- ****************** START OF N&N TABLE ****************** -->
<table class="news" cellpadding="10" cellspacing="0">
<tbody>
<!-- ******************** Platform ********************** -->
<tr>
<td id="Platform" class="section" colspan="2"><h2>Platform Changes</h2></td>
</tr>
<tr id="e4-views-1">
<td class="title">Contribute e4 Views into the IDE</td>
<td class="content">Native e4 views can now be contributed to the Eclipse workbench via extension point. The <code>org.eclipse.ui.views</code> extension point now supports an <code>e4view</code>
element for declaring a new view for the IDE whose implementation is done in the e4 style (i.e. an annotated POJO).
<p>
<img src="images/new-e4view-extension.png" alt="new extension" />
</p>
<p>The new type of extension is identical to the original 'view' except for relaxing the requirement that the 'class' implement IViewPart.</p>
<p>For those that are unaware of the e4 way of coding, here's what the implementation of an e4 view looks like:</p> <pre>
import javax.annotation.PostConstruct;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
public class RealE4View {
Label label;
@PostConstruct
void createView(Composite parent) {
label = new Label(parent, SWT.BORDER);
label.setText("Testing");
}
@Focus
void setFocus() {
label.setFocus();
}
}
</pre>
<p>Note how it's a simple Java object (POJO) and how few dependencies it has; this has already proven itself as a far more convenient way to write the code and has great advantages in
testing (because of its few dependencies).</p>
</td>
</tr>
<tr id="css-bridge">
<td class="title">CSS bridge</td>
<td class="content">The Eclipse 4 CSS-based styling engine has been connected to the classic Eclipse platform theme APIs through a new mechanism called the <i>CSS bridge</i>. This support
enables a number of new user cases:
<ul>
<li>Accessing legacy platform <b>Color and Font</b> definitions from within a CSS style sheet:
<p>
<img src="images/css-bridge/using-definitions.png" alt="" />
</p>
</li>
<li>Overriding <b>Color and Font</b> definitions in a CSS style sheet:
<p>
<img src="images/css-bridge/overriding-definitions.png" alt="" />
</p>
</li>
<li>Adding new style definitions within your CSS that will be surfaced for user customization on the <b>Color and Font</b> preference page:
<p>
<img src="images/css-bridge/new-definitions.png" alt="" />
</p>
</li>
</ul> This bridging has a number of nice properties:
<ul>
<li>The legacy color theme definitions overridden or added in the CSS style sheet are merged with the current theme.</li>
<li>When switching themes, overridden values are re-merged with the new theme.</li>
<li>The new definitions added with the CSS file (the last use case) are available in the CSS theme that provides it.</li>
</ul> Note that after switching CSS themes, the definitions can be unavailable in the theme registries when the new theme doesn't re-define it. This means when using theme definitions out of CSS
files, you must be prepared for such situations and use proper default values in the case when some definitions are missing.
</td>
</tr>
<tr id="theme-association">
<td class="title">New 'themeAssociation' element of the 'org.eclipse.e4.ui.css.swt.theme' extension&nbsp;point</td>
<td class="content">An Eclipse platform CSS theme can now register an association with a legacy platform <b>Color and Font</b> theme. After defining the proper association between themes,
changing themes in the <b>Appearance</b> preference page will automatically set the associated <b>Color and Font</b> theme.
<p>
<img src="images/theme-association.png" alt="" />
</p>
</td>
</tr>
<tr id="recenter-command">
<td class="title">Improved Recenter command</td>
<td class="content">Like in Emacs, the <b>Recenter</b> command in textual editors now cycles between center, bottom and top.
</td>
</tr>
<tr id="ant-1.9.2-update">
<td class="title">Ant 1.9.2</td>
<td class="content">The platform has been updated to use the latest version of Apache Ant (1.9.2). For more information on what is new in Ant 1.9.2, see the official <a
href="http://mirror.olnevhost.net/pub/apache//ant/README.html">what's new</a>.
</td>
</tr>
<tr id="ant-bree-update">
<td class="title">Platform Ant BREE update</td>
<td class="content">Platform Ant has had a BREE update to require a Java 1.6 compatible execution environment (or newer).</td>
</tr>
<tr>
<td class="title">Platform Debug BREE update</td>
<td class="content">Platform Debug has had a BREE update to require a Java 1.6 compatible execution environment (or newer).</td>
</tr>
<tr id="debug-examples">
<td class="title">New debugger examples</td>
<td class="content">New examples have been added to the Platform Debug git repository. The <code>org.eclipse.debug.examples.mixedmode</code> project demonstrates how to use Debug's
mixed-mode launching support. The <code>org.eclipse.debug.examples.memory</code> project provides sample content to display in the <b>Memory</b> and <b>Registers</b> views.
</td>
</tr>
<tr id="batik-1-7">
<td class="title">Updated to Batik 1.7</td>
<td class="content">The Platform now includes a newer version of Apache Batik, version 1.7.0. This new version is being used for CSS parsing in the declarative styling engine, and is
notably faster than the previous version.</td>
</tr>
<tr id="workspaceLock">
<td class="title">Removed WorkspaceLock API</td>
<td class="content">The <code>WorkspaceLock</code> API allowed a special client (usually Platform UI) to hook into the locking protocols used by the workspace implementation. This hook
was used to mitigate deadlocks due to interaction with synchronous SWT events, and was never intended to be used by other clients. In the 3.0 release this API was deprecated in favor of a
more general API provided by the <code>org.eclipse.core.jobs</code> bundle. Invoking this API has had no effect since the 3.0 release. The specific API being removed includes:
<ul>
<li>The <code>org.eclipse.core.resources.WorkspaceLock</code> class.
</li>
<li>The method <code>org.eclipse.core.resources.IWorkspace#setWorkspaceLock</code></li>
</ul> Clients that directly use an API listed above should remove any references to it.
</td>
</tr>
<tr id="incrementalProjectBuilder-getRule">
<td class="title">Removed IncrementalProjectBuilder#getRule() API</td>
<td class="content">The <code>IncrementalProjectBuilder#getRule()</code> method returned a scheduling rule that was required for building the project by the builder. This method was
intended to be used by the builder framework only. In the 3.6 release this method was deprecated in favor of a more general method <code>IncrementalProjectBuilder#getRule(int, Map)</code>.
The specific API being removed includes:
<ul>
<li>The method <code>org.eclipse.core.resources.IncrementalProjectBuilder#getRule()</code></li>
</ul> Clients that directly call the API listed above should remove any references to it or replace them with calls to <code>IncrementalProjectBuilder#getRule(int, Map)</code>. Clients that
implement the API listed above should implement <code>IncrementalProjectBuilder#getRule(int, Map)</code> instead.
</td>
</tr>
<tr id="eclipse-api">
<td class="title">EMenuService released as API</td>
<td class="content">The <code>EMenuService</code> service has been released as API. RCP clients must adjust their package imports to <code>org.eclipse.e4.ui.services</code>.
</td>
</tr>
<tr id="MLocalizable">
<td class="title">MLocalizable mixin interface</td>
<td class="content">The mechanism for localizing strings in the application model has been changed. Previously, EOperations (methods) were used to get a localized value. Now, volatile,
transient, derived, unchangeable EStructuralFeatures are used. This enables notifications if a localizable value has changed. To mark EClasses who hold localizable informations and to inform
them externally about a changed Locale, the <code>MLocalizable</code> mixin interface is introduced, which contains the single method <code>updateLocalization()</code>. This enables the
platform to generically search the model for model elements affected by a Locale change and force them to update.
</td>
</tr>
<tr id="Locale_Change_Propagation">
<td class="title">Locale change propagation</td>
<td class="content">A new service called <code>ILocaleChangeService</code> has been introduced, which supports changing Locale at runtime. Using this service will:
<ol>
<li>Update the Locale in the application context.</li>
<li>Inform all model elements of an application that implement <code>MLocalization</code> about the change.
</li>
<li>Post an event via event broker.</li>
</ol>
</td>
</tr>
<tr id="Locale_Change_Consumption">
<td class="title">Locale change consumption</td>
<td class="content">There are now three ways to be informed about a Locale change:
<ol>
<li>Via event broker by listening to the topic <i>org/eclipse/e4/core/NLS/LOCALE_CHANGE</i></li>
<li>Via dependency injection by getting the value for <code>TranslationService.LOCALE</code> injected (e.g. via method injection)
</li>
<li>Via attaching to the model events listening to the newly introduced LOCALIZED-Features</li>
</ol> <b>Note:</b> The renderers need to be modified to listen to the LOCALIZED-Features, otherwise the Locale change at runtime isn't supported!
</td>
</tr>
<tr id="ResourceBundleProvider">
<td class="title">ResourceBundleProvider</td>
<td class="content">A new <code>ResourceBundleProvider</code> service has been introduced to abstract out the reference to the <code>BundleLocalization</code> OSGi service. This enables
application authors to change how ResourceBundles should be looked up within their Eclipse application, e.g. using class-based ResourceBundles, loading translations out of a database,
loading ResourceBundles from a server by using a different ResourceBundle.Control. The default implementation <code>DefaultResourceBundleProvider</code> is internally using <code>BundleLocalization</code>
to keep the known default behaviour.
</td>
</tr>
<tr id="TranslationService">
<td class="title">TranslationService update</td>
<td class="content">The <code>TranslationService</code>, that is used to localize the application model, had several downsides regarding extensibility. A lot of code needed to be copied
in order to create a custom <code>TranslationService</code> that retrieves translations from a different location than the OSGi-ResourceBundle. To make it easier for users to implement a
custom <code>TranslationService</code>, the API was modified. The method <code>getResourceString(String, ResourceBundle)</code> is moved from <code>BundleTranslationProvider</code> to <code>TranslationService</code>
with protected visibility, as it contains the logic to retrieve and transform the translation key that is set in the application model. The default implementation <code>BundleTranslationProvider</code>
is now using the <code>ResourceBundleHelper</code> in combination with the <code>ResourceBundleProvider</code>. This way the localization of the application model and the localization via
new message extension are using the same mechanisms. As a small enhancement, this also enables the usage of dot separated keys for translating the application model.
<p>
As part of this work, the previously internal package
<code>org.eclipse.e4.core.services.translation</code>
has been released as API.
</p>
</td>
</tr>
<tr id="CSSIncludes">
<td class="title">CSS includes</td>
<td class="content">CSS files for Eclipse can now include other CSS files via the <code>@import url("platform:/plugin/Bundle-Symbolic-Name/path/file.extension");</code> statement. This
allows easy reuse of existing style sheets.
</td>
</tr>
<tr id="osgi-integration">
<td class="title">Improved OSGi integration</td>
<td class="content">Eclipse implementations can retrieve the OSGI <code>BundleContext</code> via an extended object supplier and the <code>@Inject @OSGiBundle</code> annotations.
</td>
</tr>
<tr id="code-cleanup">
<td class="title">Platform code improvements</td>
<td class="content">During the last milestones, the platform team has invested in cleaning up the existing codes basis to simplify contributions by new and existing contributors. For more
details, see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=420779">bug 420779</a>. During this update, several plug-ins have been upgraded to require Java 1.6 instead of Java 1.4 or
Java 1.5.
</td>
</tr>
<tr id="java7-filesystem-fragment">
<td class="title">New filesystem fragment for Java 7 API</td>
<td class="content">A new filesystem fragment supporting Java 7 file API has been added. The new fragment named <code>org.eclipse.core.filesystem.java7</code> allows to retrieve
information about files such as permissions, link targets, etc. using Java 7 API rather than native code. This enables full filesystem capabilities on platforms with no native Eclipse
filesystem fragment. There are three different types of filesystems supported:
<ul>
<li>DOS/Windows filesystems,</li>
<li>POSIX compliant filesystems, and</li>
<li>filesystems that are neither DOS/Windows nor POSIX compliant.</li>
</ul> The new fragment will be loaded and used automatically when you run Eclipse with JRE 7 or newer and no native filesystem fragment applicable for your operating system can be found (such as
Solaris, ARM, and s390).
</td>
</tr>
<!-- ******************** Equinox ********************** -->
<tr>
<td id="Equinox" class="section" colspan="2"><h2>Equinox Changes</h2></td>
</tr>
<tr id="framework-update-1">
<td class="title">Equinox OSGi framework update</td>
<td class="content">The Equinox Framework implementation has been updated to implement the latest API OSGi R6 Framework specification. The OSGi R6 Core Framework specification (finalized
in March 2014) contain enhancements in the following areas:
<ul>
<li>Introduction of Service Scopes to the OSGi Service Registry (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0195">RFC 195</a>)
</li>
<li>Improvements of Weaving Hooks (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0191">RFC 191</a>)
</li>
<li>Clarification of hooks on the system bundle (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0198">RFC 198</a>)
</li>
<li>Native environment namespace (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0188">RFC 188</a>)
</li>
<li>Data Transfer Objects (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0185">RFC 185</a>)
</li>
<li>Extension Bundle Activators (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0204">RFC 204</a>)
</li>
<li>Addition of FrameworkWiring.findProviders - no RFC</li>
</ul> From an Equinox perspective these are considered incremental enhancements. A majority of the development effort during this release cycle is focused on refactoring and, in many cases,
rewriting the core Equinox Framework implementation to be based on the OSGi generic dependency model.
<p>
For most consumers and developers this change should not be noticed. But, as documented in the <a href="http://wiki.eclipse.org/Equinox/Luna_Framework">wiki</a>, there are four main areas
of concern that the community should be aware of:
</p>
<ul>
<li>The Framework no longer uses the old Equinox resolver API org.eclipse.osgi.service.resolver internally to resolve bundles.</li>
<li>All Equinox Framework specific hook implementations are broken and will need to migrate.</li>
<li>Removal of old style plug-in support. A compatibility fragment is available to add the support back.</li>
<li>Removal of PlatformAdmin Service Implementation. A compatibility fragment is available to add support back.</li>
</ul>
</td>
</tr>
<tr id="cm-update">
<td class="title">Equinox Configuration Admin update</td>
<td class="content">The Equinox Configuration Admin implementation has been updated to implement the OSGi Configuration Admin Service Specification version 1.5. The previous release of
Equinox Configuration Admin implemented version 1.3.</td>
</tr>
<tr id="region-update-1">
<td class="title">Equinox Regions update</td>
<td class="content">The Equinox Regions implementation has been updated to take advantage of Extension Bundle Activators (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0204">RFC
204</a>) coming in the OSGi R6 specification. This allows Equinox Regions to insert its isolation model before the framework is launched so that proper region behavior can be established
before any bundles are loaded in the framework.
<p>
The Equinox Regions has added a new namespace for sharing bundle lifecycle operations between regions. In previous versions of Equinox regions the only way to share bundle lifecycle
operations across different regions was to share complete bundles which also shared all capabilities provided by the bundle. Now it is possible to use the
org.eclipse.equinox.allow.bundle.lifecycle namespace to share only the bundle lifecycle operations between different regions. (see <a
href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=418224">bug 418224</a>)
</p>
</td>
</tr>
<tr id="metatype-update">
<td class="title">Equinox Metatype update</td>
<td class="content">The Equinox Metatype API has been updated to add the methods to get the minimum and maximum values of an attribute definition. (see <a
href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=416640">bug 416640</a>)
</td>
</tr>
<tr>
<td class="title">Framework Trace Options</td>
<td class="content">The new OSGi framework implementation now supports many of the previously supported trace options and adds a few more trace options to help debug issues with the
framework. The following trace options are now implemented:
<dl>
<dt>debug/bundleTime</dt>
<dd>Prints out timing information for bundle activation</dd>
<dt>debug/cachedmanifest</dt>
<dd>Debug the caching of bundle headers</dd>
<dt>debug/location</dt>
<dd>Prints out location service debug information</dd>
<dt>debug/startlevel</dt>
<dd>Prints out start level service debug information</dd>
<dt>monitor/activation</dt>
<dd>Monitor persistent bundle activation</dd>
<dt>resolver/providers</dt>
<dd>Prints out information about matching capabilities returned to the resolver and why any were filtered out</dd>
<dt>resolver/hooks</dt>
<dd>Prints out information about capabilities or resources that were filtered by resolver hooks</dd>
<dt>resolver/uses</dt>
<dd>Prints out information about uses constraint violations</dd>
<dt>resolver/wiring</dt>
<dd>Prints out wiring information after the resolve process completes</dd>
<dt>resolver/report</dt>
<dd>Prints out the resolution report information</dd>
<dt>resolver</dt>
<dd>enables all resolver trace options</dd>
</dl>
</td>
</tr>
<!-- *********************** SWT *********************** -->
<tr>
<td id="SWT" class="section" colspan="2"><h2>SWT Changes</h2></td>
</tr>
<tr id="swt-needs-1.5">
<td class="title">SWT requires JRE 1.5</td>
<td class="content">The SWT project has moved to Java 1.5 compliance level. SWT applications will now require JRE 1.5 or higher to run.</td>
</tr>
<tr id="timing-api">
<td class="title">Added UI timing API</td>
<td class="content">SWT has added two new events, <tt>SWT.PreEvent</tt> and <tt>SWT.PostEvent</tt>, which are sent before and after all events and async runnables. These events can be
used to measure the time spent on processing any events. This can be useful for detecting slow event listeners. Because of its pervasive effect on all events, this listener should be used
with <b>extreme</b> caution. For an example of how this can be used, take a look at the <a
href="http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.examples.watchdog"> Watchdog</a> plugin in SWT examples.
</td>
</tr>
<tr id="bidi-segments">
<td class="title">BIDI segments support for Combo on Windows</td>
<td class="content">The <code>Combo</code> widget now supports the same <code>SegmentListener</code> API as <code>Text</code>. This allows an application to specify segment boundaries and
Unicode Control Characters to use in the segment boundaries.
<p>
<a href="http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet332.java"> Snippet332</a> shows how to
accomplish RTL override in a Combo.
</p>
<p>
<img src="images/combo-bidi-segments.png" alt="" />
</p>
<p>
JFace clients can use
<code>BidiUtils#applyBidiProcessing(...)</code>
to set pre-defined text types.
</p>
</td>
</tr>
<tr id="styled-text-api">
<td class="title">Added new API in StyledText to get text selection state</td>
<td class="content"><code>StyledText.isTextSelected()</code> can be used to quickly determine whether any text in the widget is selected or not.</td>
</tr>
<tr id="sleep-monitor-api">
<td class="title">Added API for sleep monitoring</td>
<td class="content">SWT has added two new events, <code>SWT.Sleep</code> and <code>SWT.Wakeup</code>, which are sent before the <code>Display</code> event loop goes into sleep and after
it wakes up from sleep respectively. These events can e.g. be used to monitor the duration of sleep time in SWT applications.
</td>
</tr>
<tr id="styledtext-bidi">
<td class="title">Set text direction for the <code>StyledText</code> widget on Windows
</td>
<td class="content">The <code>StyledText</code> widget now supports setting the text direction via the <code>setTextDirection(int)</code> API on the Windows platform. The <code>setTextDirection
(int)</code> and <code>getTextDirection ()</code> APIs are also added to <code>TextLayout</code> (implemented only on Windows currently).
</td>
</tr>
<tr id="gtk3-as-default">
<td class="title">GTK+ 3 used by default on Linux distributions (when installed and available)</td>
<td class="content">Linux builds come with GTK+ 3 support enabled by default on GTK+ 3 versions prior to 3.10, versions newer than that will fall back to GTK+ 2.x by default for maximum
stability. The GTK+ 3 support can however still be enabled either by setting the environment variable <code>SWT_GTK3</code> to <code>1</code> or by adding the launcher parameters <code>--launcher.GTK_version
3</code>.
</td>
</tr>
<tr id="swt-webkit">
<td class="title">Experimental support for WebKit2 added to the SWT Browser</td>
<td class="content">The SWT Browser now has preliminary support for WebKit2. To try it out, create a browser widget with style <code>SWT.WEBKIT</code>, and set the environment variable
SWT_WEBKIT2 to 1. This is only supported with GTK+ 3.x; if GTK+ 3 is disabled the browser will fallback to WebKit1.
</td>
</tr>
<tr id="windows-taskbar-grouping">
<td class="title">SWT applications will not be grouped together in the Windows taskbar by default</td>
<td class="content">SWT does not initialize the <b>AppUserModelID</b> (which is used by Windows for taskbar grouping) to "SWT" by default anymore. SWT applications which desire to be
grouped together in the Windows taskbar should set an appropriate application name before creating the <code>Display</code> object as shown below: <pre>
Display.setAppName("APP_NAME"); // APP_NAME will used as AppUserModelID
Display display = new Display();
</pre>
</td>
</tr>
</tbody>
<!-- ****************** END OF N&N TABLE ****************** -->
</table>
<p align="center">
<a href="eclipse-news-part2.php">Previous</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="eclipse-news-part4.php">Next</a>
</p>
</body>
</html>