//////////////////////////////////////////
* Copyright (c) 2015 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    Wayne Beaton (Eclipse Foundation)- initial API and implementation
//////////////////////////////////////////

Mars New and Noteworthy
-----------------------

Here are some of the noteworthy features in Eclipse Mars.

[[java]]
Java(TM)
~~~~~~~~

Eclipse Mars includes numerous bug fixes and improvements in the Java 9
support, along with a lot of other useful features.

Add and Remove Parentheses Quick Assist
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Use this Quick Assist (Ctrl+1) to add or remove optional 
parentheses around lambda parameters.

image::images/add-remove-parentheses-around-lambda-parameter.png[]

Add Inferred Types Quick Assist
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This Quick Assist (Ctrl+1) will make inferred types of the parameters explicit
in a lambda expression.

image::images/infer-lambda-parameter-types.png[]

Convert From Method Reference to Lambda expression Quick Assist
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This Quick Assist (Ctrl+1) converts a method reference to a lambda expression.

image::images/convert-to-lambda.png[]

In cases where it is possible, it can be used to convert a lambda expression
into a method reference.

image::images/convert-to-method-reference.png[]

New Java editor templates
^^^^^^^^^^^^^^^^^^^^^^^^^
New templates (try_finally, finally, lock) have been added to insert 
commonly occurring patters in concurrent programming:

image::images/new-java-editor-templates.png[]

Recommendations Engine Enabled by Default
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The recommendations engine, which provides content assistance based on common 
usage patterns is now turned on by default, and features new subtype aware 
constructor and types completion.

image::images/call-completion-narrow.png[]

The code recommendations engine bases content assist recommendations on 
common API usage patterns expressed in other code bases.

Constructor Completion
^^^^^^^^^^^^^^^^^^^^^^
The Constructor Completion engine provides you with recommendations for 
constructors that you are likely to use to instantiate objects of a 
particular type.

image::images/constructor-completion.png[]

Override Completion
^^^^^^^^^^^^^^^^^^^
The Override Completion engine provides you with recommendations which 
methods you are most likely to override when triggering code completion 
in the body of class.

image::images/overrides-completion.png[]

More precise flow analysis
^^^^^^^^^^^^^^^^^^^^^^^^^^
Flow analysis, as performed by the compiler to warn the user about 
potential programming problems, has been made smarter. Some examples are:
Leverage knowledge that auto-boxing always produces a non-+null+ value.
Leverage knowledge that certain compiler-generated methods--like 
+valueOf()+ and +values()+ on enum types--provide non-+null+ values.
Various improvements in resource leak analysis.

Improved flow analysis for loops
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Flow analysis has been improved to more precisely capture the flow of 
+null+ values in loops. This mainly achieves a reduction of false 
positive reports from null analysis.

image::images/loop-flows.png[]

Previously, example method "test1" would raise a potential +null+ pointer 
warning at point (3). To correct this issue the merging of information 
leading towards point (3) has been improved to correctly see that the 
+null+ value from point (1) can never reach point (3).

In example method "test2" JDT previously reported a redundant +null+ check 
at (3), because analysis didn't see that the assignment directly above 
could indeed assign a non-+null+ value.

In example method "test3" it was reported that "o can only be +null+" at 
(3), because the information from the two +null+-assignments wrongly 
overruled the one assignment from non-+null+. With improved analysis 
this is now softened to saying "o may be +null+".

The graph on the right hand side illustrates the new composition of 
flow information: for each relevant point (3) inside a loop, the analysis 
first merges the flows that lead into (1). This result is concatenated 
with the partial flow (b.c), which leads from the loop start to point 
(3). Improved precision has thus been achieved within the design limits 
of a single AST traversal in order to minimize impact on compiler performance.

Show skipped tests only in JUnit view
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The JUnit view now has a filter to show only the skipped 
(ignored or assumption failed) tests:

image::images/junit-view-filter-to-show-skipped-tests-only.png[]

