<!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=utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" title="main" media="screen" />
<title>Eclipse Project Neon (4.6) M7 News</title>
</head>
<body>
<h1>Eclipse Project Neon (4.6) M7 - New and Noteworthy</h1>
<p>Here are some of the more noteworthy things available in the Neon milestone build M7
  which is now available for <a href="http://download.eclipse.org/eclipse/downloads/#4.6_Stable_Builds" target="_top">download</a>.
  <br/>
  We also recommend to read the Tips and Tricks, either via <b>Help &gt; Tips and Tricks...</b> or online for
  <a href="http://help.eclipse.org/topic/org.eclipse.platform.doc.user/tips/platform_tips.html">Platform</a>,
  <a href="http://help.eclipse.org/topic/org.eclipse.jdt.doc.user/tips/jdt_tips.html">JDT</a>, and
  <a href="http://help.eclipse.org/topic/org.eclipse.pde.doc.user/tips/pde_tips.htm">PDE</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="#Platform-Dev">Platform Developers</a></li>
</ul>

<table class="news">
  <colgroup>
    <col class="title" />
    <col />
  </colgroup>

  <tr>
    <td colspan="2" class="section" id="Platform">Platform</td>
  </tr>

  <tr id="improved-performance-reduced-memory">
    <td class="title">Improved interactive performance and reduced memory consumption</td>
    <td class="content">
      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.
    </td>
  </tr>

  <tr id="import-projects">
    <td class="title">Import projects</td>
    <td class="content">
    A new <b>Import Projects</b> wizard is available via the <b>File &gt; Open Projects...</b> menu and via the general
    <b>Import...</b> command under <b>General &gt; Projects from Folder or Archive</b>.
    <p>
      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.
    </p>
    <p>
       <img src="images/import-projects.png" alt="" />
    </p>
    <p>
      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.
    </p>
    <p>
      The import strategies are contributed via the new extension point <code>org.eclipse.ui.ide.projectConfigurator</code>, so that other IDE components
      can contribute detection and configuration specific to the technology they're supporting.
    </p>
    </td>
  </tr>

  <tr id="dark-theme-styled-links">
    <td class="title">Link widget background color can be styled via CSS</td>
    <td class="content">
    You can now style the background color of the SWT Link widget. This is used in
    the default dark theme provided by Eclipse.
    <p>
    <img src="images/themed-links.png" alt="" />
    </p>
    </td>
  </tr>

  <tr id="dark-theme-styled-text-scrollbar">
    <td class="title">Themed scroll bar enabled for editors in dark theme</td>
    <td class="content">
    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.
    <p>
    <img src="images/themed-scroll-bar.png" alt="" />
    </p>
    <p>
    This feature can be disabled in the Windows dark theme by setting the <code>swt.enable.themedScrollBar</code> 
    VM argument to <code>false</code> (or enabled on the dark theme for other platforms by setting it to true)
    in eclipse.ini or on the command line after <code>-vmargs</code>:
    </p>
    <p>
    <b>-Dswt.enable.themedScrollBar=false</b>
    </p>
    <p>
    Note that it may be added through css to any theme (see 
    <a href="http://git.eclipse.org/c/platform/eclipse.platform.ui.git/diff/bundles/org.eclipse.e4.ui.css.swt/plugin.xml?id=742d2e990765d5bbf9be61ff3f047105f8102bd3">
    properties available for customization</a> and a <a href="http://git.eclipse.org/c/platform/eclipse.platform.ui.git/diff/bundles/org.eclipse.ui.themes/css/e4-dark_win.css?id=742d2e990765d5bbf9be61ff3f047105f8102bd3">css example</a>) 
    -- the user may always override the theme setting by using the <code>swt.enable.themedScrollBar</code> VM argument.
    </p>
    <p>
    <b>Caveats</b>: 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.
    </p>
    </td>
  </tr>

  <tr id="simplified-capabilities-preference-page">
    <td class="title">Advanced capabilities preferences are now displayed in place (no extra dialog) </td>
    <td class="content">
        Previously, the entries in the <b>Capabilities</b> 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.
      <p>
        <img src="images/simplified-capabilities-page.png" alt="" />
      </p>
      <p>
        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).
      </p>
    </td>
  </tr>

  <tr id="quick-access-improvements">
    <td class="title">Quick Access improvements</td>
    <td class="content">
      <b>Quick Access</b> (<b>Ctrl+3</b>) is a small text field in the toolbar. You can use it to trigger any command in the Eclipse IDE.
      <p><img src="images/eclipse-quick-access-improved-search.png" alt="" /></p>
      <p>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 <code>"Views: "</code> in the search-box.</p>
      <p>
      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.
      </p>
    </td>
  </tr>
  <tr id="workspace-name-in-window-title">
    <td class="title">Workspace name shown in window title by default</td>
    <td class="content">
    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.
    <p>
    This the name can be changed or cleared in <b>Preferences &gt; General &gt; Workspace</b>.
    </p>
    </td>
  </tr>
  
  <tr id="full-screen-feature">
    <td class="title">Full Screen</td>
    <td class="content">
      The <b>Full Screen</b> feature is now also available on Windows and Linux. You can toggle the mode via shortcut (<b>Alt+F11</b>) or menu (<b>Window &gt; Appearance &gt; Toggle Full Screen</b>).
	  <p>When Full Screen is activated, you'll see a dialog which tells you how to turn it off again.</p>
    </td>
  </tr>
  
  <tr id="autosave-dirty-editors">
    <td class="title">Automatic Save of dirty editors</td>
    <td class="content">
      Auto-save of dirty editors is now available in Eclipse. The autosave option is <b>disabled by default</b>.
      A new autosave preference page (<b>Preferences &gt; General &gt; Editors &gt; Autosave</b>) 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, ...).
      <p><img src="images/autosave-preference-page.png" alt="" /></p>
    </td>
  </tr>

  <tr id="terminate-relaunch-history">
    <td class="title">Terminate and Relaunch from history</td>
    <td class="content">
      A <b>Terminate and Relaunch</b> 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
      <b>Preferences &gt; Run/Debug &gt; Launching</b>.
      
      <p>
        The behavior not selected on the preference page can also be activated on-demand by holding
        the <b>Shift</b> key while launching the configuration from history.
      </p>
	  <p><img src="images/launch-preference-history-relaunch.png" alt="" /></p>
      <p>
        Hint: You can still open the dialog to <b>edit a launch configuration</b> by holding
        the <b>Ctrl</b> key while selecting the configuration from history.
      </p>
    </td>
  </tr>
  
  <tr id="solaris-64-bit-builds">
    <td class="title">Solaris builds are now 64-bit only</td>
    <td class="content">
        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.
        <p> 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. </p>
    </td>
  </tr>
  
  <tr>
    <td colspan="2" class="section" id="JDT">JDT</td>
  </tr>

  <tr id="show-referenced-libraries-node-project-explorer">
    <td class="title">Grouping of referenced libraries in Project Explorer</td>
    <td class="content">
      The Project Explorer view now groups referenced libraries in a new container node.
        <p>
          <img src="images/show-referenced-libraries-node-project-explorer.png" alt="View menu > Show 'Referenced Libraries' node" />
        </p>
    </td>
  </tr>
  
  <tr id="hide-empty-library-containers-project-explorer">
    <td class="title">Hiding empty library containers in Project Explorer</td>
    <td class="content">
      You can now hide empty library containers in the Project Explorer view by selecting the new filter in its <b>Customize View...</b> dialog.
        <p>
          <img src="images/hide-empty-library-containers-project-explorer.png" alt="" />
        </p>
    </td>
  </tr>

  <tr id="add-meta-annotations">
    <td class="title">Adding meta-annotations while creating a new Java annotation type</td>
    <td class="content">
      You can now choose to add <code>@Retention</code>, <code>@Target</code> and <code>@Documented</code> meta-annotations along with their applicable values while creating a new Java annotation type. 
        <p>
          <img src="images/add-meta-annotations.png" alt="" />
        </p>
    </td>
  </tr>

  <tr id="assign-all-params-to-new-fields">
    <td class="title">Create new fields from method parameters</td>
    <td class="content">
      You can now assign all parameters of a method or constructor to new fields at once using the new <b>Quick Assist</b> (<b>Ctrl+1</b>):
        <p>
          <img src="images/assign-all-params-to-new-fields.png" alt="Assign all parameters to new fields" />
        </p>
    </td>
  </tr>
  
  <tr id="search-on-multi-selections">
    <td class="title">Search on multi-selections</td>
    <td class="content">
      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):
	  <p><img src="images/search-on-multi-selections.png" alt="" /></p>
	  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 <b>Open Call Hierarchy</b>, though.
    </td>
  </tr>

  <tr id="enabled-junit-assertions">
    <td class="title">Enabled assertions for new JUnit launch configurations</td>
    <td class="content">
      Assertions are now enabled by default for new JUnit launch configurations. You can disable this on <b>Preferences &gt; Java &gt; JUnit</b> page:
        <p>
          <img src="images/enabled-junit-assertions.png" alt="" />
        </p>
    </td>
  </tr>

   <tr id="add-nonnull">
    <td class="title">Quick Fix to add @NonNull to local variable</td>
    <td class="content">
    	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 <b>Quick Fix</b> is offered (<b>Ctrl+1</b>),
		that adds a <code>@NonNull</code> annotation to the local variable.
        <p>
          <img src="images/add-nonnull1.png" alt="" />
        </p>
        <p>
			While this may not produce correct code, it tells the compiler your intention to not
			allow <code>null</code> 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 <a href="https://www.eclipse.org/eclipse/news/4.6/M6/#null-analysis-generics">Improved null analysis with generics (M6)</a>):
        </p>
        <p>
          <img src="images/add-nonnull2.png" alt="" />
        </p>
    </td>
  </tr>

  <tr id="formatter">
    <td class="title">New options in code formatter</td>
    <td class="content">
      A few new options have been added in the formatter profile editor.
      <p><b>(1)</b> In the new <b>Parentheses</b> tab, you can order the formatter to <b>keep
      parentheses</b> of various Java elements <b>on separate lines</b>, 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 <b>preserve existing
      positions</b>, if you want to manually manage parentheses positions on a case-by-case basis.</p>
      <p><img src="images/formatter-parentheses.png" alt="" /></p>
      <p><b>(2)</b> In the <b>Line Wrapping</b> tab, you can set the wrapping policy for
      <b>parameterized types</b>.</p>
      <p><img src="images/formatter-wrap-parameterized.png" alt="" /></p>
      <p><b>(3)</b> Also in the <b>Line Wrapping</b> tab, you can decide to wrap <b>before
      or after operators</b> in <b>assignments</b> and <b>conditional expressions</b>.</p>
      <p><img src="images/formatter-wrap-before-assignment.png" alt="" /></p>
      <p><img src="images/formatter-wrap-before-conditional.png" alt="" /></p>
    </td>
  </tr>

 <tr id="breakpoint-unrelated-project">
    <td class="title">Installing breakpoints from unrelated projects</td>
    <td class="content">
        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.
        <p>
        To always install all enabled breakpoints, you can disable the new option
        <b>Preferences &gt; Java &gt; Debug &gt; Do not install breakpoints from unrelated projects</b>
        </p>
        <p>
          <img src="images/breakpoint-unrelated-project.png" alt="" />
        </p>
        <p>
        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.
        </p>
    </td>
  </tr>
  <tr>
    <td colspan="2" class="section" id="PDE">PDE</td>
  </tr>

   <tr id="plugin-wizard-activator-creation">
    <td class="title">New Plug-in wizard does not create activator by default</td>
    <td class="content">
	   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.
    </td>
  </tr>
  
  <tr id="multi-version-baseline-support">
    <td class="title">Multi-version support for API analysis builder</td>
    <td class="content">
	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.
    </td>
  </tr>

   <tr id="ds-annotation-bapl">
    <td class="title">DS Annotations Bundle-ActivationPolicy generation</td>
    <td class="content">
		The Declarative Service Annotations support added with M6 can now be configured to generate the bundle header for lazy activation.
		The <code>Bundle-ActivationPolicy: lazy</code> 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.
        <p>
          <img src="images/ds-annotations.png" alt="" />
        </p>
    </td>
  </tr>


  <tr>
    <td colspan="2" class="section" id="Platform-Dev">Platform Developers</td>
  </tr>

  <tr id="disable-toolbar-dnd">
    <td class="title">Disable drag and drop for toolbars</td>
    <td class="content">
		You can disable drag and drop of toolbars and tool components by tagging the corresponding model element with the <code>'NoMove'</code> tag.
		<p>
			<img src="images/toolbar-disable-drag-and-drop-with-NoMove-tag.png" alt=""/>
		</p>
	</td>
  </tr>
  
  <tr id="e4-help-support">
    <td class="title">Support for setting the help ID in Eclipse 4 application</td>
    <td class="content">
		To enable help entries for menus, you can define an ID for the help system for your <code>MCommand</code>, your <code>MHandledMenuItem</code> or your <code>MDirectMenuItem</code> model elements by adding an entry to the <code>Persisted State</code> Map with the key <code>'HelpContextId'</code> and your help context id as the value.
		<p>
			<img src="images/e4-help-support.png" alt=""/>
		</p>
	</td>
  </tr>

  <tr id="sideeffect-package">
    <td class="title">Different package for ISideEffect</td>
    <td class="content">
		The <code>ISideEffect</code> and <code>ISideEffectFactory</code> interfaces and the <code>CompositeSideEffect</code> class
		have been moved to a new package <code>org.eclipse.core.databinding.observable.sideeffect</code>.
	</td>
  </tr>

  <tr id="sideeffect-factory">
    <td class="title">ISideEffectFactory for composite ISideEffects</td>
    <td class="content">
    	You can use the <code>ISideEffectFactory</code> to create several <code>ISideEffect</code> instances that share the same life cycle.
    	<p>
    	For example, all <code>ISideEffect</code> instances that are created by the <code>ISideEffectFactory</code> obtained from the <code>WidgetSideEffects#createFactory(Widget disposableWidget)</code> method are automatically disposed once the corresponding widget is disposed.
    	</p>
    	<p>Example:</p>
