h1. Release Notes for Sirius

{toc:style=disc|minLevel=2|maxLevel=3} 

This document contains the release notes for recent major releases of Sirius. See also "the release notes from previous versions":Release_Notes_Previous.html for details about older releases.

h2(#sirius4.1.0). Changes in Sirius 4.1.0

h3. Requirements

Sirius 4.1.0 only supports Eclipse Mars (4.5) and later. In addition, to be fully functional it requires:
* AQL version 5.0.2 (or later), available at "http://download.eclipse.org/acceleo/updates/releases/3.6/R201610060831/":http://download.eclipse.org/acceleo/updates/releases/3.6/R201610060831/
* EEF 1.7.0  (or later), available at "http://download.eclipse.org/modeling/emft/eef/updates/releases/1.7/R20161005043727":http://download.eclipse.org/modeling/emft/eef/updates/releases/1.7/R20161005043727.

h3. User-Visible Changes

* <span class="label label-success">Added</span> Copy/Paste Layout has been completed with Copy/Paste Style and Copy/Paste Format. _Paste Format_ is equivalent to paste _Layout_ and _Style_ action. See chapter "_Copy/paste of format_":./user/diagrams/Diagrams.html#copy_paste_format in _User Manual_ for more details.
* <span class="label label-success">Added</span> The "snap to shape":./user/diagrams/Diagrams.html#snap_to_shapes feature is now available on border nodes.
* <span class="label label-success">Added</span> It is now possible to display an attachment link between an edge and its labels when label or edge is selected. This is not the default behavior but it can be activated by a preference in _Sirius/Sirius Diagram/Connections_ preference page. See chapter "_Display attachment link between edge and its labels_":./user/diagrams/Diagrams.html#edge_label_attachment in _User Manual_ for more details.
* <span class="label label-success">Added</span> It is now possible to straighten an edge to top, bottom, left or right. These actions are available on edge contextual menu _Layout/Straighten_. See chapter "_Straighten an edge_":./user/diagrams/Diagrams.html#straighten_an_edge in _User Manual_ for more details.
* <span class="label label-success">Added</span> It is now possible to disable the _Default_ and _Semantic_ properties tabs (visible when selecting and element from the _Model Explorer_ or from a Sirius editor, respectively) when using modelers which provide fully-functional replacements defined directly with Sirius. This is controled in the new _Sirius > Sirius Properties View_ preference page.
* <span class="label label-success">Added</span> Sirius-defined properties view are now enabled for semantic elements selected directly from inside the _Model Explorer_ (as long as the selected element is from inside an open Sirius session/project). Previously only elements selected from inside a Sirius editor were supported.
* <span class="label label-info">Modified</span> In the Sirius-provided _Properties View_, the edition of a text field is only taken into account when pressing _Enter_ or leaving the field. Previously it was triggered asynchronously after a small delay without activity, which could be confusing.
* <span class="label label-info">Modified</span> When trying to open a session which holds a representation resource or a VSP which was saved using a more recent version of Sirius than the one you are using, the session will be automatically closed displaying an error message. You can overload this behavior by providing you own implementation of @UICallBack@ in which you can have an UI feedback letting you choose if you want to open the session anyway. Warning: if you choose to proceed, there is no guarantee that the resulting session will be usable. It may even lead to data loss or corruption; use at your own risk.
If a viewpoint  has been defined with a more recent version of Sirius than the one you are using, the @ViewpointRegistry@ will not register it and a warning is logged in the error log view to inform the user.
* <span class="label label-info">Modified</span> The "move edge group":./user/diagrams/Diagrams.html#move_edge_group feature now also work for a selection of edge group.
* <span class="label label-info">Modified</span> In a diagram editor, the zoom with mouse wheel is now zooming on mouse location instead of center of the editor. See "user documentation":./user/diagrams/Diagrams.html#zooming_diagram_id .
* <span class="label label-info">Modified</span> The direct edit on a Note or Text is now accessible by a slow double click like any other diagram element.
* <span class="label label-info">Modified</span> The shortcut _Ctrl+&_, for "_Reset Origin_":./user/diagrams/Diagrams.html#reset_origin action, has been replaced by _Ctrl+HOME_.

h3. Specifier-Visible Changes

* <span class="label label-success">Added</span> It is now possible to inline a copy of the default Properties Views model inside the VSM. This is a copy of the model Sirius would use if no _Properties View Description_ was specified. It can be used as a starting point for manual customization, or as a complement for elements for which you do not provide any custom rules. 
* <span class="label label-success">Added</span> In the definition of the Properties view, hyperlink and label widgets can now have widget actions.
* <span class="label label-success">Added</span> Hyperlink and label widgets now have a @displayExpression@, if blank the result of the value expression will be used after a call to the method @java.lang.Object#toString()@.
* <span class="label label-success">Added</span> Hyperlink and label widgets now support optional associated actions (visible as buttons on the right of the widget).
* <span class="label label-success">Added</span> A new widget named List with the same behavior as the multiple reference widget.
* <span class="label label-success">Added</span> _Page_ and _Group_ descriptions in _Properties View_ models now support a @preconditionExpression@, which behaves in the same way as preconditions for mappings on representation descriptions.
* <span class="label label-info">Modified</span> The rules concerning the layout of compartments have been changed/completed. You can have a look at the "dedicated chapter":specifier/diagrams/Diagrams.html#compartments_layout in the specifier documentation for more details.
<span class="label label-info">Modified</span> In the VSM editor, all dialogs which ask for selecting elements from the VSM will now show the fully qualified path of each element, instead of just their name, to allow distinguishing elements with the same name appearing in different places.
* <span class="label label-info">Modified</span> The properties @fontSize@ and @labelFontSize@ have been renamed into @fontSizeExpression@ and @labelFontSizeExpression@ since both of them were already treated as expression.
<span class="label label-info">Modified</span> In the VSM editor, the _Identifier_ attribute of many _Prroperties View_ related elements has been moved into the _Advanced_ tab and renamed _Extension Id_, as it is not actually required on common use cases but only for extensibility purposes.  
* <span class="label label-info">Modified</span> The property @Domain Class Expression@ in @DynamicMappingFor@ elements (in properties views definitions) has been renamed into @Iterable Expression@.
* <span class="label label-info">Modified</span> The _Properties View_ widget which was named _Reference_ in Sirius 4.0 has been renamed as _List_, as it corresponds to an arbitrary list of elements with customizable buttons for acting on them. A new _Reference_ widget was added for handling plain _EReference_ edition with minimal configuration needed.
* <span class="label label-info">Modified</span> When opening a VSM, the editor now automatically expands the first few levels to immediatly reveal the interesting elements (representation descriptions).
* <span class="label label-warning">Deprecated</span> The extension point @org.eclipse.sirius.diagram.ui.layoutDataManager@ is deprecated. It is replaced by the new extension point @org.eclipse.sirius.diagram.ui.formatDataManager@. The deprecated extension point will be removed in the next 5.0 Sirius major release. Several classes associated with this deprecated extension point are also deprecated (see Developer-Visible Changes for details).

h3. Developer-Visible Changes

* <span class="label label-success">Added</span> As the first step to save the DRepresentation in its own resource, @org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()@ has been added as a wrapper of the @DRepresentation@. The @DRepresentationDescriptor@ is contained by the @DView@ and the @DRepresentationDescriptor@ have a reference to the @DRepresentation@. In this step, the main impact is that the Sirius common navigator does not display the @DRepresentation@ anymore but the @DRepresentationDescriptor@ instead. All the actions and commands are then based on @DRepresentationDescriptor@.
* <span class="label label-success">Added</span> As the second step to save the DRepresentation in its own resource, @org.eclipse.sirius.viewpoint.DView.getOwnedRepresentations()@ has been removed. The @DRepresentation@ is now created as root element of the representations resource. The main impact is on the core of Sirius but also potentially on client Sirius customization. Each peace of code that makes the supposition that the @DView@ is the container of the @DRepresentation@ must be reworked. The code using methods in the following list may be concerned by the rework:
** @EObject.eContainer()@. If the object is a @DRepresentation@, its container is now null.
** @EcoreUtil.getRootContainer(xxx)@. The root container of a DDiagramElement is the @DRepresentation@ and not the @DAnalysis@ any more.
** @EcoreUtil.isAncestor(xxx)@. the @DView@ is not an ancestor of a @DRepresentation@ (or its content) anymore.
* <span class="label label-success">Added</span> As a developer, the followings utility methods will help you to migrate your code following the second step described above:
** @org.eclipse.sirius.business.api.query.DViewQuery.getLoadedRepresentations()@ replaces the removed @DView.getOwnedRepresentations()@ method. It provides all the loaded representations holds by a @DView@. In this step, all that representations are always loaded as they are into the .aird resource.
** @org.eclipse.sirius.business.api.query.DViewQuery.getAllContentInRepresentations(final Predicate<? super EObject>)@ provides the content of a @DView@ according to a predicate.
** @org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()@ provides the @DRepresentationDescriptor@ which references the @DRepresentation@.
** @org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()@ allows to retrieve a DAnalysis from a @DRepresentationElement@

h4. Changes in @org.eclipse.sirius@

* <span class="label label-success">Added</span> A new extension point named @org.eclipse.sirius.interpretedExpressionQueryProvider@ (with the associated new interface @org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQueryProvider@) allows external contribution of @IInterpretedExpressionQuery@ specific to some particular expression occurrences in the VSM. This is used in particular for VSM extensions which do not fit well into the hard-coded assumptions about @IInterpretedExpressionQuery@. In Sirius 4.1, this is used to add completion and validation support for expressions used in properties views descriptions.
* <span class="label label-success">Added</span> @org.eclipse.sirius.business.api.migration.AirdResourceVersionMismatchException@ exception has been added to cancel Sirius session opening due to an .aird version mismatch, i.e. when one the of the loaded Representation resources is coming from a newer Sirius release.
* <span class="label label-success">Added</span> @org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()@ has been added as the first step to save the DRepresentation in its own resource. In this step, the DRepresentationDescriptor life cycle is the same as the associated DRepresentation.
** @org.eclipse.sirius.business.api.dialect.command.RenameRepresentationCommand@
** @org.eclipse.sirius.business.api.dialect.command.DeleteRepresentationCommand@
** @org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand@
** @org.eclipse.sirius.business.api.dialect.command.CopyRepresentationCommand@
* <span class="label label-success">Added</span> @getAvailableRepresentationDescriptions(Collection<Viewpoint>, EObject)@, @getAllRepresentationDescriptors(Session )@, @getRepresentationDescriptors(EObject, Session)@ and @getRepresentationDescriptors(RepresentationDescription, Session )@ have been added in @org.eclipse.sirius.business.api.dialect.DialectServices@ and implemented in @org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices@. These methods are used, instead of their equivalent with DRepresentation, for every functionality which relies on @DRepresentationDescriptor@ instead of @DRepresentation@ such as actions, wizards or views.
* <span class="label label-success">Added</span> @org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isSupported(DRepresentationDescriptor)@ has been added because actions, wizards or views that were related to @DRepresentation@ are now related to @DRepresentationDescriptor@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.canHandle(DRepresentationDescriptor)@ has been added because actions, wizards or views that were related to @DRepresentation@ are now related to @DRepresentationDescriptor@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.ui.business.api.dialect.DialectUIManager.canExport(DRepresentationDescriptor, ExportFormat)@ has been added because actions, wizards or views that were related to @DRepresentation@ are now related to @DRepresentationDescriptor@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()@ has been added to retrieve the @DRepresentationDescriptor@ that references the @DRepresentation@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR_FROM_DESCRIPTION@ and @org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR@ have been added. They are used to get or put @DRepresentationDescriptor@ in the model managed by the @Session@ through the @org.eclipse.sirius.business.api.session.SessionService.putCustomData(String, EObject, EObject)@ and @SessionService.getCustomData(String, EObject)@ methods.
* <span class="label label-success">Added</span> @org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()@ has been added to retrieve a DAnalysis from a @DRepresentationElement@
* <span class="label label-info">Modified</span> @org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)@ has been changed to @findDViewForRepresentationDescription(DAnalysis , final RepresentationDescription)@ because that API was previously badly defined.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.business.api.dialect.DialectServices.deleteRepresentation(DRepresentation, Session)@ has been changed to @deleteRepresentation(DRepresentationDescriptor, Session)@ because now the @DRepresentationDescriptor@ is the entry point to delete the @DRepresentation@ and itself.
* <span class="label label-info">Modified</span> @DRepresentationDescriptor@ is now the entry point to move, control or uncontrol a @DRepresentation@ instead of the @DRepresentation@ itself. Accordingly, the return type or parameter of the followings have changed to switch from @DRepresentation@ to @DRepresentationDescriptor@
** constructors of @org.eclipse.sirius.business.api.control.SiriusControlCommand@
** the constructor @org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand.MoveRepresentationCommand(Session, DAnalysis, Collection<DRepresentationDescriptor>)@
** the method @org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.moveRepresentation(DAnalysis, DRepresentationDescriptor)@
* <span class="label label-info">Modified</span> @org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.updateModelsReferences(DView)@ has replaced @updateModelsReferences(DAnalysis, Iterator<DSemanticDecorator>)@ because it is more suited to the client needs.

h4. Changes in @org.eclipse.sirius.ui@

* <span class="label label-info">Added</span> The class @org.eclipse.sirius.ui.business.api.dialect.HierarchyLabelProvider@ has been added to provide a generic label provider for VSM model element giving hierarchical label. This label provider replaces the one returned by deprecated method @DialectUIServices.getHierarchyLabelProvider()@. 
* <span class="label label-info">Modified</span> @AbstractSWTCallback@ provides a default implementation of @UICallBack.askSessionReopeningWithResourceVersionMismatch()@ method to give feedback about version mismatch and give the choice to reopen session despite a potential corruption.
* <span class="label label-info">Modified</span> The method @org.eclipse.sirius.ui.tools.api.control.SiriusControlHandler.getRepresentationsToMove(Shell, Session, EObject)@ and @SiriusControlHandler.collectExistingRepresentations@ have been renamed to @getRepresentationDescriptorsToMove(Shell, Session, EObject)@ and @SiriusControlHandler.collectExistingRepresentationDescriptors@. The return type of both that methods and @SiriusControlHandler.askUserWhichRepresentationToSplit@ has been changed to @DRepresentationDescriptor@ as @DRepresentationDescriptor@ is the entry point to work with a @DRepresentation@ instead of DRepresentation itself.
* <span class="label label-warning">Deprecated</span> The method @org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.getHierarchyLabelProvider()@ has been deprecated in favor of generic label provider @HierarchyLabelProvider@.