Re-run parameterized JUnit tests
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The JUnit view now allows you to re-run groups of parameterized 
tests, or actually any kind of tests that are run by a specialized 
runner and add another level of grouping in the JUnit view.

image::images/junit-rerun-parameterized.png[]

Shortcut for Skip All Breakpoints
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A key binding (Ctrl+Alt+B) has been added as the shortcut for Skip All Breakpoints.

image::images/skip-all-breakpoints.png[]

Add Watchpoint for final variables
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You can now add a Watchpoint for non-constant final variables:

image::images/final-watchpoint.png[]

NOTE: This cannot be implemented for final variables with compile-time 
constant values because Java compiles the constant value into class 
files and leaves no trace of a field access at points where the 
final field is read.

Assigning stdin to a file
^^^^^^^^^^^^^^^^^^^^^^^^^
Stdin can now be assigned to a file in the *Common* tab of launch configuration dialogs.

image::images/stdin-file.png[]

Word wrap in the Console
^^^^^^^^^^^^^^^^^^^^^^^^
A new formatting option has been contributed to the Console view for all 
I/O consoles: Word Wrap.

The new option is available on the Console view toolbar and in the 
content popup menu within the Console view.

image::images/word-wrap.png[]

Improved compiler performance
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Significant performance improvements have been made to the Java 
compiler on generics-heavy code.

Unused exception parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^
A new compiler option to report unused exception parameters in try-catch 
statements has been added. The option is set to Ignore by default.

image::images/unused-exception.png[]

External annotations
^^^^^^^^^^^^^^^^^^^^
Annotation-based null analysis can now leverage externally defined 
annotations that are attached to a library.

Previously, annotation-based null analysis was significantly limited 
by the fact that many 3rd party libraries have no +null+ annotations 
in their API. This implied that any errors caused at this interface 
could not be detected by the analysis, and even worse, implementors 
of library-defined interfaces could not use any intended contracts, 
because any +null+ annotations in overriding methods were flagged as 
incompatible with the super version.

JDT now supports the concept of "external annotations". A user can 
specify +null+ annotations in separate files and attach these to a 
given library. The compiler will take external +null+ annotations into 
consideration for its null analysis.

image::images/external-annotation-configuration.png[]

External annotations can be provided as a directory tree of individual 
text files or as a zip file. External annotations can be attached to a 
JRE (per workspace) and to arbitrary libraries (per project).

More https://wiki.eclipse.org/JDT_Core/Null_Analysis/External_Annotations[information].

Annotate Command
^^^^^^^^^^^^^^^^
A new command Annotate is provided when browsing attached source 
code of a library using the class file editor. Two pre-requisites 
must be met for using this command:

* The project is configured to use annotation-based null analysis.
* An existing workspace folder has been specified as the external 
annotation location for a given library.

Users may select any type in the signature of a library method or
field, and invoke Annotate - either using the context menu, or by 
pressing Ctrl+1. Proposals will be offered for marking the selected 
type as @NonNull or @Nullable. All method parameters, return types 
and field types can be annotated. Additionally when Java 8 is 
used, details like type arguments and type bounds etc. can be 
annotated.

image::images/annotate-map-return.png[]

After selecting a proposal, the compiler will immediately leverage the new annotation for its null analysis.

image::images/map-get-error.png[]

Java 9 Beta
^^^^^^^^^^^
Java(TM) 9 support has not yet landed in our standard download packages.
But you can add an early access preview to your existing Eclipse Mars install.

The Eclipse Java(TM) 9 Support (BETA) contains the following:

* ability to add JRE and JDK 9 as installed JRE
* support for JavaSE-1.9 execution environment
* ability to create Java and Plug-in projects that use a JRE or JDK 9

NOTE: At the moment Eclipse must be run with Java(TM) 9 if you want 
to use Java(TM) 9 in your workspace. You can download from from 
http://www.oracle.com/technetwork/articles/java/ea-jsp-142245.html.

This is an implementation of an early-draft specification developed under 
the Java Community Process (JCP) and is made available for testing and 
evaluation purposes only. The code is not compatible with any specification 
of the JCP.

