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

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="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>]


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 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++]
~~~~~~~~~~~~

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.

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="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>]

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.

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="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>]

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/M7/[Eclipse Project New and Noteworthy];
* https://www.eclipse.org/webtools/releases/3.6.0/NewAndNoteworthy/[Eclipse Web Tools New and Noteworthy]; and
* https://www.eclipse.org/ecf/NewAndNoteworthy_3.10.0.html[ECF New and Noteworthy].