h4. Changes in @org.eclipse.sirius.diagram@

* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.allowsCopyPasteFormat(DSemanticDecorator)@ has been added in replacement of @allowsCopyPasteLayout(DSemanticDecorator)@ that is now deprecated. This 2 methods must return the same result. @allowsCopyPasteLayout(DSemanticDecorator)@ will be removed in the new major version.

h4. Changes in @org.eclipse.sirius.diagram.ui@

* <span class="label label-success">Added</span> The constant @EDGE_SNAP_BACK@ has been added in class @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds@. It corresponds to the new snap back label action id that is present on edges.
* <span class="label label-success">Added</span> 2 methods are added in @org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager@ (and also in @org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager@):
** @applyFormat(IGraphicalEditPart)@: Apply the current format data (layout data and style data) to the given edit part.
** @applyStyle(IGraphicalEditPart)@: Apply the current style data to the give edit part.
* <span class="label label-success">Added</span> 2 methods are added in @org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor@:
** @createCopyFormatContribution(IDiagramWorkbenchPart)@: In replacement of @createCopyLayoutContribution(IDiagramWorkbenchPart)@ that is now deprecated.
** @createPasteFormatContribution(IDiagramWorkbenchPart)@: In replacement of @createPasteLayoutContribution(IDiagramWorkbenchPart)@ that is now deprecated.
* <span class="label label-success">Added</span> New action ids have been added in @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds@:
** @COPY_FORMAT@: Action contribution id for the copy format. It replaces the old @COPY_LAYOUT@.
** @PASTE_FORMAT@: Action contribution id for the paste format. It does not replace the old @PASTE_LAYOUT@. The paste format paste the layout and the style. The paste layout only paste layout.
** @PASTE_STYLE@: Action contribution id for the paste style.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery.isDescendantOf(View)@ has been added to know if a view is a descendant of another view.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.getAncestor(int...)@ has been added to retrieve the first ancestor of the view, or itself, that has at least one of the visualID passed as parameter.
* <span class="label label-success">Added</span> The new preference key @PREF_SHOW_LINK_EDGE_LABEL_ON_SELECTION@ has been added in @org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys@. It corresponds to the preference shown in _Sirius/Sirius Diagram/Connections_ Eclipse preferences.
* <span class="label label-success">Added</span> The new figure @org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabelWithAttachment@ is a specific @SiriusWrapLabel@ that allows to show an attachment between the label and its edge.
* <span class="label label-success">Added</span> A new kind of request, @org.eclipse.sirius.diagram.ui.tools.api.requests.StraightenToRequest@, has been added to handle the new _Straighten to_ actions. The corresponding id has also been added: @org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants.REQ_STRAIGHTEN@.
* <span class="label label-success">Added</span> 4 action ids have been added in @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds@:
** @STRAIGHTEN_TO_TOP@: For _Straighten to top_ action,
** @STRAIGHTEN_TO_BOTTOM@: For _Straighten to bottom_ action,
** @STRAIGHTEN_TO_LEFT@: For _Straighten to left_ action,
** @STRAIGHTEN_TO_RIGHT@: For _Straighten to right_ action.
* Constants have been added in @org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath@ for the icon path of the four new straighten actions.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager@ is deprecated, use @org.eclipse.sirius.diagram.ui.tools.api.format.AbstractSiriusFormatDataManager@ instead.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.layout.ILayoutDataManagerProvider@ is deprecated, use @org.eclipse.sirius.diagram.ui.tools.api.format.IFormatDataManagerProvider@ instead.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataHelper@ is deprecated, use @org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataHelper@ instead.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataKey@ is deprecated, use @org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataKey@ instead.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager@ is deprecated, use @org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager@ instead.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManagerForSemanticElementsFactory@ is deprecated, use @org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerForSemanticElementsFactory@ instead.
* <span class="label label-info">Moved</span> The translation key @HierarchyLabelProvider_elementWihtoutNameLabel@ has been removed from the @org.eclipse.sirius.diagram.ui@ plug-in's @Messages@ class, and moved into the @org.eclipse.sirius.ui@'s @Messages@ class.  

h4. Changes in @org.eclipse.sirius.ext.gmf.runtime@

* <span class="label label-success">Added</span> The class @SiriusSnapFeedbackPolicy@ has been copied from @org.eclipse.sirius.ext.gef.editpolicies@ to @org.eclipse.sirius.ext.gmf.runtime.editpolicies@. The old class in plug-in @org.eclipse.sirius.ext.gef@ is deprecated and will be removed in the next version.

h4. Changes in @org.eclipse.sirius.tests.junit.support@

* <span class="label label-success">Added</span> The utility methods @getRepresentationDescriptors(final String)@, @getRepresentationDescriptors(final String , final Session )@ and @getRepresentationDescriptorFromRepresentation(DRepresentation)@ have been added in class @org.eclipse.sirius.tests.support.api.SiriusTestCase@ to adapt tests considering the @DView.ownedRepresentationDescriptors@ addition.

h4. Changes in @org.eclipse.sirius.tests.swtbot.support@

* <span class="label label-success">Added</span> The utility method @mouseScrollWithKey(int, int, int, int)@, has been added in classes @org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor@, @org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer@ and @org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas@ to allow testing events occurring after a mouse scroll combined to a keyboard key pressed at a given absolute position.

h4. Changes in @org.eclipse.sirius.properties@

* <span class="label label-info">Modified</span> The property @domainClassExpression@ has been renamed into @iterableExpression@.
* <span class="label label-info">Modified</span> The properties @fontSize@ and @labelFontSize@ have been renamed into @fontSizeExpression@ and @labelFontSizeExpression@ since both of them were already treated as expression.

h4. Changes in @org.eclipse.sirius.ui.properties@

* <span class="label label-success">Added</span> Four utility classes have been added as API in the package @org.eclipse.sirius.ui.properties.api@ in order to help with the transformation of the description of custom widgets. The class @AbstractDescriptionConverter@ can now be used as superclass for all the converters. The classes @DefautDescriptionConverter@, @DefautStyleDescriptionConverter@ and @DefautDescriptionWithInitialOperationConverter@, now accessible, should handle most of the use cases. 

h4. Changes in @org.eclipse.sirius.ecore.extender@

* <span class="label label-info">Modified</span> The message @org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException.PERMISSION_ISSUE_MESSAGE@ has been modified. You should now use the @MessageFormat@. Example: @LockedInstanceException.PERMISSION_ISSUE_MESSAGE + getText(lockedElements)@ must be replaced by @MessageFormat.format(LockedInstanceException.PERMISSION_ISSUE_MESSAGE, getText(lockedElements))@.
* <span class="label label-info">Modified</span> The @org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessorsRegistry@ has been refactored to avoid problem with @ModelAccessor@ lifecycle. The constructor has no longer a parameter.

h2(#sirius4.0.0). Changes in Sirius 4.0.0

h3. User-Visible Changes

* <span class="label label-success">Added</span> The user can now filter elements according to a Typed variable (String, Integer, EEnum or any EDataType). If a user applies a filter containing Typed Variables, a dialog is displayed to allow user entering the Typed Variable values. That values can be used as variables in the Condition Expression of the Variable Filter.
* <span class="label label-success">Added</span> When the diagram is larger than the editor, you can move it in all directions pressing the middle-button and dragging the mouse (keeping the button pressed).
* <span class="label label-info">Modified</span> Now if an object is locked and cannot be modified according to @IPermissionAuthority@, the properties view will not be editable if this locked object is selected from the Model Explorer view.
* <span class="label label-info">Modified</span> When trying to reconnect an edge end on another edge, the edge is now highlighted only if a reconnect tool is found (the precondition of the tool is not tested here).
* <span class="label label-info">Modified</span> List items now have the same margin whichever their parent is a simple list or a compartmentalized list. The margin in compartmentalized list was incorrectly set to 0 pixel.
* <span class="label label-info">Modified</span> The wizard to ask the new representation name has been changed. These concerns the title of the wizard and the input label. Example with a new Entities diagram for EcoreTools:
!images/representationNameWizardChange.png!
* <span class="label label-info">Modified</span> The export of diagram as image handles the gradient color for container background for BMP, JPG, PNG and SVG formats. Before, it only works for JPG format.
* <span class="label label-info">Modified</span> The <img src="images/ApplyAppearanceProperties.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> @Apply Appearance Properties@ action has been modified to use the last selected element as base style instead of the first one.

h3. Specifier-Visible Changes

* <span class="label label-success">Added</span> Sirius 4.0 introduces *experimental*  support for specifying the properties views of your modelers directly from inside the VSM. This feature uses the same dynamic approach as for specifying  diagrams, tables and trees, with a very flexible configuration language and no code generation involved (including live preview of any change). As of Sirius 4.0, this feature should be considered in an experimental  state with details subject to changes until Sirius 4.1, and is not installed by default. To install it, make sure either "the Eclipse Neon repositry":http://download.eclipse.org/releases/neon or the "Sirius 4.0":http://download.eclipse.org/sirius/updates/releases/4.0.0/neon and "EEF 1.6":http://download.eclipse.org/modeling/emft/eef/updates/releases/1.6.0 repositories are available, and then to install the following features (from in the _Modeling_ category of Neon, or _Sirius Experimental Features_ of the Sirius repository ):
** _Sirius Properties Views - Runtime Support_ (@org.eclipse.sirius.properties.feature.feature.group@): needed at runtime for deployed modelers which have properties views defined in their specification.
** _Sirius Properties Views - Specifier Support_ (@org.eclipse.sirius.specifier.properties.feature.feature.group@): provides support for editing the configuration model directly inside the VSM editor and the specifier documentation.
Once this is done, you can find the actual documentation in the _Sirius Specifier Manual_, under the "_Properties View_":/help/topic/org.eclipse.sirius.editor.properties/doc/specifier/Properties_View_Description.html section.
* <span class="label label-success">Added</span> All static strings defined in the VSMs which are visible to the end-user of the modeler, like viewpoint and tools names, can now be internationalized. Simply replace the name with a translation key reference of the form @%myUniqueKey@  in the VSM, and define the value in the _Viewpoint Specification Project_'s @plugin.properties@ (for the default value), or @plugin_XX.properties@ for locale @XX@. The underlying mechanism is the same as for Eclipse/OSGi plug-ins, so translations can even be contributed by physically separate plug-in fragments. See "the corresponding section":specifier/general/Specifying_Viewpoints.html#translatable_messages in the documentation for more details.
* <span class="label label-success">Added</span> It is possible to create "Typed Variable":specifier/diagrams/Diagrams.html#filter_with_typed_variable under Variable Filter.
* <span class="label label-success">Added</span> A new class @org.eclipse.sirius.ext.emf.edit.EditingDomainServices@ (from plug-in @org.eclipse.sirius.ext.emf.edit@) has been added with a complete set of service methods to leverage most of the features of the "EMF Edit" framework, for example the various _Item Providers_ associated to semantic elements. See "the documentation":specifier/general/Writing_Queries.html#editing_domain_services for details.  
* <span class="label label-success">Added</span> The specifier can now restrict the border node authorized sides. This new option is available in the advanced tab of the border node style. See the "specifier documentation":specifier/diagrams/Diagrams.html#authorizedsides for more details.
* <span class="label label-info">Modified</span> The use of type literals in operations like @filter()@ or @oclIsKindOf()@ requires to explicitly add the domain meta-models plug-ins to the dependencies of the _Viewpoint Specification Project_. The documentation has been modified to recommend this.
* <span class="label label-info">Modified</span> *Warning*: Before this version, a style customization of an @EEnum@ attribute, like @labelFormat@, worked with a value expression using a Java service returning a @EEnumLiteral@. It is now forbidden. You must return an @Enumerator@. The documentation about "Styles Customization":specifier/diagrams/Diagrams.html#enum_customization now details this case.
* <span class="label label-info">Modified</span> The @BorderSizeComputationExpression@ migration has been corrected to recursively handle the sub container mappings. VSM created or migrated with Sirius 3.1.0, 3.1.1 or 3.1.2 might require a manual modification for the style descriptions of sub container mappings with border size computation equals to 0 as we cannot determine if they were added (or updated) after or before the migration: starting with Sirius 3.1.0, no border will be displayed for a 0 pixel value whereas with older version container always had at least a 1 pixel border.
* <span class="label label-info">Modified</span> The variable under VariableFilter, previously named "Variable", is renamed to "Select Model Element Variable". It is functionally equivalent.

h3. Developer-Visible Changes

* <span class="label label-success">Added</span> It is now possible to provide a full customized tab-bar by implementing the @ITabbarContributor@ through the @org.eclipse.sirius.diagram.ui.tabbarContributor@ extension-point. See the "developer documentation":developer/extensions-provide_tabbar_extensions.html#contributeFullTabbar for more details.
* <span class="label label-success">Added</span> It is now possible to provide new shapes for basic shape styles through the @org.eclipse.sirius.diagram.bundledImageShape@ extension-point. See the "developer documentation":developer/extensions-provide_custom_bundled_image_shape.html for more details.

h4. Changes in @org.eclipse.sirius@

* <span class="label label-success">Added</span> The method @org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getStatus()@ has been added to have the status about session opening, i.e. if it has been correctly opened, cancelled or an exception has occurred. 
* <span class="label label-success">Added</span> A new variant of @org.eclipse.sirius.business.api.helper.task.TaskHelper.buildTaskFromModelOperation(EObject, ModelOperation)@ has been added, which does not require to specify a @DRepresentation@ in the context. It allows the creation of a task which executes a behavior specified by @ModelOperations@ outside of the context of a specific representation, provided the @ModelOperations@ work in that context.
* <span class="label label-success">Added</span> @org.eclipse.sirius.viewpoint.description.TypedVariable@ has been created.
* <span class="label label-success">Added</span> @org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription@ has been created as tag interface for variables that require user interaction to be valued.
* <span class="label label-success">Added</span> @org.eclipse.sirius.tools.api.command.ui.UICallBack.askForTypedVariable(List<TypedVariable>, List<String>)@ has been created.
* <span class="label label-success">Added</span> @org.eclipse.sirius.tools.api.command.ui.NoUICallback.askForTypedVariable(List<TypedVariable>, List<String>)@ has been created.
* <span class="label label-success">Added</span> @org.eclipse.sirius.business.api.dialect.DialectServices.getRequiredViewpoints(DRepresentation)@ has been added to have mean to get required viewpoints to use a representation.
* <span class="label label-success">Added</span> @org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.getRequiredViewpoints(DRepresentation)@ has been added to have a default implementation of @DialectServices.getRequiredViewpoints(DRepresentation)@ method.
* <span class="label label-success">Added</span> @org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isRelatedViewpointSelected(Session, RepresentationDescription)@ protected method has been added to check if a @RepresentationDescription@ is usable in the context of the specified session.
* <span class="label label-success">Added</span> @org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String, String)@ method has been added to replace the deprecated @org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String)@. This method now uses the description name as title for the wizard. This new method has been implemented by @org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback@ and @org.eclipse.sirius.tools.api.command.ui.NoUICallback@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.loadAndOpenRepresentationsFile(URI, boolean)@ has been added to specify if job used to open a session must be considered as launched by the user or not, because by default with @ModelingProjectManager.loadAndOpenRepresentationsFile(URI)@ the job was not considered as launched by the user.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable@ now implements @org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.viewpoint.description.tool.AbstractVariable@ has been moved to @org.eclipse.sirius.viewpoint.description.AbstractVariable@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.viewpoint.description.tool.SubVariable@ has been moved to @org.eclipse.sirius.viewpoint.description.SubVariable@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()@ methods no more update workspace resource about markers, now this must be done in caller on IllegalArgumentException catch in a workspace aware operation.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.canExecute()@ now returns false if a @DRepresentation@ cannot be refreshed, by calling @DialectManager.canRefresh(DRepresentation)@.
* <span class="label label-info">Modified</span> Several methods of @org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper@ now return a @fr.obeo.dsl.viewpoint.DView@ instead of a @fr.obeo.dsl.viewpoint.DRepresentationContainer@:  
** @findContainer(EObject, Viewpoint, Collection<DAnalysis>, DAnalysisSelector)@,
** @findContainerForAddedRepresentation(EObject, Viewpoint, Collection<DAnalysis>, DAnalysisSelector, DRepresentation)@,
** @findContainerForAddedRepresentation(DAnalysis, DRepresentation)@, @findFreeContainer(Viewpoint, Collection<DAnalysis>, DAnalysisSelector)@
** @findFreeContainer(Viewpoint, Collection<DAnalysis>, DAnalysisSelector)@.
* <span class="label label-danger">Removed</span> The @org.eclipse.sirius.viewpoint.DRepresentationContainer@ EClass have been removed. It used to be the only implementation of @org.eclipse.sirius.viewpoint.DView@, the @models@ derived transient reference has been moved to @DView@. An automatic migration has been added during the loading of the representation to handle this change.
* <span class="label label-danger">Removed</span> The class @org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2@ has been deleted and is now @MetamodelDescriptorProvider@. 