pass:[<a href="http://marketplace.eclipse.org/marketplace-client-intro?mpc_install=2393593" class="drag" title="Drag to your running Eclipse workspace to install Eclipse Java™ 9 Support (BETA) for Mars"><img src="http://marketplace.eclipse.org/sites/all/themes/solstice/_themes/solstice_marketplace/public/images/btn-install.png" alt="Drag to your running Eclipse workspace to install Eclipse Java™ 9 Support (BETA) for Mars" /></a>]

Install the Java 9 Beta via the Eclipse Marketplace.

Java(TM) EE
~~~~~~~~~~~

Async support option in the New Servlet and Filter wizards
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Selecting this option will generate an annotation with the asyncSupport 
option enabled.

image::images/Servlet_Generation.png[]

EJB 3.x Support
^^^^^^^^^^^^^^^
An asynch support option has been added to the session bean wizard.
A non-persistent support option has been added to the timer callback wizard

Apache Tomcat 8 support
^^^^^^^^^^^^^^^^^^^^^^^
In anticipation of Apache Tomcat 8.0 stable releases becoming available in 
the near future, support has been added to create Apache Tomcat 8.0 runtimes 
and servers. In addition, support for the Serve modules without publishing 
feature is available for this version, but requires Apache Tomcat 8.0.5 or 
later to work correctly.

Generate Web Services targeting Tomcat 8
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Support for generating Web services targeting the Tomcat 8 Server. 

image::images/WebServicesTomcat8.png[]

Validation Filters for HTML Attributes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
HTML validation can now be configured to ignore specific attributes or 
attribute patterns. This can be useful for attributes that are used throughout 
a document but are not defined by the specification. A comma-separated 
list of attribute patterns can be configured at the workspace level under 
*Window > Preferences > Web > HTML Files > Validation*. 

image::images/attribute_patterns.png[]

In addition, quick fixes have been added that will make it easy to add 
attribute patterns to this list. 

image::images/attribute_quick_fix.png[]

Import Declarations for Unresolved Java Types in JSP Editor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The JSP editor can now add import declarations for unresolved types in 
scriptlet regions. Select the unresolved type in the editor and choose 
*Add Import* (Ctrl+Shift+M/Cmd+Shift+M) from the *Source* menu.

Pick Colors from Preview in CSS Editor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
When hovering over a color value in the CSS editor, a preview of the color 
is presented. The Edit Property Color toolbar action will open the system 
color dialog to edit this color. 

image::images/color_picker.png[]

[[general]]
General
~~~~~~~

Preference Recorder
^^^^^^^^^^^^^^^^^^^
The Preferences Recorder enables the user to define preferences that 
they want to have propagated to all of the the workspaces on their machine. 

image::images/preferences-recorder.png[]

Preferences are recorded as they are set; every time a workspace is opened, 
the recorded preferences are checked and updated where necessary.

Automatic Updates by Default
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
With Eclipse Mars, the automatic updates option is turned on by default. 
With this, Eclipse will periodically check with our servers to see if there 
are any updates available and give users the option to download and install 
them.

image::images/automatic-updates.png[]

By default, Eclipse will automatically look for updates every week. This
configuration can be changed on the *Install/Update > Automatic Updates* 
page in the preferences dialog.

Improved Performance for updates
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changes in the compression strategy used for software repositories 
has greatly improved the performance and footprint of updates.

Improvements in the Dark Theme
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Significant work went into improving the fidelity of the the Dark Theme; 
these improvements drove improved support for general styling via CSS, 
and new icons that render much better against the dark background 
(and other colours).

image::images/dark_theme_new_pde.png[]

Nested/Hierarchical view of projects
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Project Explorer now provides the ability to view the projects in a 
hierarchical (a.k.a. nested) form. For modular projects, this allows to 
have your Project Explorer mapping more closely the organization of your 
modules as they are on the file system. This hierarchical view of projects 
often makes easier to navigate modular projects.

