Jump to: navigation, search

EMF Compare/Contributor Guide

< EMF Compare
Revision as of 10:31, 21 January 2013 by Mikael.barbero.obeo.fr (Talk | contribs) (Developing a new feature)

EMF Compare
Mailing List
Create New
Browse Source


  • Java
EMF Compare is built against Java 1.5. Though it is compatible with later versions and will thus run flawlessly on 1.6 and 1.7 virtual machines, development should make use of 1.5 APIs and avoid any reference to more recent code so as to prevent compilation errors.
  • Eclipse
Developing on EMF Compare requires the use of Eclipse 3.5 (Galileo) at least, though it is possible to use the latest releases as well.
It can be obtained through the Eclipse download page. The easiest way to set up your environment is to download the Eclipse Modeling Tools bundle since it will already contain most of our dependencies, except for Guava.
All of the following can be obtained through the simultaneous release's update site. From the Eclipse you've installed, use the Help > Install New Software... menu. In the dialog that pops up, locate the update site of your release (it should be labelled Eclipse <name of release> Repository). The list that loads below will contain the necessary projects that you just have to install.
We'll go through how to obtain them separately.
  • Guava
EMF Compare depends on version 10 of google's Guava library. It can be installed from the Orbit update site. Do note that EMF Compare is not compatible with version 11 or higher of Guava.
  • EMF
EMF Compare heavily relies on EMF and requires version 2.5 at least. We recommend using the SDK so as to have access to the sources as well.
Get it from the EMF downloads page.

Checking out the code

The code of EMF Compare is located on a git repository. You can check it out with the command :

git clone git://git.eclipse.org/gitroot/emfcompare/org.eclipse.emf.compare.git

The repository contains three folders at its root :

  • org.eclipse.emf.compare-parent is a non-code plugin which serves as the location of our parent pom. It otherwise contains our target platforms and code style. You will need this plugin in your workspace whatever you work on as it holds the checkstyle configuration of our plugins (see Checkstyle below).
  • packaging contains all of our features as well as the project's update site.
  • plugins contains the actual plugins of EMF Compare. More on these below.

The plugins can be further divided in a number of "sets". Depending on what you are planning to do, you might not need to import all of these sets. All of our plugins' name are prefixed with org.eclipse.emf.compare. For the sake of brevity, this prefix will be abbreviated to o.e.e.c in the following.

EMF Compare Core

The core is the bare minimum you need to call for EMF Compare to compare your models. It is meant to be useable in a standalone application and has no adherence whatsoever to the Eclipse platform.

  • org.eclipse.emf.compare is the only plugin of this "set".

Likewise, all of its unit tests are standalone, though they have a wider range of dependencies (most notably, UML2 and emfstore).

  • o.e.e.c.tests

EMF Compare UI

The user interface of EMF Compare is fully integrated within the Eclipse IDE. It is comprised of the following plugins :

  • o.e.e.c.edit
  • o.e.e.c.ide
  • o.e.e.c.ide.ui
  • o.e.e.c.rcp.ui

The unit tests of the EMF Compare user interface require SWTBot :

  • o.e.e.c.ide.tests
  • o.e.e.c.ide.ui.tests

UML2 Integration

EMF Compare offers a customized comparison engine for UML models and their specificities. This extension is made of the following plugins :

  • o.e.e.c.uml2
  • o.e.e.c.uml2.edit
  • o.e.e.c.uml2.ide
  • o.e.e.c.uml2.ide.ui
  • o.e.e.c.uml2.tests

GMF Diagrams Comparison

EMF Compare offers a specific customization for GMF models and the graphical display of differences. This extension is implemented within these plugins.

  • o.e.e.c.diagram
  • o.e.e.c.diagram.edit
  • o.e.e.c.diagram.ide
  • o.e.e.c.diagram.ide.ui
  • o.e.e.c.diagram.ui.tests

Specific extensions for some modelers are also available :


  • o.e.e.c.diagram.ide.papyrus
  • o.e.e.c.diagram.ide.ui.papyrus
  • o.e.e.c.diagram.ide.ui.papyrus.tests


  • o.e.e.c.diagram.ide.ecoretools
  • o.e.e.c.diagram.ide.ui.ecoretools
  • o.e.e.c.diagram.ecoretools.tests
  • o.e.e.c.diagram.ide.ecoretools.tests