h4. Changes in @org.eclipse.sirius.common@

* <span class="label label-success">Added</span> A method @getInferredVariableTypes(Boolean value)@ in @org.eclipse.sirius.common.tools.api.interpreter.ValidationResult@ so that @IInterpreter@ implementations able to infer more specific types based on predicates result provides this information to Sirius which will then use it for validating other expressions. You might want to look at @org.eclipse.sirius.common.acceleo.aql.business.internal.AQLSiriusInterpreter@ which is an implementation providing this type inference.
* <span class="label label-success">Added</span> A helper @org.eclipse.sirius.common.tools.api.util.MessageTranslator@ providing @getMessage(EObject, String)@ and @getMessage(Bundle, String)@ service dedicated into processing a translatable message to return the translation in the active language when available. This service returns the String without modification if not translatable or no translation is available.
* <span class="label label-success">Added</span> The "INFO" severity has been added to @org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus@ to reflect all kind of language validation severity (of AQL for example).

h4. Changes in @org.eclipse.sirius.diagram@

* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.VariableValue@, @org.eclipse.sirius.diagram.TypedVariableValue@ and @org.eclipse.sirius.diagram.EObjectVariableValue@ has been created.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()@ has been created to indicate that variables have to be computed again.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.description.style.Side@ EEnum has been added to define a border node side on the parent.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.description.style.NodeStyleDescription#forbiddenSides@ attribute has been added to set the border node forbidden sides on the parent.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.business.api.query.DNodeQuery.getForbiddenSide()@ has been added to retrieve the forbidden sides of a DNode (make sense only for Border Nodes).
* <span class="label label-info">Modified</span> The type of @org.eclipse.sirius.diagram.description.filter.VariableFilter.ownedVariable@ has been changed to @org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription@.
* <span class="label label-info">Modified</span> The type of @org.eclipse.sirius.diagram.FilterVariableHistory.ownedValues@ has been changed to @org.eclipse.sirius.diagram.VariableValue@.
* <span class="label label-info">Modified</span> The return type of @org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.findRepresentationContainer(DDiagram)@ has been changed from @org.eclipse.sirius.viewpoint.DRepresentationContainer@ to @org.eclipse.sirius.viewpoint.DView@.
* <span class="label label-danger">Removed</span> @org.eclipse.sirius.diagram.description.filter.FilterVariable@ has been removed. It is replaced by @org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable@.
* <span class="label label-danger">Removed</span> @org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.setFilterContext()@ has been removed. This method was, in part, useless and is replaced by @org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()@.

h4. Changes in @org.eclipse.sirius.ui@