Hierarchical view of projects can be triggered from the Project Explorer 
view menu, under the Projects Presentation item.

image::images/nested-projects-menu.png[]

Then it makes the folders that are at the same location as a project 
replaced by the project, and the projects that are nested under other 
projects will not be shown as root elements.

image::images/nested-projects.png[]

Launch Bar
^^^^^^^^^^
The Launch Bar provides convenient fine grained control over launch configurations.
It is a tool bar control that has drop-down selectors for the active *Launch Mode*, 
*Launch Descriptor*, and *Launch Target* and buttons to build, launch, or stop
the launch configuration.

image::images/launch-bar.png[]

The Launch Bar is included the Eclipse IDE for C/C++ Developers package, and
can be added to other packages (e.g. to control Java, PHP, and other
launch configurations).

You an activate or deactivate the Launch Bar via the 
*Run/Debug > Launching > Launch Bar* page in the preferences dialog.

Text search speedup
^^^^^^^^^^^^^^^^^^^
Text search has been sped up by a factor 3x-4x for full workspace searches 
on multi-core machines.

Print button hidden by default
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Print button on the main toolbar is now hidden by default.
The button can be added back to the toolbar via the *Customize Perspective* 
dialog. To open this dialog, right-click on the current perspective button 
and select the *Customize...* menu item.

In the *Tool Bar Visibility* tab, expand *File*, select *Print*, and click *OK*.

Error Reporting
~~~~~~~~~~~~~~~

Automatic Error Reporter
^^^^^^^^^^^^^^^^^^^^^^^^
The Error Reporter sends information about errors that occur in the workbench
to the Eclipse Foundation. This information is relayed to the appropriate
Eclipse project development team.

image::images/error-reporter.png[]

Users don't need to create an account, or provide any identifying information. 
Potentially personal information is obfuscated by default. Use the "Automatic 
Updates" preferences page to tune the update behaviour.

UI responsiveness monitoring
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You can enable automatic detection of periods when the Eclipse user 
interface is unresponsive:

image::images/ui-responsiveness-monitoring.png[]

UI freezes longer than the warning threshold are logged to the Eclipse 
error log as warnings. The logged messages include one or more stack 
traces of the display thread. Longer UI freezes are logged as errors 
and include stack traces of all threads. Please keep in mind that 
capturing stack traces of all threads involves extra overhead, so 
setting the error threshold below 1 second is not recommended.

A UI freeze is logged at the end of the freeze or after the deadlock 
threshold has expired, whichever comes first. The latter condition 
facilitates logging of indefinite UI freezes caused by deadlocks.

Paired with the Error Reporter, the UI Responsiveness Monitor
this helps Eclipse open source software developers identify and 
ultimately fix performance issues and improve the overall user experience.

Platform
~~~~~~~~

Default max heap size increased to 1024 MB
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To improve the "out of the box" user experience on today's modern 
hardware, the default maximum heap size (-Xmx VM argument) has been 
increased from 512M to 1024M. And the initial heap size (-Xms) 
has been increased from 40M to 256M.

[[platform-perspective-customization]]
The Perspective customization dialog, which 
dropped out of the 4.x stream, is back, and a nested/hierarchical view of 
projects is now supported by the Project Explorer. With Mars, all Eclipse 
packages are configured to automatically periodically check for updates; the use of 

GTK3 Support
^^^^^^^^^^^^
For Linux users, GTK3 support is much improved.

Mac OS X distribution now an Application Bundle
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Eclipse packages for OS X are now distributed in a more 
standard "Mac App" format, instead of the "directory format" we have 
used in the past.

CAUTION: Current Mac users cannot update to Mars from a previous
version; doing so will break the installation! Mac users must 
start with a fresh download.

In the event that you updated before reading this, and have ended 
up with a broken installation, see 
https://wiki.eclipse.org/Platform-releng/Issues_related_to_Mac_App_installations[Issues related to Mac App installations]
for the steps to recover your installation, after getting a fresh download.