Developing EMF Compare patches or code

Developing a new feature

When a new feature is to be developed, it should be announced to the community with the following messages:

  • Open a feature enhancement bug on the bugzilla describing the new feature.
  • Create a specification page on the wiki following the provided template. A link to the bugzilla should be added to this page and a reference to this page should be added in a comment of the bugzilla. The name of the wikipage should be EMF_Compare/Specification/DescribingTitle
  • Announce that the development has started for this feature on the developers mailling list and provide a link to the previously created bugzilla and the specification wiki page.

When the feature is completed, the community should be told:

  • Add a comment to the bugzilla with a reference to the commit(s) and/or gerrit review(s) in which the feature has been implemented, completed.
  • Close the bug.
  • Mark the specification as ACCEPTED until the documentation has been updated and mark it as ARCHIVED once done.


Every new feature or major change should be documented in a short specification, the template is available here


The EMF Compare team uses Checkstyle with its own set of rules in order to have an homogeneous code style throughout the plugins and features.

The Eclipse plugin for Checkstyle can be downloaded on sourceforge. EMF Compare makes use of Checkstyle 5.*. Once installed, it will be automatically applied to all existing EMF Compare plugins as they are already configured to use it.

You need to have the org.eclipse.emf.compare-parent plugin in your workspace.

New projects should use the same set of rules :

  1. Right-click on the project on which to configure Checkstyle and select "Properties",
  2. In the "Checkstyle" category, go to the "Local Checkstyle configuration" tab,
  3. Hit "New" and select "project-relative configuration" from the "type" drop down menu. Set the name of this configuration as you see fit ("EMF Compare" for example) and click the "Open..." button for the localisation.
  4. Browse to "org.eclipse.emf.compare-parent/codeStyle" and select EMFCompareCheckstyle5Configuration.xml. Hit "Ok" twice to end this wizard.
  5. Go back to the "General" tab, then tick "Activate Checkstyle on this project"
  6. In the drop-down below, select the configuration you just created, then click OK to close the properties dialog.
  7. That's it. Your project will now go through the EMF Compare Chekstyle rules on each compilation.

Note that Checkstyle errors are not considered fatal compilation errors : you can still run code with checkstyle errors. Nearly each of EMF Compare check is set to report an error though, as we always try and comply to these rules.

Code Formatting

Note that all EMF Compare plugins are already configured to make use of this formatter.

At first, most of the checkstyle errors that will be reported will probably be formatting errors. You can configure your formatter to use the EMF Compare configuration to avoid these.

  1. Click on Window > Preferences,
  2. Browse to the Java > Code Style > Formatter category and click on the "Import" button,
  3. Browse to the "<workspace path>/org.eclipse.emf.compare-parent/codeStyle" directory and select "EMFCompareformatter.xml",
  4. Hit Ok twice to close the preferences dialog.

Your formatter will now comply to EMF Compare code style. Hitting ctrl+shift+F in a java editor will format your class to follow this style.


This has been mentionned in the Environment section, but double check that you use the JDK 5 APIs. EMF Compare is built against Java 5 and will show compilation errors if using later APIs.

Target Platform

EMF Compare is downward compatible with Eclipse Galileo (3.5). Target platforms for Galileo (Eclipse 3.5), Helios (Eclipse 3.6), Indigo (Eclipse 3.7), Juno (Eclipse 4.2) and Kepler (Eclipse 4.3) are provided within the org.eclipse.emf.compare-parent plugin.

The target platform can be set through the preference page accessible via Window => Preferences => Plug-in Development => Target Platform. More information on how to set a target platform for development can be found in the Eclipse help.

API Tooling

The EMF Compare development team uses the target platform augmented with the latest stable EMF Compare build to maintain API compatibility. Checks for API breakages and evolutions are set per project and committed alongside them.


We keep the project plan up to date thanks to bugzilla queries. Be sure to specify the version on which the bug occurred and the target milestone you are planning to close that bug.

PENDING: more info about components/version/milestones...


[PENDING] git www ...