* <span class="label label-success">Added</span> @org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.askForTypedVariable(List<TypedVariable>, List<String>)@ has been created.
* <span class="label label-success">Added</span> The new internationalizable label @Messages_createRepresentationInputDialog_DefaultRepresentationDescName@ has been added (available through @org.eclipse.sirius.ui.tools.api.Messages.createRepresentationInputDialog_DefaultRepresentationDescName@. Its value is "Representation".
* <span class="label label-info">Modified</span> The internationalizable label @Messages_createRepresentationInputDialog_NewRepresentationNameLabel@ has been replaced by "Name:" (previous value was "Representation name:"). 
* <span class="label label-info">Modified</span> The internationalizable label @Messages_createRepresentationInputDialog_RepresentationDescriptionLabel@ has been replaced by "Representation description: {0}" (previous value was "Representation description: "). 
* <span class="label label-info">Modified</span> The internationalizable label @Messages_createRepresentationInputDialog_Title@ has been replaced by "New {0}" (previous value was "New Representation").
* <span class="label label-danger">Removed</span> The internationalizable label @org.eclipse.sirius.viewpoint.provider.Messages.OpenRepresentationsFileJob_initModelingProjectsTask@ has been removed as this message is no more used.
* <span class="label label-danger">Removed</span> The class @org.eclipse.sirius.ui.business.api.editor.SpecificSessionManager@ has been removed. 

h4. Changes in @org.eclipse.sirius.diagram.ui@

* <span class="label label-success">Added</span> A new system property named @org.eclipse.sirius.diagram.ui.svg.maxCacheSizeMB@ has been added. It can be used to tweak the maximum size (in megabytes) of pre-rendered SVG images to keep in cache. The default is 50, corresponding to 50MB of bitmaps of 4 8-bit channels. Increasing the limit can improve performance when using diagrams with a lot of SVG images, at the cost of increased memory usage.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.ITabbarContributor@ interface has been added to provide a customized tab-bar for a specific selection.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor@ is an abstract implementation of @ITabbarContributor@ that allows reusing one or several of the default Sirius contribution items.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.editor.properties.sections.style.bundledimagedescription.BundledImageDescriptionShapePropertySectionSpec@ has been added to have a custom display in the VSM for provided basic shape.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramBorderNodeEditPart.createNodeFigure()@ has been created to factorize the @DNode2EditPart@ and @DNode4EditPart@ constructors.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.setForbiddenSides(int...)@ has been added to set the figure forbidden sides on its parent.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.getAuthorizedSides()@ has been added to retrieve the figure authorized side (by default all sides).
* <span class="label label-success">Added</span> The following protected methods have been added to @org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure@ : @String getKey(Graphics)@, @Image getImage(Rectangle, Graphics)@, @static boolean doRemoveFromCache(String)@.
* <span class="label label-success">Added</span> 2 methods are added in @org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService@ to manage gradient color in export to PNG or SVG formats: @DiagramEditPartService.saveSVGToFile(IPath, SiriusDiagramSVGGenerator, IProgressMonitor)@ and @org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.saveToFile(IPath, SiriusDiagramSVGGenerator, ImageFileFormat, IProgressMonitor)@. These 2 methods are copy of parent methods with @SiriusDiagramSVGGenerator@ as parameter instead of a @DiagramSVGGenerator@.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getGradientPaintFromValue(int, int, int, int, Color, Color)@ has been added to handle a cache for @java.awt.GradientPaint@ as it is the case for @org.eclipse.swt.graphics.Pattern@ with @getPatternFromValue()@.
* <span class="label label-success">Added</span> Methods have been added in @org.eclipse.sirius.diagram.ui.tools.api.figure.GradientHelper@ to handle @java.awt.GradientPaint@ as @org.eclipse.swt.graphics.Pattern@: @getGradientPaintDiag(Rectangle, Color, Color)@, @getGradientPaintLeftToRight(Rectangle, Color, Color)@, @getGradientPaintTopToBottom(Rectangle, Color, Color)@ and @getGradientPaint(int, Rectangle, Color, Color)@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ACTION_SIRIUS_COPY_APPEARANCE_PROPERTIES@ has been added to identify the new _Sirius Copy Appearence Properties_ action.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.figure.BundleImageFigure@ now overrides the method @setBorder(Border border)@. It also provides the accessors for the new field @mainBorderSize@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.figure.BundledImageFigure@ now inherits directly from @SVGFigure@ instead of @AbstractCachedSVGFigure@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure@  now inherits directly from @SVGFigure@ instead of @AbstractCachedSVGFigure@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure@ now implements interfaces @StyledFigure@, @ITransparentFigure@ and @ImageFigureWithAlpha@.
* <span class="label label-danger">Removed</span> The following mehtods have been removed from @org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure@: @NodeList getNodes(String)@, @Color getColor(Element, String)@, @void updateRenderingHints(Graphics)@, @staticImage toSWT(Device, BufferedImage)@, @boolean checkContentAvailable()@, @Rectangle2D getAreaOfInterest()@, @void setAreaOfInterest(Rectangle2D)@, @boolean isSpecifyCanvasWidth()@, @void setSpecifyCanvasWidth(boolean)@, @boolean isSpecifyCanvasHeight()@, @void setSpecifyCanvasHeight(boolean)@, @boolean getSpecifyCanvasWidth()@, @boolean getSpecifyCanvasHeight()@.
* <span class="label label-danger">Removed</span> The class @org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure@ has been removed. Its functionality was merged directly into @SVGFigure@.
* <span class="label label-danger">Removed</span> The static @org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure.createImageFigure(ContainerStyle)@ method has been removed; it was broken and not called anywhere.

h4. Changes in @org.eclipse.sirius.ext.emf.ui@

* <span class="label label-info">Modified</span> @org.eclipse.sirius.ext.emf.ui.properties.ExtensiblePropertySource.collector@ field is now in protected visibility to be modifiable and accessible by subclass.

h4. Changes in @org.eclipse.sirius.ext.gmf.runtime@

* <span class="label label-success">Added</span> The interface @org.eclipse.sirius.ext.gmf.runtime.diagram.ui.tools.MoveInDiagramDragTracker@ has been added to declare states used by all DragTrackers which manage move in diagram using mouse middle click.

h4. Changes in @org.eclipse.sirius.ui@

* <span class="label label-success">Added</span> @org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertyDescriptor@ has been added to provide a specific @ExtensiblePropertyDescriptor@ which test @IPermissionAuthority@ to make properties view editable or not.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource@ has been modified to use @SiriusExtensiblePropertyDescriptor@ to provide not editable properties view when the object, selected from the Model Explorer view, cannot be modified.
* <span class="label label-danger">Removed</span> The @org.eclipse.sirius.ui@, and thus the whole @org.eclipse.sirius.runtime@ feature no longer depends on the JDT (technically the dependency towards @org.eclipse.jdt.core@ has been removed). If you need the JDT Core in your environment, you will need to add the dependency explicitly.  The Sirius specification environment (@org.eclipse.sirius.editor@) still depends on PDE (and thus indirectly the JDT too).

h4. Changes in @org.eclipse.sirius.tests.junit.support@

* <span class="label label-success">Added</span> The class @org.eclipse.sirius.tests.support.api.DefaultTestMemento@ has been created. It help to simulate a real @IMemento@ for editor restoration.
* <span class="label label-success">Added</span> The method @SiriusTestCase.initViewpoint(String, Session, boolean)@ has been added to allow viewpoint activation without creating representations.
* <span class="label label-warning">Deprecated</span> The method @SiriusTestCase.initViewpoint(String, Session, EObject)@ has been deprecated because the last parameter is useless to activate a viewpoint.
* <span class="label label-success">Added</span> The methods @initLoggers()@ and @disposeLoggers()@ of class @org.eclipse.sirius.tests.support.api.SiriusTestCase@ have now a protected visibility (instead of private) to allow subclasses to use this logger without all the @genericSetUp@ behavior.

h4. Changes in @org.eclipse.sirius.tests.swtbot.support@

* <span class="label label-success">Added</span> The method @getTreeItem(final SWTBotTreeItem[], final String)@ has been added in @org.eclipse.sirius.tests.swtbot.support.utils@ to retrieve recursively a @SWTBotTreeItem@ in a @SWTBotTreeItem@ array.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.tests.swtbot.support.api.condition.ShellChangedCondition@ has been added to wait until the current active shell has changed.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.tests.swtbot.support.api.condition.TreeItemWithImageCondition@ has been added to wait until the given treeItem has the expected image.
* <span class="label label-info">Modified</span> A second @String@ parameter has been added to the method @org.eclipse.sirius.tests.swtbot.support.api.business.UILocalSession.newDiagramRepresentation(String, String)@. This parameter is the label of the representation description. It is necessary since the change of the wizard to ask the new representation name (see User-Visible Changes for detail).
* <span class="label label-info">Modified</span> A third @String@ parameter has been added to the constructor of @org.eclipse.sirius.tests.swtbot.support.api.business.UINewRepresentationBuilder@ for the same above reasons.
 
h4. Changes in @org.eclipse.sirius.common.xtext@

* <span class="label label-info">Modified</span> The dependency from  @org.eclipse.sirius.common.xtext@ to the JDT plug-in @org.eclipse.jdt.core@ is now optional. If you need the JDT Core in your environment, you will need to add the dependency explicitly.  The Sirius specification environment (@org.eclipse.sirius.editor@) still depends on PDE (and thus indirectly the JDT too).


h2(#sirius3.1.0). Changes in Sirius 3.1.0

h3. User-Visible Changes

* <span class="label label-success">Added</span> A new feature allows to snap to all shapes (instead of just to snap to sibling shapes). The <kdb>F4</kdb> shortcut key activates this mode when you resize a node, move a node or move a bendpoint of an edge, see "the documentation":./user/diagrams/Diagrams.html#snap_to_shapes for details.
* <span class="label label-success">Added</span> A new feature allows to move the edge group (Edge, Label, Border Nodes) if the <kdb>F3</kdb> shortcut is pressed during the edge moving/dragging. This feature is only available for the case of edges with border node as source and target. See "documentation":./user/diagrams/Diagrams.html#move_edge_group for more details.
* <span class="label label-success">Added</span> The label of edges now stays as much as possible near the edge when it is moved.
Sample before Sirius 3.1:
!images/edgeLabelMoveBeforeSirius3.1.gif! 
Same sample since Sirius 3.1:
!images/edgeLabelMoveAfterSirius3.1.gif!
* <span class="label label-success">Added</span> It is now possible to collapse compartments using the handle visible on the following illustrations. The handle's position varies depending on the label alignment to avoid overlapping (depending on the list elements alignment for a list with an hidden label).
!images/compartments_collapse.png! 
!images/compartments_collapse2.png!
* <span class="label label-info">Modified</span> The _Snap to Grid_ and _Snap to Shapes_ features are now automatically disabled on Sequence diagrams. As indicated "in the user documentation":./user/sequences/Sequence%20Diagrams.html#introduction, to work correctly, Sirius sequence diagrams must have a tight control on where the graphical elements are placed on the diagram and on their synchronization with the underlying semantic model. Previously, the user had to explicitely disable the snap features.
* <span class="label label-info">Modified</span> The _Link with Editor_ behavior has changed. The link with editor was previously unidirectional from the Common Navigator (Model Explorer view or Project view) toward the active representation. Now, when selecting one or several elements in the representation, the corresponding semantic elements are selected in the Common Navigator.
* <span class="label label-info">Modified</span> The _Arrange Linked Bordered Nodes_ tabbar action has been renamed to _Arrange Linked Border Nodes_ as it is border nodes which are layouted and not bordered nodes.

h3. Specifier-Visible Changes

* <span class="label label-info">Modified</span> The _Acceleo Query Language_ (AQL) interpreter  has been improved. AQL, and its support in Sirius, is no longer considered experimental, and instead is now the recommended query language to use for new VSMs. Improvements mostly concern better completion and validation, and more precise error reporting. In particular AQL expressions will now be able to display warnings and errors in the Interpreter view. The message displayed in the Interpreter view after an evaluation has also been improved to display the qualified name of the type of the value computed (@ePackageName::eClassName@). The improvements realized can be viewed by clicking on the image below (click to zoom).
!images/improvedsiriusinterpreter_thumbnail.png!:images/improvedsiriusinterpreter.png
* <span class="label label-info">Modified</span> Related to the previous point, the projects created by the _Viewpoint Specification Project_ wizard are now configured to use AQL by default (instead of Acceleo 3/MTL before). They depend on @org.eclipse.sirius.common.acceleo.aql@ instead of @org.eclipse.sirius.common.acceleo.mtl@, and do not have the Acceleo nature anymore (it is not needed by AQL). If you want to use another language in your queries, make sure you set the appropriate dependencies so that the Sirius support for that language will be present at runtime to interpret the queries.
* <span class="label label-info">Modified</span> The support for containers with vertical or horizontal _compartments_ on diagrams was introduced in Sirius 3.0.0 as an experimental feature. Several improvements and corrections have been done around the behaviors of this feature which is no longer considered experimental. Validation rules and tooltips in the VSM editor are here to help the specifier create a consistent mapping structure.
* <span class="label label-info">Modified</span> <span class="label label-info">Experimental</span> New, experimental support for recursive _compartments_ on diagrams: the _children presentation_ property of a _Container Mapping_, which is defined as a _compartment_ (its parent _ContainerMapping_ has a _VerticalStack_ or _HorizontalStack_ _children presentation_), can now also be set to _Vertical Stack_ and _Horizontal Stack_. It allows to define complex stacks of _compartments_ mixing both stack directions. While working reliably, this support is marked experimental in Sirius 3.1.0 as there are still some behaviors which do not behave as expected. If you make use of this feature, be aware that some details may still change in future releases, including 3.1.x maintenance releases.
* <span class="label label-info">Modified</span> You now really  have the capability to set the @BorderSizeComputationExpression@ as 0 for style of @ContainerMapping@. Before Sirius 3.1.0, a size of 0 was interpreted as 1 at runtime. For compatibility reason, all existing @BorderSizeComputationExpression@ equals to 0 for style of @ContainerMapping@ are automatically set to 1 (ditto for results of this expression in representations file for container elements). For @ContainerMapping@, the default value of @BorderSizeComputationExpression@ for new style is now 1, except for _Worskpace Image_ where the value is 0.
* <span class="label label-info">Modified</span> The delete command availability computation has been changed. In case of a delete tool, the availability is now computed considering first the precondition of the tool and then the delete authorisation (using @IPermissionAuthority@) of the potential to delete objects. This is the reverse order of what was done before, and can have performance impacts if the precondition is slow. The specifier will to take care to ensure a good performance for the precondition expression of the delete tool.

h3. Developer-Visible Changes

h4. Partial support for internationalization

Sirius 3.1 introduces partial support for internationalization: all literal strings from the runtime part of Sirius are now externalized and can be localized by third parties by providing the appropriate "language packs" as OSGi fragments. Note that this does not concern the VSM editor's UI, the VSMs themselves, or the parts of the UI inherited from Eclipse/EMF/GEF/GMF and other libraries and frameworks used by Sirius.

Some API changes were required to enable this. While technically breaking changes if interpreting strictly the OSGi versioning rules, the major version number of the impacted bundles was not incremented as the changes only concern classes that should not impact the vast majority of users. Most breaking changes concern the plug-in/activator classes from each bundle. They are:
* <span class="label label-success">Added</span>@org.eclipse.sirius.diagram.layoutdata.LayoutDataPlugin@, a subclass of @org.eclipse.emf.common.EMFPlugin@ has been added. The corresponding OSGi bundle activator is the internal class @LayoutDataPlugin.Implementation@.
* <span class="label label-success">Added</span>@org.eclipse.sirius.diagram.sequence.SequenceDiagramPlugin@, a subclass of @org.eclipse.emf.common.EMFPlugin@ has been added. The corresponding OSGi bundle activator is the internal class @SequenceDiagramPlugin.Implementation@.
* <span class="label label-success">Added</span>@org.eclipse.sirius.common.xtext.internal.XtextIntegrationPlugin@, a subclass of @org.eclipse.emf.common.EMFPlugin@ has been added. The corresponding OSGi bundle activator is the internal class @XtextIntegrationPlugin.Implementation@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.ext.base.BasePlugin@, a subclass of @org.eclipse.emf.common.EMFPlugin@ has been added. The corresponding OSGi bundle activator is the internal class @BasePlugin.Implementation@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.ext.draw2d.Draw2DExtPlugin@, a subclass of @org.eclipse.emf.common.EMFPlugin@ has been added. The corresponding OSGi bundle activator is the internal class @Draw2DExtPlugin.Implementation@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.ext.e3.ui.Eclipse3UIExtPlugin@, a subclass of @org.eclipse.emf.common.EMFPlugin@ has been added. The corresponding OSGi bundle activator is the internal class @Eclipse3UIExtPlugin.Implementation@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.ext.emf.EMFExtPlugin@, a subclass of @org.eclipse.emf.common.EMFPlugin@ has been added. The corresponding OSGi bundle activator is the internal class @EMFExtPlugin.Implementation@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.synchronizer.internal.SynchronizerPlugin@, a subclass of @org.eclipse.emf.common.EMFPlugin@ has been added. The corresponding OSGi bundle activator is the internal class @SynchronizerPlugin.Implementation@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.tree.tools.internal.TreePlugin@, a subclass of @org.eclipse.emf.common.EMFPlugin@ has been added. The corresponding OSGi bundle activator is the internal class @TreePlugin.Implementation@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.common.acceleo.mtl.ide.AcceleoMTLInterpreterIDEPlugin@ is no longer an OSGi @BundleActivator@, and instead extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @AcceleoMTLInterpreterIDEPlugin.Implementation@.
* <span class="label label-info">Modified</span>  @org.eclipse.sirius.common.acceleo.mtl.ide.AcceleoMTLInterpreterPlugin@ is no longer an OSGi @BundleActivator@, and instead extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @AcceleoMTLInterpreterPlugin.Implementation@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.common.ocl.DslOclPlugin@ is no longer a @org.eclipse.core.runtime.Plugin@ (nor an OSGi @BundleActivator@), and instead extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @DslOclPlugin.Implementation@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.common.tools.DslCommonPlugin@ is no longer a @org.eclipse.core.runtime.Plugin@ (nor an OSGi @BundleActivator@), and instead extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @DslCommonPlugin.Implementation@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.diagram.DiagramPlugin@ is no longer a @org.eclipse.core.runtime.Plugin@ (nor an OSGi @BundleActivator@), and instead extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @DiagramPlugin.Implementation@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.ecore.extender.business.internal.ExtenderPlugin@ is no longer a @org.eclipse.core.runtime.Plugin@ (nor an OSGi @BundleActivator@), and instead extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @ExtenderPlugin.Implementation@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.table.tools.internal.TablePlugin@ is no longer a @org.eclipse.core.runtime.Plugin@ (nor an OSGi @BundleActivator@), and instead extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @TablePlugin.Implementation@.
* <span class="label label-info">Renamed, Modified</span> @org.eclipse.sirius.eef.adapters.Activator@ has been renamed into @org.eclipse.sirius.eef.adapters.EEFAdapterPlugin@ and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @EEFAdapterPlugin.Implementation@.
* <span class="label label-info">Renamed, Modified</span> @org.eclipse.sirius.common.acceleo.interpreter.Activator@ has been renamed into @org.eclipse.sirius.common.acceleo.interpreter.InterpreterViewPlugin@ and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @InterpreterViewPlugin.Implementation@.
* <span class="label label-info">Renamed, Modified</span> @org.eclipse.sirius.table.ui.ext.Activator@ has been renamed into @org.eclipse.sirius.table.ui.ext.TableUIExtPlugin@ and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @TableUIExtPlugin.Implementation@.
* <span class="label label-info">Renamed, Modified</span> @org.eclipse.sirius.ui.ext.Activator@ has been renamed into @org.eclipse.sirius.ui.ext.SiriusUIExtPlugin@ and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @SiriusUIExtPlugin.Implementation@.
* <span class="label label-info">Renamed, Modified</span> @org.eclipse.sirius.tree.ui.ext.Activator@ has been renamed into @org.eclipse.sirius.tree.ui.ext.TreeUIExtPlugin@ and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends @org.eclipse.emf.common.EMFPlugin@. The actual bundle activator is the new internal class @TreeUIExtPlugin.Implementation@.
* <span class="label label-info">Renamed</span> @org.eclipse.sirius.diagram.sequence.ui.SequenceDiagramPlugin@ has been renamed into @org.eclipse.sirius.diagram.sequence.ui.SequenceDiagramUIPlugin@ for consistency and to avoid potential name clashes with the new @org.eclipse.sirius.diagram.sequence.SequenceDiagramPlugin@.

Additional non-breaking changes:
* <span class="label label-success">Added</span> @org.eclipse.sirius.ext.base.I18N@ has been added. It provides common utility code to support internationalization. 
* <span class="label label-success">Added</span> The translation keys (and default values) have been added to all the concerned bundles, in their @plugin.properties@ file. These (translated) messages are available at runtime as static fields of new @Messages@ classes, added to all concerned bundles (always in the same package as their plug-in/activator class). The concerned bundles are:
** @org.eclipse.sirius@
** @org.eclipse.sirius.ext.base@
** @org.eclipse.sirius.ecore.extender@
** @org.eclipse.sirius.synchronizer@
** @org.eclipse.sirius.common@
** @org.eclipse.sirius.common.acceleo.aql@
** @org.eclipse.sirius.common.acceleo.aql.ide@
** @org.eclipse.sirius.common.acceleo.mtl@
** @org.eclipse.sirius.common.acceleo.mtl.ide@
** @org.eclipse.sirius.common.ui@
** @org.eclipse.sirius.diagram.layoutdata@
** @org.eclipse.sirius.diagram.sequence@
** @org.eclipse.sirius.diagram.sequence.ui@
** @org.eclipse.sirius.diagram@
** @org.eclipse.sirius.diagram.ui@
** @org.eclipse.sirius.eef.adapters@
** @org.eclipse.sirius.interpreter@
** @org.eclipse.sirius.table@
** @org.eclipse.sirius.table.ui@
** @org.eclipse.sirius.tree@
** @org.eclipse.sirius.tree.ui@
** @org.eclipse.sirius.ui@

h4. Changes in @org.eclipse.sirius.common@

* <span class="label label-success">Added</span> The method @invokeMethod@ has been added in class @org.eclipse.sirius.common.tools.api.util.ReflectionHelper@ to call a private method. Warning: This method must be used carefully.
* <span class="label label-success">Added</span> The method @invokeMethodWithoutException@ has been added in class @org.eclipse.sirius.common.tools.api.util.ReflectionHelper@ to call a private method. This method returns true (and not the result of the method) if it is called without exception. It returns false otherwise. Warning: This method must be used carefully.

* <span class="label label-success">Added</span> The new interface @org.eclipse.sirius.common.tools.api.interpreter.IInterpreterWithDiagnostic@ has been added. It allows an interpreter to evaluate an expression and return not only the result of the evaluation but also a diagnostic.
* <span class="label label-success">Added</span> The new class @org.eclipse.sirius.common.tools.api.contentassist.ContentProposalWithReplacement@ has been added. It allows interpreters to provide proposals for the code completion which can replace an existing part of the expression used. This behavior can be used if the user has started to type a value that would be returned by the code completion. For example, if the user types @aql:self.na@ and if he selects the content proposal @name@, it can replace the existing part of the expression @na@ to write @aql:self.name@ instead of just appending @name@ to create @aql:self.naname@.
* <span class="label label-success">Added</span> The new class @org.eclipse.sirius.common.tools.api.contentassist.ContentProposalBuilder@ used to build the content proposals with their various parameters more easily.

h4. Changes in @org.eclipse.sirius@

* <span class="label label-success">Added</span> The method @addEvaluateSelectionExpressionTask@ has been added in class @org.eclipse.sirius.tools.api.command.AbstractCommandFactory@ to allow selection after tool execution.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.common.tools.api.interpreter.StandardServices@ has been added. This class owns methods used for @service:@ interpreter.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2@ has been added and should be preferred instead of implementing @MetamodelDescriptorProvider@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl.addViewpointFileCollector()@ method has been added to replace deprecated @ViewpointRegistryImpl.addSiriusFileCollector()@.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority.canDeleteInstance(EObject)@ when called for an object will not be called for children of this object as we know it will return true because if we can delete a parent object we can delete its children. 
* <span class="label label-info">Modified</span> @org.eclipse.sirius.tools.api.command.DCommand@ no longer inherits from @IUndoableCommand@ since undo/redo is managed by EMF Transaction.
* <span class="label label-warning">Deprecated</span> @org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl.addSiriusFileCollector()@ method has been deprecated as it is about @ViewpointFileCollector@ and not @SiriusFileCollector@.
* <span class="label label-danger">Removed</span> @org.eclipse.sirius.business.api.helper.task.ICommandTask.undo()/redo()@ methods removed because they are useless since undo/redo is managed by EMF Transaction.
* <span class="label label-danger">Removed</span> @org.eclipse.sirius.tools.api.command.IUndoableCommand@ interface removed because it is useless since undo/redo is managed by EMF Transaction.

h4. Changes in @org.eclipse.sirius.ui@

* <span class="label label-success">Added</span> @org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getInput()@ method has been added to get the real input for a @DRepresentation@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getSession(boolean)@ method has been added to let the caller choose to create and open a new @Session@ or not when the known session is closed or does not exist. The @getSession@ method calls getSession(true).
* <span class="label label-success">Added</span> @org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.selectAndReveal(DialectEditor, List<DRepresentationElement>)@ method has been added to explicitly indicate to reveal elements out of the screen (hidden because of the scrollbars location) when selecting them.
* <span class="label label-warning">Deprecated</span>  @org.eclipse.sirius.ui.business.api.session.SessionEditorInput.dispose()@ method has been deprecated as an @IEditorInput@ can be reused by several instances of @IEditorPart@ through the navigation history view.

h4. Changes in @org.eclipse.sirius.diagram.ui@

* <span class="label label-success">Added</span> The class @org.eclipse.sirius.diagram.ui.graphical.edit.policies.RegionRegionContainerResizableEditPolicy@ has been added to handle @DNodeContainer@ which are both @Region@ and @RegionContainer@: during resize they might have to propagate the resize to their children and/or parents.
* <span class="label label-success">Added</span> The constant @org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutUtils.COLLAPSED_VERTICAL_REGION_HEIGHT@ has been added to centralize the minimum height of a collapsed Region from a Region Container with a vertical stack children presentation.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramNodeEditPart/IDiagramBorderNodeEditPart.getNodeLabel()@ methods has been moved up to @org.eclipse.sirius.diagram.ui.edit.api.part.IAbstractDiagramNodeEditPart.getNodeLabel()@ as both @IDiagramNodeEditPart@ and @IDiagramBorderNodeEditPart@ inherits of @IAbstractDiagramNodeEditPart@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES@ added to replace @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES_TOOLBAR@ which is deprecated  
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES_TOOLBAR@ added to replace @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES@ which is deprecated 
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.graphical.edit.policies.SetConnectionBendpointsAndLabelCommmand@ is a new class that allows to update edge label when updating bendpoints. Several existing Sirius commands now extends this new class.
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.tools.api.decorators.AbstractSiriusDecorator.shouldBeVisibleAtPrint()@ method added to leave @AbstractSiriusDecorator@ extenders indicate if decoration should be visible at diagram export/print.
* <span class="label label-warning">Deprecated</span> @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES@ deprecated in favor @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES@ as it is an action id about border nodes layout.
* <span class="label label-warning">Deprecated</span> @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES_TOOLBAR@ deprecated in favor @org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES_TOOLBAR@ as it is an action id about border nodes layout.
* <span class="label label-danger">Removed</span> @org.eclipse.sirius.diagram.ui.graphical.edit.policies.EdgeCreationEditPolicy@ has been removed as it should not be in API and has been replaced by internal @org.eclipse.sirius.diagram.ui.internal.edit.policies.SiriusConnectionEditPolicy@.
* <span class="label label-danger">Removed</span> The method @setUseLocalCoordinates(boolean)@ has been removed from @org.eclipse.sirius.diagram.ui.tools.api.figure.GradientRoundedRectangle@, @org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerParallelogram@, @org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerRectangleFigureDesc@ as it was generated by GMF tooling and never used in Sirius whose edit parts and edit policies expect @org.eclipse.draw2d.IFigure.useLocalCoordinates()@ to always return false for its figures. 

h4. Changes in @org.eclipse.sirius.synchronizer@

* <span class="label label-success">Added</span> @org.eclipse.sirius.synchronizer.CreatedOutput.synchronizeChildren()@ method takes now a @RefreshPlan@ in parameter to have more informations to say if children must be synchronized.

h4. Changes in @org.eclipse.sirius.tests.junit.support@

* <span class="label label-success">Added</span> The class @org.eclipse.sirius.tests.support.api.AbstractToolDescriptionTestCase@ has been created. It contains utility methods about tools.
* <span class="label label-info">Modified</span> The class @org.eclipse.sirius.tests.support.api.SiriusDiagramTestCase@ has been modified 
** <span class="label label-info">Modified</span> It now inherits from @AbstractToolDescriptionTestCase@ 
** <span class="label label-success">Added</span> The method @applyContainerCreationTool(String,DDiagram,EObject)@ has been added.
** <span class="label label-success">Added</span> The method @applyGenericTool(String,DDiagram,EObject)@ has been added.

h4. Changes in @org.eclipse.sirius.tests.swtbot.support@

* <span class="label label-success">Added</span> The methods @closePerspective(String)@,  @closeSiriusPerspective()@ and @closeModelingPerspective()@ have been added in class @org.eclipse.sirius.tests.swtbot.support.api.perspective.DesignerPerspectives@ to allow the closing of perspectives.
* <span class="label label-success">Added</span> The @org.eclipse.sirius.tests.swtbot.support.api.condition.PerspectiveActivatedCondition@ new offers the capability to inverse the test. This condition becomes a DeactivatedCondition instead of an ActivatedCondition by using the new constructor with inverse parameter.
* <span class="label label-success">Added</span> The methods @isSnapToShape@ and @isSnapToGrid()@ have been added in class @org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor@. They allow to know the state of the corresponding properties.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.dragWithKey(int, int, int, int, int)@ (and also @SWTBotSiriusGefViewer.dragWithKey@ and @SWTBotSiriusFigureCanvas.mouseDragWithKey@), has an additional fifth parameter compared to @drag(int, int, int, int)@ method, to indicate the key code to press during the drag'n'drop. It is possible to call this method with @SWT.None@ to obtain the standard behavior of @drag@ method. This method also has a correct behavior for the move of bendpoints of edges.
* <span class="label label-success">Added</span> @org.eclipse.sirius.tests.swtbot.support.api.condition.TopCondition@: New condition to wait that top of the edit part is on the expected location.
* <span class="label label-success">Added</span> @org.eclipse.sirius.tests.swtbot.support.api.condition.BendpointLocationCondition@: New condition to wait that a bendpoint is on the expected x or y location.
* <span class="label label-success">Added</span> @org.eclipse.sirius.tests.swtbot.support.api.condition.TreeChildrenNumberCondition@: New condition to wait that a tree has the expected number of children.
* <span class="label label-success">Added</span> @org.eclipse.sirius.tests.swtbot.support.utils.SWTBotCommonHelper.saveCurrentEditor(Session)@: This new method is preferable to @saveCurrentEditor()@ because there is a wait condition to ensure that the save is finished.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.tests.swtbot.support.api.condition.CheckBoundsCondition@: This condition now also checks the bounds location if the checkWidth or checkHeight (or both) is false.

h4. Changes in @org.eclipse.sirius.ext.gef@

* <span class="label label-success">Added</span> The new class @org.eclipse.sirius.ext.gef.query.EditPartQuery@ has been added. It allows to retrieve all children of the current part.

h4. Changes in @org.eclipse.sirius.ext.jface@

* <span class="label label-success">Added</span> The new class @org.eclipse.sirius.ext.jface.viewers.IToolTipProvider@ has been copied from JFace 3.10 from Luna, so that we can use it with Juno and Kepler too.

h4. Changes in @org.eclipse.sirius.ext.gmf.runtime@

* <span class="label label-success">Added</span> Two new @getIntersection@ methods have been added in @org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper@. They are similar to the existing @getIntersection@ methods, but they consider the nearest point on the figure if there is no intersection.

h2(#sirius3.0.0). Changes in Sirius 3.0.0

h3. User-Visible Changes

* <span class="label label-success">Added</span> The ability to print table representations has been re-introduced.
* <span class="label label-success">Added</span> The quick outline feature has been added for tree and table editors, see documentation for details.
* <span class="label label-success">Added</span> The label of a list or container can now be hidden by the user from the outline, the tabbar or the contextual menu.
* <span class="label label-success">Added</span> In the _Appearance_ tab, in addition to _Bold_ and _Italic_, it is now possible to set the font formatting style to _Underline_ and _Strike through_ (or any combination of these).
* <span class="label label-success">Added</span> Container elements on diagrams now support vertical and horizontal compartments layout (this is only visible if the modeler configuration makes use of this new feature). 
* <span class="label label-success">Added</span> In table and tree editors, a _Refresh_ can now be launched by hitting <kbd>F5</kbd> like in diagrams (previously the only way was to click on the _Refresh_ icon or menu item).
* <span class="label label-success">Added</span> In table editors, hitting the <kdb>Del</kdb> key is now equivalent to selecting _Delete Line_ in the context menu.
* <span class="label label-success">Added</span> On diagrams, it is now possible to set a custom background image on list containers.
* <span class="label label-info">Modified</span> In the _Viewpoint Selection_ dialog and wizard page, the "plug-in" decorator for viewpoints loaded from plug-ins is removed, and a "Folder" decorator for viewpoints loaded from the current workspace has been added. This makes the icons more visible in the most common where viewpoints come from installed plug-ins.

h3. Specifier-Visible Changes

* <span class="label label-success">Added</span> <span class="label label-info">Experimental</span> Optional support for the experimental _Acceleo Query Language_ (AQL) has been added to write interpreted expressions.  It is provided by the @org.eclipse.sirius.common.acceleo.aql@ (required for evaluating the expressions) and @org.eclipse.sirius.common.acceleo.aql.ide@  (optional, only needed to provide specification-time features like expression completion) plug-ins. AQL is similar to Acceleo 3/MTL, but simpler and provides much better performance in the Sirius context. If you make use of this feature, be aware that some details may still change in future releases, including 3.0.x maintenance releases. See <a href="https://www.eclipse.org/acceleo/documentation/aql.html" target="_blank">the AQL documentation</a> for more details on the language itself.
* <span class="label label-success">Added</span> <span class="label label-info">Experimental</span> New, experimental support for containers with vertical or horizontal _compartments_ on diagrams: the _children presentation_ property of a _Container Mapping_ has two new values: _Vertical Stack_ and _Horizontal Stack_. They indicate that a container will present its children containers as a vertical/horizontal stack of compartments. While working reliably, this support is marked experimental in Sirius 3.0.0 as there are still some combinations of mappings, styles and behaviors which do not behave as expected. If you make use of this feature, be aware that some details may still change in future releases, including 3.0.x maintenance releases.
* <span class="label label-success">Added</span> Everywhere an image path can be configured in the VSM, a new button is present on the right of the text field. It opens a dialog to select an image, either from the workspace or from an installed plug-in.
* <span class="label label-success">Added</span> Everywhere an interpreted expression can be configured in the VSM, a new button is present on the right of the text field. It opens a multi-line dialog to edit long expression more easily. Auto-completion is supported inside the multi-line dialog.
* <span class="label label-success">Added</span> Compressed SVG images (@*.svgz@) are now supported everywhere normal SVG images were supported.
* <span class="label label-success">Added</span> When developing a modeler in "live mode", with the VSM in the same workspace as the sample session(s) which use it, VSM expressions which use @service:@ or @aql:@ can now invoke Java services which are defined in the workspace (with no need to launch a separate runtime).
* <span class="label label-success">Added</span> A quick outline is now accessible in the VSM editor by using the shortcut <kbd>Ctrl+o</kbd>. It supports filtering on both an element's name and properties for quick, keyboard-only navigation in complex VSMs.
* <span class="label label-success">Added</span> The "hide label by default capability" has been added to the container styles.
* <span class="label label-success">Added</span> In addition to _Bold_ and _Italic_, _Underline_ and _Strike Through_ styles have been added on the label font format.
* <span class="label label-success">Improved</span> Many VSM elements which are required are now created automatically. For example the default layer of a _Diagram Description_ is automatically added to new _Diagram Descriptions_.
* <span class="label label-success">Improved</span> Some default values have been modified to better reflect actual usage. This does not impact existing VSM and only applies to newly created elements.
** The label position on a _Node_ mapping is now _node_ by default (instead of _border_ before).
** The _Arc Width_ and _Arc Height_ are now 10 by default (instead of 1 before).
** The _Enable popup bars_ is now set by default on new diagrams.
** No default value for interpreted expressions use the Acceleo 3 / MTL syntax anymore, but only use the core @var:@ and @feature:@ interpreters, which are always present.
* <span class="label label-success">Improved</span> The precision of the VSM validation, especially regarding the typing of computed expressions, has been greatly improved. Other validation rules like static image paths have also been added or improved.
* <span class="label label-info">Modified</span> In the VSM editor, the context menu entries (categories and items) have been reorganized to put most common actions/items first.
* <span class="label label-info">Modified</span> In diagrams, the style previously named "Lozenge" is now called "Diamond".
* <span class="label label-info">Modified</span> In the _Open_ menu on a representation, the menu is computed from the navigation tool's label instead of its name/id.
* <span class="label label-info">Modified</span> All Acceleo 3 references have been removed from the Sirius metamodels to avoid a dependency to Acceleo 3. An automatic migration has been added during the loading of the VSM to avoid a change of behavior. This migration adds explicitly the old default value (@[eContents()->size()/]@) in the VSM, that was implicit before. Customers who want to completely remove this dependency must remove the Acceleo 3 expressions from there VSM after the migration.
* <span class="label label-info">Modified</span> The default icons paths of _Selection Wizard_ and _Pane-Based Selection Wizard_ used to reference invalid icons, so the corresponding tools had no icon per default in the palette. The default icons paths have been corrected to reference the icons displayed for those elements in the VSM editor.
* <span class="label label-info">Modified</span> "@*@" can now be used as feature name of a table's _Feature Column_ to skip the feature name validation during the cell creation. This allow to compute the label of cells for lines whose semantic element types have no common _EStructuralFeature_ (inherited or with same name).

h3. Developer-Visible Changes

The most important and impacting changes in this release are (details below in plug-in specific sections):
* <span class="label label-success">Added</span>  The new extension point @org.eclipse.sirius.ui.siriuspropertiescelleditor@, defined in @org.eclipse.sirius.ui@, can be used to provide customized cell editors for semantic element's properties as shown in the properties view on a Sirius representation.
* <span class="label label-success">Added</span>  The new class @org.eclipse.sirius.eef.components.SiriusAwarePropertiesEditingComponent@ can be used as root class of the generated EEF components to greatly improve performances when using both EEF properties views with Sirius representations. 
* <span class="label label-info">Modified</span> The minimum version of EEF required for using @org.eclipse.sirius.eef.adapters@ is now 1.5.0 (from 1.2 before). EEF 1.5 is source and binary-compatible with EEF 1.2 to 1.4, and no re-generation of the EEF views should be needed to switch to 1.5.
* <span class="label label-info">Modified</span> The @org.eclipse.sirius.business.internal.session.IsModifiedSavingPolicy@ saving policy, introduced in Sirius 2.0.0 but not enabled at that time is now the default. The previous implementation, @org.eclipse.sirius.business.api.session.SavingPolicyImpl@ is still available if needed.
* <span class="label label-info">Modified</span> All metamodels defined by Sirius have been modified to use EMF's @MinimalEObjectImpl.Container@ as base class, which reduces memory consumption compared to previous versions.
* <span class="label label-info">Modified</span> The @RGBValues@ type used in Sirius to represent colors has been converted into an immutable EMF EDataType, which also reduces memory consumption compared to previous versions.
* <span class="label label-info">Modified</span> The @AirdResourceImpl@ type, use for the @*.aird@ resources, no longer inherits from GMF's @GMFResource@ or depend on GMF in any way. This makes the @org.eclipse.sirius@ now completely independent on GMF.
* <span class="label label-info">Modified</span> The @DAnalsysis.models@ reference has been replaced by the @DAnalsysis.semanticModels@ attribute, in conjunction with the new @ResourceDescriptor@ data-type. The @DAnalysis.getModels()@ Java method is still present for compatibility and returns the same values, but the returned list can not be modified. All changes must be made directly on @DAnalsysis.semanticModels@ and will be reflected in the value returned by @DAnalysis.getModels()@. While not technically deprecated yet, @DAnalysis.getModels()@ should be avoided and may be removed in a future release.
* <span class="label label-info">Moved</span> Extensions in @plugin.xml@ that provide UI functionalities have been moved to new @org.eclipse.sirius.*.ext@ plug-ins, to make the contributions to the UI optional. If your product consumed directly the Sirius plug-ins instead of the high-level features, you may need to add the new plug-ins if you want the Sirius UI contributions to stay available.
* <span class="label label-danger">Removed</span> Many unused types defined in the metamodels have been removed. This should not impact normal client code. Existing models will be automatically migrated on loading if needed.
* <span class="label label-danger">Removed</span> Sirius no longer installs the @AirDCrossReferenceAdapterImpl@, which was a subclass of GMF's @CrossReferenceAdapter@ on session resources (@*.aird@). If your code relied on GMF's implementation to find inverse references, it can use the Sirius session's @Session.getSemanticCrossReferencer()@ instead, which provides the same service (and more) and avoids the redundant installation of GMF's version.

Packaging changes:
* <span class="label label-success">Added</span> Two new feature have been added concerning the new support for the AQL language:
** @org.eclipse.sirius.runtime.aql@ includes the minimum required to execute AQL queries at runtime. It must be present on end-users' systems for modelers which use AQL expressions to work.
** @org.eclipse.sirius.aql@ includes both the runtime requirements and the development-time features like support for auto-completion of AQL expressions in the VSM editor.
* <span class="label label-success">Added</span>  The new feature @org.eclipse.sirius.specifier@ includes everything needed to have a complete Sirius specification environment, with support for all dialects. It includes support for Acceleo 3/MTL queries, but not for AQL (provided by @org.eclipse.sirius.aql@) or OCL (provided by @org.eclipse.sirius.runtime.ocl@). Future Sirius releases will probably swap AQL and Acceleo 3, making AQL the defaut and part of the main feature, and Acceleo 3/MTL optional in a separate feature.
* <span class="label label-success">Added</span> All Sirius releases and milestones are available as zipped archives in addition to a normal p2 repository/update-site. For each version and platform (e.g. 3.0.0 on Eclipse Mars), two archives are available: one with the Sirius core, and one with the Sirius automated test suites and the sample modelers they rely on. See the "Sirius wiki":https://wiki.eclipse.org/Sirius/Update_Sites and release pages for more details and links to these archives, for example @http://download.eclipse.org/sirius/updates/releases/2.0.5/@. This is retro-active on all previously released versions of Sirius, but not on milestones before 3.0.0.

Other changes:
* <span class="label label-success">Added</span> Sirius now provides an <a href="http://www.eclipse.org/oomph" target="_blank">Oomph</a> setup file to automatically create a fully configured Eclipse installation ready for contributing patches to Sirius. The latest version can be obtained <a href="http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/plain/releng/org.eclipse.sirius.settings/Sirius.setup" target="_blank">here</a>.
* <span class="label label-success">Added</span> New patches proposed by contributors on the <a href="https://git.eclipse.org/r/#/admin/projects/sirius/org.eclipse.sirius" target="_blank">Sirius Gerrit</a> now automatically trigger a sub-set of the Sirius automated test suites, which give a good feedback on the absence of regressions introduced by the proposed patch.

h4. Changes in @org.eclipse.sirius.common@

* <span class="label label-success">Added</span> The @org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapter@ interface and the @org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl@ have been added to have the capability to disable the proxy resolution. This feature is typically used to prevent loading a resource during its unloading. *Warning* : _Every additional custom CrossReferenceAdapter_  should extend @SiriusCrossReferenceAdapterImpl@ or at least implement @SiriusCrossReferenceAdapter@ with the same implementation as @SiriusCrossReferenceAdapterImpl@.
* <span class="label label-success">Added</span> @org.eclipse.sirius.common.tools.api.util.ECrossReferenceAdapterWithUnproxyCapability@ is a specific kind of @SiriusCrossReferenceAdapter@. It provides the capability to resolve all proxy cross references to a given resource. It is now used by the Session as semantic cross referencer. This type is exposed as API but it is not intended to be used/referenced/extended by user code (as the below @LazyCrossReferencer@ type).
* <span class="label label-success">Added</span> The static method @org.eclipse.sirius.common.tools.api.util.ReflectionHelper.getFieldValueWithoutException(Class<?>, String)@ has been added to return an internal static value of a class.   
* <span class="label label-success">Added</span> @org.eclipse.sirius.common.tools.api.resource.ResourceSetSync@ has a new state @CHANGES_CANCELED@ used to define the state where the user canceled its changes.
* <span class="label label-success">Added</span> The @org.eclipse.sirius.common.tools.api.resource.ImageFileFormat@ class has been added (it was in @org.eclipse.sirius.ext.swt@ before).
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.common.tools.api.util.EclipseUtil.getConfigurationElementsFor()@ has been added: it calls @org.eclipse.core.runtime.Platform.getExtensionRegistry().getConfigurationElementsFor()@ only if @Platform.isRunning()@.
* <span class="label label-success">Added</span> The interface @org.eclipse.sirius.business.api.migration.IMigrationParticipant@ exposes a new method @postXMLEndElement([..])@ which is called during a migration operation. This method should be overridden by participants which have to hook the loading process after each end of XML tag. The  corresponding abstract class @org.eclipse.sirius.business.api.migration.AbstractMigrationParticipant@ provides a default empty  implementation.
* <span class="label label-success">Added</span> A new class @org.eclipse.sirius.common.tools.api.interpreter.JavaExtensionsManager@ can now be used by langages interpreters to benefit from a consistent handling of Java extensions and support for loading Java services from the workspace.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.common.tools.api.interpreter.TypeName@ has been introduced to represent in the codebase any type which was previously represented as a plain String.
* <span class="label label-success">Added</span> A new interface @org.eclipse.sirius.common.tools.api.interpreter.TypedValidation@ has been introduced for @IInterpreter@ implementations able to provide richer information when validating an expression. This information is captured through a @org.eclipse.sirius.common.tools.api.interpreter.ValidationResult@ instance.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.common.tools.api.interpreter.VariableType@ has been introduced to represent the possible types a variable can have in a Viewpoint specification model.
* <span class="label label-success">Added</span> The utility class @org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContextUtils@ has been introduced to factorize code related to managing @IInterpreterContext@ instances.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.business.api.dialect.description.MultiLanguagesValidator@ has been introduced to provide a safe and more efficient way to switch to the proper @IInterpreter@ instance when validating expressions.
* <span class="label label-success">Added</span> <span class="label label-danger">Removed</span> The class @org.eclipse.sirius.common.tools.api.util.RefreshIdFactory@ has been replaced with @org.eclipse.sirius.common.tools.api.util.RefreshIdsHolder@ which no longer rely on a global singleton but attach information to an EObject representing the current scope. This impacts @org.eclipse.sirius.diagram.business.api.query.AbstractDNodeQuery@ , @org.eclipse.sirius.common.tools.api.util.CartesianProduct@ and @org.eclipse.sirius.common.tools.api.util.EObjectCouple@ which are now requiring now a @RefreshIdsHolder@ instance.
* <span class="label label-info">Modified</span>@org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer@ now extends @ECrossReferenceAdapterWithUnproxyCapability@ and implements @resolveProxyCrossReferences(Resource)@.
* <span class="label label-info">Moved</span> The @org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer.enableResolve()@  and @disableResolve()@  methods has been moved to @SiriusCrossReferenceAdapter.enableResolveProxy()@  and @disableResolveProxy()@.
* <span class="label label-info">Modified</span> The static method @org.eclipse.sirius.common.tools.api.interpreter.DefaultInterpreterContextFactory.createInterpreterContext(...)@ now requires a @Map<String, VariableType>@ for the accessible variables instead of a @Map<String, String>@.
* <span class="label label-info">Modified</span> The methods @org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContext.getVariables()@  and @org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQuery.getAvailableVariables()@ are now returning a map containing @VariableType@ instances instead of encoded Strings.
* <span class="label label-info">Modified</span> The method @org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus.getTargetTypes()@ no longer returns a list of encoded Strings but a @VariableType@ instance instead.
* <span class="label label-warning">Deprecated</span> The method @org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContext.getTargetTypes()@ has been deprecated in favor of @org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContext.getTargetType()@ which returns a @VariableType@ instance instead of encoded Strings.

h4. Changes in @org.eclipse.sirius.common.ui@

* <span class="label label-success">Added</span> Classes from @org.eclipse.sirius.common.ui.tools.api.dialog.quickoutline@ packages are available in API to allow editor to provide quick outline feature easily.
* <span class="label label-success">Added</span> The methods @displaySyncExec(Runnable)@ , @displayAsyncExec(Runnable)@ and @synchronizeWithUIThread()@ have been added in class @org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil@ to encapsulate accesses to the current @Display@ instance.
* <span class="label label-info">Moved</span> Extensions in @plugin.xml@ that provide UI functionalities have been moved to @org.eclipse.sirius.common.ui.ext@.

h4. Changes in @org.eclipse.sirius@

* <span class="label label-success">Added</span> The method @org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)@ has been added to return a @DRepresentationContainer@ from the @DAnalysis@ parameter and the added @DRepresentation@.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.business.api.migration.IMigrationParticipant.updateCreatedObject(EObject newObject, String loadedVersion)@ has been added to update object values in VSM before loading this objects from XML file.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener.disable()@ has been added to disable the next refresh attempt in the current precommit loop iteration.
* <span class="label label-success">Added</span> The new constant @org.eclipse.sirius.business.api.helper.SiriusUtil.ENVIRONMENT_URI_SCHEME@ declares environment URI scheme.
* <span class="label label-success">Added</span> The new constant @org.eclipse.sirius.business.api.helper.SiriusUtil.VIEWPOINT_ENVIRONMENT_RESOURCE_URI@ declares @environment:/viewpoint@ resource URI.
* <span class="label label-success">Added</span> The new constant @org.eclipse.sirius.viewpoint.description.util.DescriptionResourceImpl.OPTION_SIRIUS_USE_URI_FRAGMENT_AS_ID@ added to define a option to enable the use of a id map for odesign resource, id being uri's fragment. 
* <span class="label label-success">Added</span> The query @org.eclipse.sirius.business.api.query.EObjectQuery@ has now a new constructor with an additional parameter, ECrossReferenceAdapter. This can be usefull if there is many calls to inverse references methods for the same Session. This avoids to get the semantic cross referencer from the EObject each time. This query also proposes a new method @getInverseReferences(Set<EReference>)@.
* <span class="label label-success">Added</span> There is a new capability on Dialect. This capability is to refresh only impacted elements concerned by a list of notifications. It is used, for example, to refresh the opened representations when the user chooses manual refresh mode. Each dialect that want to offer this capability must implement @org.eclipse.sirius.business.api.dialect.DialectServices.refreshImpactedElements(DRepresentation, Collection<Notification>, IProgressMonitor)@. A default implementation that does nothing is done in @org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices@.
* <span class="label label-success">Added</span> A new method has been added in the query @org.eclipse.sirius.business.api.query.DAnalysisQuery@ named @getMainModels()@. This method returns a Set of the main model and the other non controlled models.
* <span class="label label-success">Added</span> A new method has been added in @org.eclipse.sirius.viewpoint.DAnalysis@ named @getSemanticResources()@. This method returns a list of @org.eclipse.sirius.business.api.resource.ResourceDescriptor@ which is a descriptor of the semantic resource.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.viewpoint.RGBValues@ has been changed from an @EClass@ to an @EDataType@, it is not an @EObject@ anymore.
* <span class="label label-success">Added</span> The API @org.eclipse.sirius.business.api.metamodel.helper.FontFormatHelper@ has been added. It helps to update label format multi valued features.
* <span class="label label-info">Modified</span> @org.eclipse.sirius.business.api.session.SessionListener.SEMANTIC_CHANGE@ is no more send to @SessionListener@ and @SessionManagerListener@ listeners on save when a semantic resource is saved. Use a @ResourceSyncClient@ listener on @ResourceSetSync@ to have know if a semantic resource is saved.
* <span class="label label-info">Modified</span> The default constructor has been changed in @org.eclipse.sirius.tools.api.command.semantic.RemoveSemanticResourceCommand@.
** The boolean value @removeReferencingResources@ has been added to indicate if the referencing resources are also to remove.
** The boolean value @removeFromControlledResources@ has been removed because controlled resources are managed internally.
* <span class="label label-info">Modified</span> The boolean value @removeReferencingResources@ has been added in @org.eclipse.sirius.business.api.session.Session.removeSemanticResource@ method to indicate if the referencing resources are also to remove.
* <span class="label label-info">Modified</span> The @getModels()@ method in @org.eclipse.sirius.viewpoint.DAnalysis@ returns a non-modifiable list. Use @getSemanticResources()@ instead.
* <span class="label label-info">Moved</span> The @isBbocked()@ and @setBlocked()@ methods on the @org.eclipse.sirius.viewpoint.DAnalysisSessionEObject@ EClass have been removed, as they were not actually used in the internal code.
* <span class="label label-warning">Deprecated</span> @org.eclipse.sirius.business.api.helper.task.ICommandTask.undo()/redo()@ methods are deprecated because they are useless since undo/redo is managed by EMF Transaction.
* <span class="label label-warning">Deprecated</span> @org.eclipse.sirius.tools.api.command.IUndoableCommand@ interface are deprecated because it is useless since undo/redo is managed by EMF Transaction.
* <span class="label label-warning">Deprecated</span> @org.eclipse.sirius.business.api.helper.task.TaskExecutor.undo()/redo()@ methods are deprecated because they are useless since undo/redo is managed by EMF Transaction.
* <span class="label label-danger">Removed</span> The @org.eclipse.sirius.business.api.session.Session.createSemanticResource()@ method has been removed. Use @Session.addSemanticResource()@ instead.
* <span class="label label-danger">Removed</span> The @ExtendedPackage@ @EDataType@ which was defined in the @http://www.eclipse.org/sirius/1.1.0@ package was not actually used anywhere and has been removed.
* <span class="label label-danger">Removed</span> The @DView@ methods @getAllRepresentations()@, @getReferencedRepresentations()@ and @getHiddenRepresentations()@ have been removed: @getReferencedRepresentations()@ and @getHiddenRepresentations()@  were never actually used, making @getAllRepresentations()@ strictly equivalent to @getOwnedRepresentations()@. Code that used @getAllRepresentations()@ can simply use @getOwnedRepresentations()@ instead. 
* <span class="label label-danger">Removed</span> The API @org.eclipse.sirius.viewpoint.DSourceFileLink@ has been removed.
* <span class="label label-danger">Removed</span> The API @org.eclipse.sirius.viewpoint.DNavigable@ has been removed.
* <span class="label label-danger">Removed</span> The API @org.eclipse.sirius.viewpoint.DNavigationLink@ has been removed.
* <span class="label label-danger">Removed</span> The API @org.eclipse.sirius.viewpoint.DValidable@ has been removed.
* <span class="label label-danger">Removed</span> The enum @org.eclipse.sirius.viewpoint.NavigationTargetType@ has been removed.
* <span class="label label-danger">Removed</span> The API @org.eclipse.sirius.viewpoint.DLabelled@ has been removed.
* <span class="label label-danger">Removed</span> The API @org.eclipse.sirius.viewpoint.DContainer@ has been removed.

h4. Changes in @org.eclipse.sirius.ui@

* <span class="label label-success">Added</span> The method @org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.completeToolTipText(String, EObject, EStructuralFeature)@ has been added to customize the tooltip displayed in the VSM editor by using the feature of the current object. The old method @org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.completeToolTipText(String, EObject)@ has been deprecated.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource@ has been added. It allows developers to make their properties views CellEditor customizable by using the new extension point @org.eclipse.sirius.ui.siriuspropertiescelleditor@
* <span class="label label-success">Added</span> The interface @org.eclipse.sirius.ext.emf.ui.ICellEditorProvider@ has been added to allow clients to provide their own @CellEditor@ - in the Sirius semantic properties views - through the new extension point @org.eclipse.sirius.ui.siriuspropertiescelleditor@.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.ui.business.api.session.IEditingSession.detachEditor(DialectEditor, boolean)@ has been added to choose whether we should revert the user changes when detaching the editor.
* <span class="label label-success">Added</span> A @org.eclipse.sirius.ui.tools.api.views.LockDecorationUpdater@ is now available to add it on a @org.eclipse.ui.navigator.CommonNavigator@ to be refreshed when notifications are send to @org.eclipse.sirius.ecore.extender.business.api.permission.IAuthorityListener@. 
* <span class="label label-success">Added</span> A new job @org.eclipse.sirius.ui.tools.api.views.RefreshLabelImageJob@ has been added to refresh the icon of specified elements on a @org.eclipse.ui.navigator.CommonNavigator@.
* <span class="label label-info">Moved</span> Extensions in @plugin.xml@ that provide UI functionalities have been moved to @org.eclipse.sirius.ui.ext@.

h4. Changes in @org.eclipse.sirius.ecore.extender@

* <span class="label label-info">Modified</span> The method @org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor.eRemoveInverseCrossReferences()@ has been changed to return the list of changed objects by the inverse cross references removal.
* <span class="label label-info">Modified</span> The method @org.eclipse.sirius.ecore.extender.business.api.accessor.IMetamodelExtender.eRemoveInverseCrossReferences()@ has been changed to return the list of changed objects by the inverse cross references removal.
* <span class="label label-info">Modified</span> The method @org.eclipse.sirius.ecore.extender.business.api.accessor.CompositeMetamodelExtender.eRemoveInverseCrossReferences()@ has been changed to return the list of changed objects by the inverse cross references removal.
* <span class="label label-danger">Removed</span> The exception @org.eclipse.sirius.ecore.extender.IllegalURIException@ has been removed. It was not actually thrown anywhere in the code.

h4. Changes in @org.eclipse.sirius.editor@

* <span class="label label-success">Added</span> The static method @org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider.bindPluginsCompletionProcessors(AbstractPropertySection, Text)@ has been added. This method is very similar to @org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider.bindCompletionProcessor(AbstractPropertySection, Text)@, the difference is that it binds the completion processors available in plugins to the text.

h4. Changes in @org.eclipse.sirius.diagram@

* <span class="label label-success">Added</span> The @org.eclipse.sirius.diagram.tools.api.command.ChangeLayerActivationCommand@ has been added. This command was previously internal.
* <span class="label label-success">Added</span> The new constant @org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.DIAGRAM_ENVIRONMENT_RESOURCE_URI@ declares the @environment:/diagram@ resource URI.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.completeToolTipText(String, EObject, EStructuralFeature)@ has been added to customize the tooltip displayed in the VSM editor by using the feature of the current object. The old method @org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.completeToolTipText(String, EObject)@ has been deprecated.
* <span class="label label-success">Added</span> New methods have been added to @org.eclipse.sirius.diagram.business.api.query.ContainerMappingQuery@ to test the children presentation mode of the current @ContainerMapping@: @isVerticalStackContainer()@, @isHorizontalStackContainer()@, @isRegionContainer()@ and @isRegion()@.
* @org.eclipse.sirius.diagram.business.api.query.AbstractDNodeQuery@ now requires a @org.eclipse.sirius.common.tools.api.util.RefreshIdsHolder@ to check for equality in the context of a refresh operation.
* <span class="label label-danger">Removed</span> The @DNodeList.lineWidth@ attribute has been removed from the metamodel, the corresponding generated elements do not exist anymore:  @org.eclipse.sirius.diagram.DNodeList.getLineWidth()@,  @org.eclipse.sirius.diagram.DNodeList.setLineWidth()@,  @org.eclipse.sirius.diagram.DiagramPackage.DNODE_LIST__LINE_WIDTH@, @org.eclipse.sirius.diagram.DiagramPackage.getDNodeList_LineWidth()@, @org.eclipse.sirius.diagram.DiagramPackage.Literals.DNODE_LIST__LINE_WIDTH()@.
* <span class="label label-danger">Removed</span> @org.eclipse.sirius.diagram.ComputedStyleDescriptionRegistry.cache@ reference has been removed from the metamodel as it is no more useful, to limit memory consumed by computed @StyleDescription@ we directly look for them in the @ComputedStyleDescriptionRegistry.computedStyleDescriptions@ list.

h4. Changes in @org.eclipse.sirius.diagram.ui@

* <span class="label label-success">Added</span> <span class="label label-info">Modified</span>  The @org.eclipse.sirius.diagram.ui.tools.api.figure.ImageFigureWithAlpha@ interface has been added to identify Figures having the capability to return an alpha value from a coordinate. @org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure@ and @org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractTransparentImage@  now implement this new interface.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.diagram.ui.tools.api.figure.locator.DBorderItemLocator.resetBorderItemMovedState()@ has been added to allow to reset the state of @borderItemHasMoved@. This method must be used carefully only in case where @setConstraint(Rectangle)@ is called to compute temporary a @getValidLocation(Rectangle, IFigure, Collection, List)@, one time with a new value and just after with the old value.
* <span class="label label-success">Added</span> The constant @org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath.HIDDEN_LABEL_DECORATOR@ has been added to represent the path of hidden label decorator used in the outline.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.diagram.ui.business.api.provider.DDiagramElementContainerLabelItemProvider@ has been added to represent container and list labels as virtual nodes in the Show/Hide wizards.
* <span class="label label-info">Modified</span> The @org.eclipse.sirius.diagram.ui.tools.api.figure.locator.DBorderItemLocator@ did not take into account the rectangle size passed to @getValidLocation@. To resolve that limitation, several protected methods that took a Point as location now take a Rectangle:
** @locateOnBorder(Point, int, int, IFigure, Collection<IFigure>, List<IFigure>)@ now takes a @Rectangle@ instead a @Point@: @locateOnBorder(Rectangle, int, int, IFigure, Collection<IFigure>, List<IFigure>)@;
** @locateOnSouthBorder@, @locateOnNorthBorder@, @locateOnWestBorder@ and @locateOnEastBorder@ signatures is now @(Rectangle, int, IFigure, Collection<IFigure>, List<IFigure>)@;
** @locateOnParent@ signature is now @locateOnParent(Rectangle, int, IFigure)@;
** @conflicts@ signature is now @conflicts(Rectangle, IFigure, Collection<IFigure>, List<IFigure>)@.
* <span class="label label-info">Moved</span> The constant @DiagramImagesPath.LINK_TO_VIEWPOINT_IMG@ has been moved to @org.eclipse.sirius.ui.tools.api.image.ImagesPath.LINK_TO_VIEWPOINT_IMG@. This is more coherent because the corresponding image is in core @org.eclipse.sirius.common.ui@ plugin.
* <span class="label label-info">Moved</span> @org.eclipse.sirius.diagram.ui.tools.api.layout.PinHelper@ moved from @org.eclipse.sirius.diagram.ui@ plugin to @org.eclipse.sirius.diagram@ plugin, i.e. @org.eclipse.sirius.diagram.tools.api.layout.PinHelper@ with @PinHelper.IsPinned(IDiagramElementEditPart)@ removed in favor of @PinHelper.IsPinned(DDiagramElement)@.
* <span class="label label-info">Moved</span> External java actions declared as @org.eclipse.sirius.diagram.ui.tools.internal.actions.pinning.pinElementsActionId@ and @org.eclipse.sirius.diagram.ui.tools.internal.actions.pinning.unpinElementsActionId@ are now declared as @org.eclipse.sirius.diagram.tools.internal.actions.pinning.pinElementsActionId@ and @org.eclipse.sirius.diagram.tools.internal.actions.pinning.unpinElementsActionId@ in @org.eclipse.sirius.diagram@ plugin.
* <span class="label label-info">Moved</span> Extensions in @plugin.xml@ that provides UI functionalities have been moved to @org.eclipse.sirius.diagram.ui.ext@.
* <span class="label label-warning">Deprecated</span> @org.eclipse.sirius.diagram.ui.tools.api.util.GMFNotationHelper.findGMFDiagram()@ became deprecated in favor of @DiagramCreationUtil.findAssociatedGMFDiagram()/getAssociatedGMFDiagram()@
* <span class="label label-danger">Removed</span> The @org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramEdgeEditPart.getEAdapterStrokeColor@ method has been removed as the corresponding adapter was uneffective and is no more used and installed on the edge edit parts.
* <span class="label label-danger">Removed</span> @org.eclipse.sirius.diagram.ui.tools.api.figure.InvisibleResizableCompartmentFigure@ class has been removed, use a @org.eclipse.gmf.runtime.diagram.ui.figures.ShapeCompartmentFigure@ with a @org.eclipse.draw2d.MarginBorder@ or a null border instead.
* <span class="label label-danger">Removed</span>  The method @org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramElementEditPart.getEAdapterSemanticElements()@ has been removed (and all its implementations). For manual refresh, this adapter has been replaced with the @RefreshEditorsPrecommitListener@.
* <span class="label label-danger">Removed</span>   The method @org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditorUtil.findView()@ has been deleted in flavor of @SiriusGMFHelper.getGmfView()@. If you was using @SiriusDiagramEditorUtil.findView()@ with a semantic element in parameter, retrieve before the corresponding @DDiagram@ or @DDiagramElement@ and use @SiriusGMFHelper.getGmfView(DSemanticDecorator)@ from this last to get the corresponding GMF View. To get a @DDiagram@ or @DDiagramElement@ from a semantic element, you can use @EObjectQuery.getInverseReferences(EReference)@ API, see @org.eclipse.sirius.diagram.ui.business.api.view.ValidateAction.getDSemanticDecorator()@ for an example. 

h4. Changes in @org.eclipse.sirius.table@

* <span class="label label-danger">Removed</span> The methods @org.eclipse.sirius.table.business.api.helper.TableHelper.getColumn()@ have been removed because they are not useful, @TableHelper.getColumn(DLine, int)@ can be replaced by @DTable.getColumns().get(int)@ and @TableHelper.getColumn(DTable, String)@ should not be used as we can have several columns with a same featureName.
* <span class="label label-danger">Removed</span> The method @org.eclipse.sirius.table.business.api.helper.TableHelper.getEClassifier(DLine, int)@ has been removed because it is not useful, use @TableHelper.getEClassifier(line, column)@ instead.
* <span class="label label-danger">Removed</span> The method @org.eclipse.sirius.table.business.api.helper.TableHelper.getTableElement(DTableElementStyle)@ has been removed because it is not useful, @DTableElementStyle.eContainer()@ can be used instead.
* <span class="label label-danger">Removed</span> The methods @org.eclipse.sirius.table.business.api.helper.TableHelper.getCell(DCellStyle)@ has been removed because they are not useful, use @DCellStyle.eContainer@ instead.
* <span class="label label-danger">Removed</span> The methods @org.eclipse.sirius.table.business.api.helper.TableHelper.getCell(RGBValues)@ has been removed, @RGBValues@ is not an @EObject@ anymore. The method was looking in the eContainer hierarchy of a an instance of @RGBValues@ to find the parent @DCell@.
* <span class="label label-danger">Removed</span> The method @org.eclipse.sirius.table.business.api.helper.TableHelper.getCreateCellTool(DCell)@ has been removed because it is not useful, use @TableHelper.getCreateCellTool(line, column)@ instead.
* <span class="label label-danger">Removed</span> The method @org.eclipse.sirius.table.business.api.helper.TableHelper.getCellDefaultForegroundColor()@ has been removed because it is not useful, use @EnvironmentSystemColorFactory.getDefault().getSystemColorDescription("gray")@ instead.
* <span class="label label-danger">Removed</span> The interface @DTableElementUpdater@ has been removed from metamodel. It is now unnecessary. This interface was here to provide operations to activate and deactivate the listeners, that have been replaced by the @RefreshImpactedElementsCommand@ launched from @RefreshEditorsPrecommitListener@.

h4. Changes in @org.eclipse.sirius.table.ui@

* <span class="label label-info">Moved</span> Extensions in @plugin.xml@ that provide UI functionalities have been moved to @org.eclipse.sirius.table.ui.ext@.

h4. Changes in @org.eclipse.sirius.tree@

* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.refreshContent(boolean fullRefresh)@ has been added to allow full refresh from a specified @DTreeItem@.
* <span class="label label-success">Added</span> The EMF Command @org.eclipse.sirius.tree.business.api.command.DTreeItemLocalRefreshCommand@ has been added to call @DTreeItemUserInteraction.refreshContent(boolean fullRefresh)@ in an EMF Command. 
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.expand(IProgressMonitor)@ has been added similar to @DTreeItemUserInteraction.expand()@ but taking a @IProgressMonitor@ in parameter to have progression on @DTreeItem@ expanding.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.collapse(IProgressMonitor)@ has been added similar to @DTreeItemUserInteraction.collapse()@ but taking a @IProgressMonitor@ in parameter to have progression on @DTreeItem@ collapsing.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.expandAll(IProgressMonitor)@ has been added similar to @DTreeItemUserInteraction.expandAll()@ but taking a @IProgressMonitor@ in parameter to have progression on @DTreeItem@ expanding.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.refreshContent(boolean, IProgressMonitor)@ has been added similar to @DTreeItemUserInteraction.refreshContent(boolean)@ but taking a @IProgressMonitor@ in parameter to have progression on @DTreeItem@ expanding.
* <span class="label label-success">Added</span> The method @DTreeUserInteraction.expand(IProgressMonitor)@ has been added similar to @org.eclipse.sirius.tree.business.api.interaction.DTreeUserInteraction.expand()@ but taking a @IProgressMonitor@ in parameter to have progression on @DTreeItem@ expanding.
* <span class="label label-success">Added</span> The method @DTreeUserInteraction.expandAll(IProgressMonitor)@ has been added similar to @org.eclipse.sirius.tree.business.api.interaction.DTreeUserInteraction.expandAll()@ but taking a @IProgressMonitor@ in parameter to have progression on @DTreeItem@ expanding.
* <span class="label label-info">Modified</span> The constructor @org.eclipse.sirius.tree.business.api.command.DTreeItemExpansionChangeCommand.DTreeItemExpansionChangeCommand(GlobalContext, TransactionalEditingDomain, DTreeItem, IProgressMonitor, boolean)@ has an additional @IProgressMonitor@ parameter.
* <span class="label label-danger">Removed</span> The interface @DTreeElementUpdater@ has been removed from metamodel. It is now unnecessary. This interface was here to provide operations to activate and deactivate the listeners, that have been replaced by the @RefreshImpactedElementsCommand@ launched from @RefreshEditorsPrecommitListener@.

h4. Changes in @org.eclipse.sirius.tree.ui@

* <span class="label label-info">Modified</span> The method @org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.update(final TransactionalEditingDomain domain, final Notification notification)@ has been replaced by @org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.update(ResourceSetChangeEvent)@ to allow to update only once per ResourceSetChangeEvent and let subclasses make additional filtering on the notifications.
* <span class="label label-info">Modified</span> The return type of the method @org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.getEventListener()@ has been changed from @DemultiplexingListener@ to @ResourceSetListener@.
* <span class="label label-info">Modified</span> The type of @org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.eventListener@ has been changed from @DemultiplexingListener@ to @ResourceSetListener@.
* <span class="label label-info">Moved</span> Extensions in @plugin.xml@ that provide UI functionalities have been moved to @org.eclipse.sirius.tree.ui.ext@.

h4. Changes in @org.eclipse.sirius.synchronizer@

* <span class="label label-success">Added</span>  The method @org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean, IProgressMonitor)@ has been added similar to @org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean)@ but taking a @IProgressMonitor@ in parameter to have progression on synchronization.
* <span class="label label-info">Modified</span> The method @org.eclipse.sirius.synchronizer.SemanticPartitionInvalidator.hasFastResult(EObject, SemanticPartition, CreatedOutput)@ now takes a @CreatedOutput@ as additional parameter element to allow to have the parent output element.
* <span class="label label-info">Modified</span> The method @org.eclipse.sirius.synchronizer.SemanticPartition.evaluate(EObject, CreatedOutput)@ now takes a @CreatedOutput@ as additional parameter. This @CreatedOutput@ represents the output model element which will become the parent of the elements created from the evaluation result.