Team
~~~~

Support git-flow
^^^^^^^^^^^^^^^^
The Git integration tools support http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/[git-flow]
to automate git branching workflow.

Git Project Import Wizard
^^^^^^^^^^^^^^^^^^^^^^^^^
Import projects into the workspace directly from Git or Gerrit.

image::images/git-import.png[]

Git Configuration Java Variable
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Use *git-config* values in your Java templates.

image::images/git-template-var.png[]

CVS Removed from Packages
^^^^^^^^^^^^^^^^^^^^^^^^^
CVS is no longer included with Eclipse packages by default.

You can install CVS support into any Eclipse package via the Eclipse Marketplace.

[[build]]
Build
~~~~~

Gradle Tools
^^^^^^^^^^^^
Tools for importing existing Gradle build scripts as Eclipse projects; 
and building, maintaining, and running Gradle builds can be easily added
to any of the Eclipse Mars packages.

pass:[<a href="http://marketplace.eclipse.org/marketplace-client-intro?mpc_install=2306961" class="drag" title="Drag to your running Eclipse workspace to install Buildship Gradle Integration"><img src="http://marketplace.eclipse.org/sites/all/themes/solstice/_themes/solstice_marketplace/public/images/btn-install.png" alt="Drag to your running Eclipse workspace to install Buildship Gradle Integration" /></a>]

Install Gradle Tools from the Eclipse Marketplace.

Maven Improvements
^^^^^^^^^^^^^^^^^^
Improved Maven support, including support for Maven 3.3.3, improved 
pom editor support, and support for auto-update and auto build. 

New Features
~~~~~~~~~~~~

Docker Tools
^^^^^^^^^^^^
Mars includes new tools for Docker that let the user manage and control 
their Docker images and containers; tools for building Cordova applications; 
and tools for creating, managing and running Gradle builds from within the 
development environment.

image::images/Docker.png[]

Cordova Tools
^^^^^^^^^^^^^
Through Apache Cordova integration, deploy to a variety of devices. You 
can develop using only HTML, CSS, and JavaScript but get access to the native 
device APIs.

image::images/Cordova.png[]

pass:[<a href="http://marketplace.eclipse.org/marketplace-client-intro?mpc_install=2168203" class="drag" title="Drag to your running Eclipse workspace to install Eclipse Thym"><img src="http://marketplace.eclipse.org/sites/all/themes/solstice/_themes/solstice_marketplace/public/images/btn-install.png" alt="Drag to your running Eclipse workspace to install Eclipse Thym" /></a>]

Install Cordova Tools via the Eclipse Marketplace.

Installer
^^^^^^^^^
For the Mars release, we are introducing a new Eclipse installer. This is 
a new more efficient way to install Eclipse. It is a proper installer, so 
no more zip files, with a self extracting download that will lead you through 
the installation experience. For those not into installers, we still have the 
packages and zip files available on our [download] pages.

image::images/InstallerMain.png[]

Please see link:/downloads/installer-instructions.php[6 Steps to Install Eclipse].

The installer's advanced mode is where the real power lies. With advanced 
mode, a user can realize a complete development environment including all 
the Eclipse plug-ins they need, and a fully provisioned workspace that 
includes source code from Git repositories, tasks from issue trackers, 
and a target environment for builds. With this, a developer can provision 
a complete development environment and be ready to start compiling, running, 
and testing in just a few minutes. 

The current implementation supports the 
creation of environments that get developers started to work on building 
contributions for Eclipse open source projects, as well as a handful of 
other open source projects. Tools are provided by the
http://www.eclipse.org/oomph[Oomph project] to 
assist with the creation of configurations for other environments. 

Sources
^^^^^^^
Content for this document were harvested from multiple sources, including:

* https://www.eclipse.org/eclipse/news/4.5/M7/[Eclipse Project New and Noteworthy]; and
* https://www.eclipse.org/webtools/releases/3.6.0/NewAndNoteworthy/[Eclipse Web Tools New and Noteworthy].