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

MMT/QVTo/New and Noteworthy/Kepler

< MMT

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.

Back to the top