h4. Changes in @org.eclipse.sirius.ext.swt@

* <span class="label label-info">Moved</span> The @org.eclipse.sirius.ext.swt.ImageFileFormat@ class has been moved in @org.eclipse.sirius.common.tools.api.resource@ (in the @org.eclipse.sirius.common@ plugin).

h4. Changes in @org.eclipse.sirius.ext.e3.ui@

* <span class="label label-success">Added</span> The classes @org.eclipse.sirius.ext.e3.ui.dialogs.FilteredTree@ and @org.eclipse.sirius.ext.e3.ui.dialogs.PatternFilter@ have been added in order to have the latest functionalites of @org.eclipse.ui.dialogs.FilteredTree@ with Eclipse Juno.

h4. Changes in @org.eclipse.sirius.ext.emf.tx@

* <span class="label label-success">Added</span> The class @org.eclipse.sirius.ext.emf.tx.DelegatingValidateEditSupport@ has been added to be able to have a @ValidateEditSupport@ which delegate to an existing @ValidateEditSupport@.

h4. Changes in @org.eclipse.sirius.eef.adapters@

This plug-in now requires the version 1.5.0 of @org.eclipse.emf.eef.runtime@ bundle.

* <span class="label label-success">Added</span>  The new class @org.eclipse.sirius.eef.components.SiriusAwarePropertiesEditingComponent@ can be used as root class of the generated EEF components to greatly improve performances when using both EEF properties views with Sirius representations. Refer to _Using the Extended Editing Framework with Sirius_ documentation for details.
* <span class="label label-info">Modified</span>The following packages are set to @x-internal:=true@
** @org.eclipse.sirius.eef.actions@
** @org.eclipse.sirius.eef.adapters@

