EMF Compare/Contributor Guide
- 1 Environment
- 2 Checking out the code
- 3 Building the code
- 4 Developing EMF Compare patches or code
- 5 Website
- 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.
- 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.
- 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 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 :
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.
Building the code
Go the the org.eclipse.emf.compare-parent folder and just do a
mvn clean package
If you would like to import projects in your workspace and let Eclipse build it, you will also find several $.target$ in this project to configure your target platform. We recommend you use the one you are primarily targeting to install EMF Compare. If you don't know what is a Target Platform, we suggest you to read this description and the documentation of the target definition file edtitor.
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).
EMF Compare UI
The user interface of EMF Compare is fully integrated within the Eclipse IDE. It is comprised of the following plugins :
The unit tests of the EMF Compare user interface require SWTBot :
EMF Compare offers a customized comparison engine for UML models and their specificities. This extension is made of the following plugins :
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.
Specific extensions for some modelers are also available :
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
- 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 :
- Right-click on the project on which to configure Checkstyle and select "Properties",
- In the "Checkstyle" category, go to the "Local Checkstyle configuration" tab,
- 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.
- Browse to "org.eclipse.emf.compare-parent/codeStyle" and select EMFCompareCheckstyle5Configuration.xml. Hit "Ok" twice to end this wizard.
- Go back to the "General" tab, then tick "Activate Checkstyle on this project"
- In the drop-down below, select the configuration you just created, then click OK to close the properties dialog.
- 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.
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.
- Click on Window > Preferences,
- Browse to the Java > Code Style > Formatter category and click on the "Import" button,
- Browse to the "<workspace path>/org.eclipse.emf.compare-parent/codeStyle" directory and select "EMFCompareformatter.xml",
- 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.
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.
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 ...