Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
MMT/QVTo/New and Noteworthy/Kepler
Eclipse QVT Operational New and Noteworthy items for the Kepler 3.3.0 release.
Milestone 2
378940 Duplications of OCL 2.2 operations removed
Milestone 5
302594 Inherited properties of accessed transformations are now available
309762 Disjunction now considers overriding mappings Snippet:
-- A.qvto helper execute() { i.objects()[EPackage]->map m(); return null; } mapping EPackage :: m() : EPackage disjuncts EPackage::m1, EPackage::m2; mapping EPackage :: m1() : EPackage { name := 'm1_original' } mapping EPackage :: m2() : EPackage { name := 'm2_original' } -- Main.qvto main() { execute(); } mapping EPackage :: m1() : EPackage { name := 'm1_overridden' }
310991 Inherited configuration properties of accessed transformations are now available
377882 Resolve on a disjunction mapping no longer returns null
388325 += is no longer ignored on a result variable
392080 An initialized imported property is now part of the out extent
392153 The execution of an accessed transformation is now included in the trace
394498 The debugger can now switch between multiple transformations/libraries
397215 null arguments may now be used with disjunctive mappings Snippet:
main() { input.objects()[EPackage]->map m(null); } mapping EPackage :: m(p : EPackage) : EPackage disjuncts EPackage::m1; mapping EPackage :: m1(p : EPackage) : EPackage { name := 'pack' }
397218 Argument/parameter type comparison is now properly done when dispatching a disjuncting mapping
397959 Overriding should no longer be confused by the presence/absence of a context Snippet:
-- Library.qvto mapping EPackage :: m() : EPackage { name := 'original_contextaware' } mapping m() : EPackage { name := 'original_contextless' } -- Main.qvto main() { map m(); } mapping EPackage :: m() : EPackage { name := 'overridden_contextaware' }
Milestone 6
254962 Intermediate properties are no longer ignored when cloning
296630 Local variables now contribute to completion proposals
358709 resolveoneIn(...) no longer fails for override mappings
376274 Nested packages may now be used in metamodel mappings URI with fragment is now can be used in Metamodel mappings definition to reference nested packages:
platform:/resource/<plugin-id>/<ecore-path>#//<nested-package-path>
388329 Deployed libraries are now excluded from the Select Transformation dialog
388331 Contextless mappings on resolve operations are available on completion proposals
388801 Collection-type features are initialized to Set{} rather than Set{null} Snippet:
intermediate class I { coll : OrderedSet(EClass); coll2 : OrderedSet(EClass) = OrderedSet{}; coll3 : OrderedSet(EClass) = OrderedSet{object EClass{}}; } intermediate class C { references classes : EClass[*] = null; } main() { var intermI : I = object I {}; assert fatal (intermI.coll->isEmpty()); assert fatal (intermI.coll2->isEmpty()); assert fatal (not intermI.coll3->isEmpty()); var set : OrderedSet(I) = OrderedSet {intermI}; assert fatal (set->collect(coll)->isEmpty()); assert fatal (set->collect(coll2)->isEmpty()); assert fatal (not set->collect(coll3)->isEmpty()); var c : OrderedSet(EClass) = null; assert fatal (c->oclIsUndefined()); var intermC : C = object C {}; assert fatal (intermC.classes->isEmpty()); }
397218 Disjunct mapping dispatch no longer ignores the argument/parameter types
Milestone 7
390182 Different transformation resolvers (deployed, plugin and workspace) are now behave equally. For deployed transformations now is possible to specify source container (via "org.eclipse.m2m.qvt.oml.runtime.qvtTransformationContainer" extension point).
325192 Re-assignment of 'result' outside init{} mapping section is now prohibited. Incremental assignment ('+=' operator) for mutable QVTo types (List and Dict) on 'result' variable is now supported.
316793 Performance of transformations which create a lot of new objects are improved.
287713 Validation in QVTO launch configuration is now lightweight (all checks are performed but without loading of models). "Validation" button now triggers execution of the former validation logic (that includes loading of models).
288413 Post-transformation cleanup now takes significantly less time to execute.
395353 QVTO debugger now is aware of metamodel mappings.
324054 Introduced JUnit tests now checks consistent behavior between debug and non-debug launch configuration.
RC 1
406732 Extensible framework for unit tests on QVTo debugger functionality (execution, stepInto/stepOver, resume, return) is provided.
329971 Now datatypes derived from string are compared correctly in QVTo. Snippet:
// model.ecore <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="test1" nsURI="http://test1/1.0" nsPrefix="test1"> <eClassifiers xsi:type="ecore:EClass" name="Class1"> <eStructuralFeatures xsi:type="ecore:EAttribute" name="attr1" lowerBound="1" eType="#//TestIdentifier"/> </eClassifiers> <eClassifiers xsi:type="ecore:EDataType" name="TestIdentifier" instanceClassName="java.lang.String"> <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> <details key="name" value="TestIdentifier"/> <details key="baseType" value="string"/> <details key="pattern" value="[A-Za-z_][A-Za-z0-9_]*"/> </eAnnotations> </eClassifiers> </ecore:EPackage>
// Instance.xmi
<test1:Class1 xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:test1="http://test1/1.0" xsi:schemaLocation="http://test1/1.0 test1.ecore" attr1="TestValue"/>
-- Main.qvto main() { var cls = inModel.rootObjects()![Class1]; var x: EString = cls.attr1; var y: String = cls.attr1; var z: TestIdentifier = cls.attr1; assert fatal (cls.attr1 = "TestValue"); assert fatal (x = "TestValue"); assert fatal (y = "TestValue"); assert fatal (z = "TestValue"); }
RC 2
396538 Trace file for multiple input models is now generated correctly.