h4. Changes in @org.eclipse.sirius.tests.junit.support@

* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)@ has been added to change the read only status of the given resources.
* <span class="label label-success">Added</span> The @warnings@ member variable has been added to @org.eclipse.sirius.tests.support.api.SiriusTestCase@ to allow the recording of warning logs. Methods @doesAWarningOccurs()@, @clearWarnings()@, @setWarningCatchActive(boolean)@, @isWarningCatchActive()@ and @getWarningLoggersMessage()@ have also been added to manage the @warnings@ member variable in the same way as the existing @errors@ member variable.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tests.support.api.SiriusTestCase.loadModeler(URI, EditingDomain)@ has been added to load a VSM resource and make the @Viewpoints@ it defines accessible via the @SiriusTestsCase.viewpoints@ field.
* <span class="label label-success">Added</span> The class @org.eclipse.sirius.tests.support.api.ImageComposer@ has been added to the test API to do assertions on image decorators.
* <span class="label label-success">Added</span> The enum @SiriusTestCase.ResourceURIType@ and the method @SiriusTestCase.toURI(final String, ResourceURIType)@ have been added to allow choosing the type of URI created (@platform:@ or @plugin:@).
* <span class="label label-info">Modified</span> The @SiriusTestCase.genericSetUp(List<URI>, List<URI>, boolean, URI)@ method has been set to protected so that it can be called from concrete test cases. This method allows initializing session.
* <span class="label label-info">Moved</span> The class @TreeItemLabelFontFormatQuery@ was moved into @org.eclipse.sirius.tests.support.api@ (from @org.eclipse.sirius.tests.swtbot.support.api.widget@), as it can be used in non-SWTBot tests..
* <span class="label label-warning">Deprecated</span> The method @org.eclipse.sirius.tests.support.api.SiriusDiagramTestCase.setReadOnly(IFile)@ has been deprecated, @org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)@ can be used instead.

