<!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 http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" href="default_style.css" type="text/css" title="main" media="screen" />
<title>Eclipse Project 4.4 M1 News</title>
</head>
<body>
<h1>Eclipse Project 4.4 M1 - New and Noteworthy</h1>
<p>Here are some of the more noteworthy things available in milestone build M1
  (August 9, 2013) which is now available for <a href="http://download.eclipse.org/eclipse/downloads/" target="_top">download</a>.
</p>
<ul>
  <li><a href="#Platform">Platform</a></li>
  <li><a href="#JDT">JDT</a></li>
  <li><a href="#PDE">PDE</a></li>
  <li><a href="#Equinox">Equinox</a></li>
</ul>

<table class="news" border="0" cellpadding="10" cellspacing="0" width="80%">
  <tr>
    <td colspan="2" class="section" id="Platform">Platform</td>
  </tr>
  <tr id="e4-views-1">
    <td class="title">Contribute E4 Views into the IDE</td>
    <td class="content">
      As part of our goal to remove some of the barriers between e4-based code and the IDE
      we've just added a new element 'e4view' into the <code>org.eclipse.ui.views</code>
      extension point. This allows you to declare 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>
        This is the first trial run for this type of extension. Once we are sure we have the pattern
        correct, we'll make similar changes to other extension points such as <code>org.eclipse.ui.menus</code>.
      </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 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="e4-views-2">
    <td class="title">Tweaking the UX</td>
    <td class="content">
      We've finally gotten to the point where we can return and address some of the current pain
      points you all see when using Eclipse 4. This will be part of our focus for each milestone
      in Luna...while not necessarily 'New' these changes *are* 'Noteworthy'...;-).
      <p>
        First up is fixing how we handle minimized views that are brought up by the framework
        being hard to dismiss. The most common (and justifiably complained about) use case for
        this is having the Debug view overlay the editor when it hits a breakpoint. This has
        been refactored to match the 3.x behavior more closely and should now work as expected.
      </p><p>
        Next up will be re-enabling the ability to reorder the perspectives on the perspective bar.
      </p>
    </td>
  </tr>
  <tr id="signed-executables">
    <td class="title">Signed SDK Executables (for Windows and Mac)</td>
    <td class="content">Thanks to the efforts of the
              Eclipse Foundation (see <a
              href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=388878">bug
                388878</a>), we now provide signed Windows and Mac
              executables for the Eclipse SDK. This improves the initial impression of the
              software, as well as improves security for you, since
              there is no need to disable "Gatekeeper" or other
              security measures of the operating systems.
    </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 id="ant-view-collapse-all">
    <td class="title">Collapse All in Ant view</td>

    <td class="content">
    	The Ant view now supports the <b>Collapse All</b> command:
    	<p>
    	<img src="images/ant-view.png" alt="The Ant view showing the collapse all action"/>
    	</p>
    </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>
    <td colspan="2" class="section" id="JDT">JDT</td>
  </tr>
  <tr id="junit-failure-trace-font">
    <td class="title">Failure trace font for the JUnit view</td>
    <td class="content">
     The font for the failure trace in the JUnit view is now configurable on the <b>General &gt; Appearance &gt; Colors and Fonts</b> preference page.
     <p><img src="images/junit-failure-trace-font.png" alt=""/></p>
    </td>
  </tr>
  <tr id="contrib-jres">
    <td class="title">Contributed VMs are more recognizable</td>

    <td class="content">
    	You can't remove VMs that have been contributed to Eclipse via the <code>org.eclipse.jdt.launching.vmInstalls</code> extension point.This
    	fact is now more recognizable:
    	<p>
    	<img src="images/contrib-vm.png" alt="The Installed JREs preference page showing a contributed VM install"/>
    	</p>
    </td>
  </tr>
  <tr id="improved-hcr">
  	<td class="title">Improved HCR for member types</td>
  	
  	<td class="content">
  		Hot Code Replace (HCR) has been improved in the Java debugger to ensure the correct method is dropped to
  		in member types (inner / anonymous / local classes).
  		<p>
  		For more information see the <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=409023">bugzilla entry</a>.
  		</p>
  	</td>
  </tr>
  <tr>
    <td colspan="2" class="section" id="PDE">PDE</td>
  </tr>
  <tr id="target-statusbar">
    <td class="title">Display target platform in the status bar</td>
    <td class="content">
     You can now have target platform information displayed in the workbench status bar.  Currently it displays the active target
     name and double clicking on it will open the <b>Target Platform</b> preference page. This feature can be enabled on the
     <b>General &gt; Plug-in Development</b> preference page.
     <p><img src="images/target-statusbar.png" alt="Target platform in the status bar"/></p>
    </td>
  </tr>
  <tr id="pde-tracing">
    <td class="title">PDE UI tracing options available</td>
    <td class="content">
     The tracing options provided by PDE UI can now be enabled from the <b>General &gt; Tracing</b> preference page:
     <p><img src="images/pde-tracing.png" alt="PDE tracing options"/></p>
    </td>
  </tr>
  <tr id="warn-platformadmin-unavailable">
    <td class="title">Warning if PlatformAdmin is unavailable</td>
    <td class="content">
     PDE requires the PlatformAdmin service to function. The Equinox Framework has moved this service to the <b>org.eclipse.osgi.compatibility.state</b>
     compatibility fragment.  If the fragment is not installed, PDE will write an error to the log and will not function correctly. The fragment
     is included in the Eclipse SDK, so most users will be unaffected.
     <p><img src="images/platformadmin-message.png" alt="Error message for PlatformAdmin unavailable"/></p>
    </td>
  </tr>
    <tr id="pde-build-6">
    <td class="title">PDE Build moved to JavaSE-1.6</td>
    <td class="content">
     The org.eclipse.pde.build bundle now has a bundle required execution environment (BREE) of JavaSE-1.6, matching the Platform Ant bundles.
    </td>
  </tr>
  <tr>
    <td colspan="2" class="section" id="Equinox">Equinox</td>
  </tr>
  <tr id="framework-update">
    <td class="title">Equinox OSGi framework update</td>

    <td class="content">
      The Equinox Framework implementation has been updated to implement the latest
      API available for the upcoming OSGi R6 Framework specification.  The OSGi
      R6 Core Framework specification (finalized in March 2014) will contain
      enhancements in the following areas:
      <ul>
         <li> Introduction of Service Scopes to the OSGi Service Registry
             (<a href="http://www.osgi.org/Specifications/Drafts">RFC 195</a>)
         </li>
         <li> Improvements of Weaving Hooks
             (<a href="http://www.osgi.org/Specifications/Drafts">RFC 191</a>)
         </li>
         <li> Clarification of hooks on the system bundle
             (<a href="http://www.osgi.org/Specifications/Drafts">RFC 198</a>)
         </li>
         <li> Native environment namespace
             (<a href="http://www.osgi.org/Specifications/Drafts">RFC 188</a>)
         </li>
         <li> Data Transfer Objects
             (<a href="http://www.osgi.org/Specifications/Drafts">RFC 185</a>)
         </li>
         <li> Addition of FrameworkWiring.findProviders
         </li>
      </ul>
      From an Equinox perspective these are considered incremental enhancements.
      The enhancements mentioned above are implemented in M1.  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>
    <td colspan="2">  </td>
  </tr>
</table>
</body>
</html>