<pre>
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);
</pre>
	</td>
  </tr>

  <tr id="swt-device-zoom">
    <td class="title">SWT device zoom</td>
    <td class="content">
    	SWT exposes the device zoom level at which it is currently operating via the system property
    	<p><code>"org.eclipse.swt.internal.deviceZoom"</code></p>
    	<p>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 <code>-Dswt.enable.autoScale=false</code></p>
    </td>
  </tr>


  <tr>
    <td colspan="2"/>
  </tr>
</table>

<p>The above features are just the ones that are new since the previous milestone
build. Summaries for earlier Neon milestone builds:</p>
<ul>
  <li><a href="https://www.eclipse.org/eclipse/news/4.6/M6/">News for Eclipse Neon milestone build M6</a></li>
  <li><a href="https://www.eclipse.org/eclipse/news/4.6/M5/">News for Eclipse Neon milestone build M5</a></li>
  <li><a href="https://www.eclipse.org/eclipse/news/4.6/M4/">News for Eclipse Neon milestone build M4</a></li>
  <li><a href="https://www.eclipse.org/eclipse/news/4.6/M3/">News for Eclipse Neon milestone build M3</a></li>
  <li><a href="https://www.eclipse.org/eclipse/news/4.6/M2/">News for Eclipse Neon milestone build M2</a></li>
  <li><a href="https://www.eclipse.org/eclipse/news/4.6/M1/">News for Eclipse Neon milestone build M1</a></li>
</ul>

</body>
</html>