h4. Changes in @org.eclipse.sirius.tests.swtbot.support@

* <span class="label label-success">Added</span> The @warnings@ member variable has been added to @org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase@ to allow the recording of warning logs. Methods @doesAWarningOccurs()@, @setWarningCatchActive(boolean)@, @isWarningCatchActive()@ and @getWarningLoggersMessage()@ have also been added to manage the @warnings@ member variable in the same way as the existing @errors@ member variable.
* <span class="label label-success">Added</span> The method @org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.getDRepresentation()@ has been added to return the @org.eclipse.sirius.viewpoint.DRepresentation@ instance available in the diagram editor.
* <span class="label label-info">Modified</span> The method @org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase.getSectionButton()@  now only takes the button's tooltip instead of a numerical position index and the tooltip.
* <span class="label label-info">Modified</span> The methods @org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusHelper.selectPropertyTabItem(String)@ now returns a @boolean@ that is true when the property tab item is found, false otherwise.
* <span class="label label-info">Moved</span> The class @TreeItemLabelFontFormatQuery@ was moved into @org.eclipse.sirius.tests.support.api@ (from @org.eclipse.sirius.tests.swtbot.support.api.widget@), as it can be used in non-SWTBot tests..
* <span class="label label-warning">Deprecated</span> The methods @org.eclipse.sirius.tests.swtbot.support.api.business.UIPerspective.deleteProject(UIProject)@ and @org.eclipse.sirius.tests.swtbot.support.api.business.UIPerspective.deleteProject(String)@ have been deprecated, @org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)@ can be used instead.

h4. New plug-ins

The following UI plug-ins has been added:
* <span class="label label-success">Added</span> @org.eclipse.sirius.ui.ext@
* <span class="label label-success">Added</span> @org.eclipse.sirius.common.ui.ext@
* <span class="label label-success">Added</span> @org.eclipse.sirius.diagram.ui.ext@
* <span class="label label-success">Added</span> @org.eclipse.sirius.table.ui.ext@
* <span class="label label-success">Added</span> @org.eclipse.sirius.tree.ui.ext@

These plug-ins own the extension definitions related to perspective, views, newWizard, menus, contextual menus, editors and preference pages that were previously in @org.eclipse.sirius.xxx.ui@ plug-ins.
Now, downstream projects can define features that do not contain @org.eclipse.sirius.xxx.ui.ext@, allowing them not have all that functionalities they may not want.
