//////////////////////////////////////////
* 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
//////////////////////////////////////////

:jeePackageUrl: https://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/marsr
:cdtPackageUrl: https://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/marsr
:pdtPackageUrl: https://www.eclipse.org/downloads/packages/eclipse-php-developers/marsr

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 8
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.

Install the Java 9 Beta via the Eclipse Marketplace:

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="https://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>]


Java(TM) EE
~~~~~~~~~~~
Java EE support is provided by the {jeePackageUrl}[Eclipse IDE for Java EE Developers].

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 on the 
*Web > HTML Files > Validation* preference page. 

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[]

C/pass:[C++]
~~~~~~~~~~~~
pass:[C/C++] support is provided by the {cdtPackageUrl}[Eclipse IDE for pass:[C/C++] Developers].

C/pass:[C++] Stand-alone Debugger as separate package
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The C/pass:[C++] Stand-alone Debugger is now available in the form of a separate, 
lightweight download in addition to being also part of the complete 
*Eclipse IDE for C/pass:[C++] Developers* package. Once extracted, it can be 
started by launching the *cdtdebug* executable. This new package can be 
obtained from the https://www.eclipse.org/cdt/downloads.php[CDT downloads] page.

Docker Support
^^^^^^^^^^^^^^
Use the *Run As > C/pass:[C++] Container Application* or *Debug As > C/pass:[C++] Container Application*
menu items to launch your C/pass:[C++] application in a Docker container.

image::images/Containerdebug.png[]

Options for Format with Empty Selection
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The *Format* command (Ctrl+Shift+F) in C/pass:[C++] editor can now be configured to format either 
the whole file or the current statement when no code is selected.

image::images/C_Editor_Preference_Page.png[]

Project-less Execution
^^^^^^^^^^^^^^^^^^^^^^
Specify any C/pass:[C++] program on the file system in a Run configuration and CDT will execute it.

image::images/CDT_ProjectLessRun.png[]

Import Existing Autotools Project
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
An import wizard has been added for importing an existing *Autotools* project into a 
C/pass:[C++] Autotools project. 

Exited Processes Shown in the Debug View
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Debug view now keeps displaying exited processes, and displays the exit code.

image::images/CDT_ExitedProcessRestart.png[]

Menu to add Expression Group
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
With Mars, C/pass:[C++] Developers can create an Expression Group for all registers or one for all variables. 

image::images/CDT_ExpressionGroupMenu.png[]

Alignment specifiers
^^^^^^^^^^^^^^^^^^^^
The parser now supports alignment specifiers ('alignas' in pass:[C++] and '_Alignas' in C):

Arduino pass:[C++] Support
^^^^^^^^^^^^^^^^^^^^^^^^^^
The Arduino pass:[C++] support that will use the toolchains and SDKs and libraries from the 
standard Arduino IDE and let developers create C\+\+ projects that use them.

Add persistent information storage
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Multicore Visualizer was enhanced to permit easy persistence of information. 
The information is saved in the workspace, and can be global for any instance of 
the view or saved per view.

PHP
~~~
PHP is provided by the {pdtPackageUrl}[Eclipse for PHP Developers]
package, or can be added to your Eclipse installation via the Eclipse Marketplace:

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

phpdoc Improvements
^^^^^^^^^^^^^^^^^^^
Added support for phpdoc +@method+ static.

image::images/400px-Pdt35_method_static.png[]

Improved Task-focused UI Support
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Task-focused UI (Mylyn) is able to track interest in methods and functions:

image::images/500px-Pdt35_mylyn.png[]

This integration is enabled by default in *Eclipse for PHP Developers* package.

PHP Model in Project Explorer
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The *Project Explorer* view now provides a drill-down into the structure of the
PHP source code:

image::images/300px-Pdt35_project_explorer.png[]

PHP Editor Improvements
^^^^^^^^^^^^^^^^^^^^^^^
Syntax coloring for visibility keywords:

image::images/300px-Pdt35_colors.png[]

PHP Debugging Improvements
^^^^^^^^^^^^^^^^^^^^^^^^^^
Highlighting for changed variables/objects:

image::images/300px-Highlighting.png[]

Improved look & feel while debugging:

image::images/400px-Pdt35_debugging.png[]

General
~~~~~~~

Preference Recorder
^^^^^^^^^^^^^^^^^^^
The Preference 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.

You can enable/disable the Preference Recorder via the *Oomph > Preference Recorder*
preference page.

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 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[]

Preference 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*. 

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/pass:[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 *Install/Update > 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.

You can configure the UI Responsiveness Monitor via the *General > UI Responsiveness*
page in the preferences dialog.

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.

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:

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

[[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.

Install Gradle Tools from the Eclipse Marketplace:

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="https://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>]

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

Gerrit Connector Improvements
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Gerrit connector has improved handling for links to individual files on 
a review. When a link is clicked, the corresponding patch set will be expanded 
in the review editor and the patch set contents will be downloaded. If the 
patch set has already been downloaded, the compare editor will open.

Gerrit 2.10 and 2.11 are now supported. Support for versions earlier than 2.9 has been removed.

Hide Succeeding Hudson/Jenkins Build Plans
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The builds view allows you to hide suceeding build plans so you can focus on failures.

image::images/builds.png[]

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

Docker Tools
^^^^^^^^^^^^
Mars includes new tools for Docker that let the user manage and control 
their Docker images and containers.

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[]

Install Cordova Tools via the Eclipse Marketplace:

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="https://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>]

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. 

Remote Services Tooling Perspective
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Remote Services Tooling supports development, debugging, and deployment of 
http://www.eclipse.org/ecf[ECF] Remote Services. The new Remote Service perspective
shows the new Endpoint Discovery view dynamically updates to display Endpoints 
that have been discovered via network discovery (i.e. using ECF-supported network 
protocols like zeroconf, slp, zookeeper, dnssd, etcd, or custom). 

image::images/remoteserviceperspective2.png[]

Discovered Endpoints can be Imported into Eclipse, locally registering a proxy 
for the remote service that allows application code to actually use the remote 
service (i.e. call its methods). 

More
~~~~

GEF4
^^^^
https://wiki.eclipse.org/GEF/GEF4[GEF4] is the next generation API of the Graphical 
Editing Framework (GEF). The GEF project team has been working hard on it for 5 years 
now (in parallel to maintaining the current production components Draw2d 3.x, 
GEF (MVC) 3.x, and Zest 1.x), and with Mars has released a first snapshot (with still 
provisional API), together with a minor release of the currently available 
production components. 

OSGi R6 Remote Service and Remote Service Admin (1.1) Specifications
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Eclipse Mars includes fully-compliant implementations of the *OSGi R6 
https://wiki.eclipse.org/ECF#OSGi_Remote_Services[Remote Service] and 
https://wiki.eclipse.org/Remote_Services_Admin[Remote Service Admin] (1.1)* specifications.

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

* https://www.eclipse.org/eclipse/news/4.5/[Eclipse Project New and Noteworthy];
* https://www.eclipse.org/webtools/releases/3.6.0/NewAndNoteworthy/[Eclipse Web Tools New and Noteworthy]; 
* https://wiki.eclipse.org/PDT/NewIn35[PHP Development Tools New and Noteworthy];
* https://www.eclipse.org/mylyn/new/[Mylyn New and Noteworthy]; and
* https://www.eclipse.org/ecf/NewAndNoteworthy_3.10.0.html[ECF New and Noteworthy].