Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

OCL/New and Noteworthy/Helios

< OCL‎ | New and Noteworthy
Revision as of 03:52, 16 October 2009 by Ed.willink.me.uk (Talk | contribs) (Milestone 3)

Eclipse OCL New and Noteworthy items for the Helios release.

The Helios MDT-OCL release will be 3.0.0 rather than 2.0.0, since the Galileo plug-ins contained a mix of 1.3.0 and 2.0.0 versions. The 2.0.0 versions were mandated by a major version change in UML2.

Since MDT-OCL is a project on which several subprojects of Eclipse Modeling Project rely, a maintenance 1.4.0 version release will also be shipped in Helios.

OCL 3.0.0 API Changes

As a major release's change, MDT-OCL 3.0.0 is expected to break API. You can check all API changes under discussion here.

One of the main goal to achieve in the MDT-OCL 3.0.0 release is migrating all grammars and parsing infrastructure so that they are based on the last version of LPG 2, whose runtime is sensibly improved and will allow to introduce a fancy textual OCL editor which will help the user to create OCL expressions. An OCL extending language will need to change their grammars/parsing infrastructure if they want to extend OCL in 3.0.0. A changes log and some advice for OCL extenders have been registered here (not written yet).

A migration guide is under construction.

Milestone 2

invalid/Invalid/OclInvalid resolved

Bugzillas: 282882 288526

The OMG OCL 2.0 specification is very unclear as to the relative status of invalid objects and types. The tentative OCL 2.1 specification is little better.

The problem is easily understood by contrasting invalid with the uncontentious null: null is the null object that is the sole instance of the OclVoid which is the sole instance of VoidType meta-class.

Section 8.2 tends to suggest that: OclInvalid is the invalid object that is the sole instance of Invalid which is the sole instance of the InvalidType meta-class. This is what MDT-OCL 1.3.0 realises.

Section 11.2.4 and 11.2.5 are much more consistent in preferring: invalid is the invalid object that is the sole instance of OclInvalid which is the sole instance of the InvalidType meta-class. This is the revised implementation for MDT-OCL 3.0.0.

Beware. This change has a significant API incompatibility; the OCLStandardLibrary methods getOclInvalid and getInvalid have interchanged semantics. All calls to getOclInvalid and getInvalid should be reviewed, since errors may be silent. Concrete syntax changes are less likely to cause trouble.

Comments parsed

Bugzilla: 286724

Comments are now parsed as LPG Token Adjuncts enabling tools that want access to comments to find them.

static features supported for the UML binding

Bugzilla: 285633

The proposed OCL enhancement to allow a 'static' keyword prefix to a 'def' constraint is implemented for the UML binding, unless ParsingOptions.SUPPORT_STATIC_FEATURES is set false in the Environment, in which case an error is generated.

Ecore does not support static EStructuralFeatures and so use of 'static' gives an error when the ECore binding is used.

setStatic, isConstraint and isPackage are added to the UMLReflection API.

CST inelegancies removed

Bugzilla: 287993

@pre is now represented by a non-null rather than null IsMarkedPreCS object. Previously this was coded by a true/false value of the IsMarkedPreCS.isPre field. Analyzer code explicitly handling IsMarkedPreCS objects must be revised to handle the null object logic.

InvCS, DefCS, InitCS and DerCS are now maintained in a PropertyContextCS.constraints or ClassifierContextDecl.constraints array. The reverse lexical order linked list daisy chain is no longer supported.

PathNameCS.simpleNames and StateExpCS.simpleNames replace PathNameCS.sequenceOfNames and StateExpCS.sequenceOfNames. This changes a List<String> to a List<SimpleNameCS> which avoids loss of IToken context.

Milestone 3

This milestone is pending.

OCL 2.1 Precedence changes

Bugzillas: 288040

xor now has higher precedence than or which is higher than and.

A ParsingOptions.WARN_OF_XOR_OR_AND_PRECEDENCE_CHANGE may be set to give a warning when OCL 2.1 has a different meaning to MDT/OCL 1.3's left-associative interpretation of OCL 2.0.

OCL 2.1 Grammar alignment

Bugzillas: 184048 292112

The grammar has been substantially revised to align with the likely OCL 2.1 specification.

This may impact on implementers of derived languages, who may wish to consult the MDT/OCL/MDT-OCL 3.0.0 Migration Guide.

The spelling of many production names is changed, mostly in just the first letter.

The term factoring of some productions has changed.

As a result problems with if and let are resolved.

It is also temporarily possible to use non-reserved words in many contexts where the specification currently allows them. An OMG issue will be raised to make self, true, Bag etc reserved words.

The Essential OCL grammar is now completely separable so that re-users can avoid any grammar baggage from Complete OCL. Re-users may re-use EssentialOCL.g, EssentialOCLLexer.g and EssentialOCLKWLexer.g.

Milestone 4

This milestone is pending.

Milestone 5

This milestone is pending.

Milestone 6

This milestone is pending.

Milestone 7

This milestone is pending.

Back to the top