[271320] Support operation overriding in extended module
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/LibForExtends.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/LibForExtends.qvto
new file mode 100644
index 0000000..e655e73
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/LibForExtends.qvto
@@ -0,0 +1,11 @@
+library LibForExtends;
+
+
+query query_LibForExtends() : String {
+ return "LibForExtends-query_LibForExtends";
+}
+
+query callQuery_LibForExtends() : String {
+ return query_LibForExtends();
+}
+
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/RootTransfForExtends.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/RootTransfForExtends.qvto
new file mode 100644
index 0000000..8d21b72
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/RootTransfForExtends.qvto
@@ -0,0 +1,49 @@
+modeltype ECORE "strict" uses ecore('http://www.eclipse.org/emf/2002/Ecore');
+
+transformation RootTransfForExtends(in eModel : ECORE, out outModel : ECORE);
+
+property prop_TransfForExtends : String = "prop_TransfForExtends";
+
+main() {
+ object EPackage {
+ name := "should never be executed";
+ };
+}
+
+
+helper EClass::decorateName() : String {
+ return "RootTransfForExtends-" + self.name;
+}
+
+helper non_ContextualDecorate(c : EClass) : String {
+ return "RootTransfForExtends-" + c.name;
+}
+
+mapping EClass::customCopy() : EClass {
+ name := "RootTransfForExtends-" + self.name;
+}
+
+mapping customCopy(in eClass : EClass) : EClass {
+ name := "RootTransfForExtends-" + eClass.name;
+}
+
+helper rootModuleQuery() : String {
+ return "RootTransfForExtends";
+}
+
+mapping createOverridenCallsPackage(in pckgName : String) : EPackage {
+ init {
+ var c:EClass := object EClass { name := pckgName };
+ c.eStructuralFeatures += object EAttribute {
+ name := c.decorateName();
+ };
+ c.eStructuralFeatures += object EAttribute {
+ name := non_ContextualDecorate(c);
+ };
+ }
+
+ name := pckgName;
+ eClassifiers += c;
+ eClassifiers += c.map customCopy();
+ eClassifiers += map customCopy(c);
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/TransfForAccess.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/TransfForAccess.qvto
new file mode 100644
index 0000000..0e931b0
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/TransfForAccess.qvto
@@ -0,0 +1,7 @@
+modeltype ECORE "strict" uses ecore('http://www.eclipse.org/emf/2002/Ecore');
+
+transformation TransfForAccess(in eModel : ECORE, out outModel : ECORE);
+
+query queryStringForAccess() : String {
+ return "TransfForAccess-queryStringForAccess";
+}
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/TransfForExtends.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/TransfForExtends.qvto
new file mode 100644
index 0000000..2caffd1
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/TransfForExtends.qvto
@@ -0,0 +1,42 @@
+import RootTransfForExtends;
+
+modeltype ECORE "strict" uses ecore('http://www.eclipse.org/emf/2002/Ecore');
+
+transformation TransfForExtends(in eModel : ECORE, out outModel : ECORE)
+ extends transformation RootTransfForExtends;
+
+
+helper EClass::decorateName() : String {
+ return "TransfForExtends-" + self.name;
+}
+
+helper non_ContextualDecorate(c : EClass) : String {
+ return "TransfForExtends->" + this.RootTransfForExtends::non_ContextualDecorate(c);
+}
+
+mapping EClass::customCopy() : EClass {
+ name := "TransfForExtends-EClass::customCopy()" + self.name;
+}
+
+mapping customCopy(in eClass : EClass) : EClass {
+ name := "TransfForExtends-customCopy(in eClass : EClass)" + eClass.name;
+}
+
+/*
+ Intentionally not overridden here but only by the bottom most sub-module
+*/
+//helper rootModuleQuery() : String {
+// return "RootTransfForExtends";
+//}
+
+query callRootModuleQuery() : String {
+ return rootModuleQuery();
+}
+
+query reusableQuery() : String {
+ return "TransfForExtends::reusableQuery";
+}
+
+helper callOverridenPackageResult() : EPackage {
+ return map createOverridenCallsPackage("result-in-TransfForExtends");
+}
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/expected.ecore b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/expected.ecore
new file mode 100644
index 0000000..b6228ac
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/expected.ecore
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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="mainModule-RootTransfForExtends">
+ <eClassifiers xsi:type="ecore:EClass" name="mainModule->LibForExtends-query_LibForExtends"/>
+ <eSubpackages name="mainModule-RootTransfForExtends">
+ <eClassifiers xsi:type="ecore:EClass" name="mainModule-queryStringForAccess"/>
+ </eSubpackages>
+ <eSubpackages name="RootTransfForExtends"/>
+ <eSubpackages name="result-in-MainModule">
+ <eClassifiers xsi:type="ecore:EClass" name="result-in-MainModule">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="TransfForExtends-result-in-MainModule"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="TransfForExtends->RootTransfForExtends-result-in-MainModule"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TransfForExtends-EClass::customCopy()result-in-MainModule"/>
+ <eClassifiers xsi:type="ecore:EClass" name="TransfForExtends-customCopy(in eClass : EClass)result-in-MainModule"/>
+ </eSubpackages>
+ <eSubpackages name="result-in-TransfForExtends">
+ <eClassifiers xsi:type="ecore:EClass" name="result-in-TransfForExtends">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="TransfForExtends-result-in-TransfForExtends"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="TransfForExtends->RootTransfForExtends-result-in-TransfForExtends"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TransfForExtends-EClass::customCopy()result-in-TransfForExtends"/>
+ <eClassifiers xsi:type="ecore:EClass" name="TransfForExtends-customCopy(in eClass : EClass)result-in-TransfForExtends"/>
+ </eSubpackages>
+</ecore:EPackage>
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/in.ecore b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/in.ecore
new file mode 100644
index 0000000..5511a6b
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/in.ecore
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="root"
+ nsURI="x" nsPrefix="x"/>
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/operation_override.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/operation_override.qvto
new file mode 100644
index 0000000..e267389
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/operation_override/operation_override.qvto
@@ -0,0 +1,54 @@
+import TransfForAccess;
+import LibForExtends;
+import TransfForExtends;
+
+modeltype ECORE "strict" uses ecore('http://www.eclipse.org/emf/2002/Ecore');
+
+transformation operation_override(in eModel : ECORE, out outModel : ECORE)
+ extends TransfForExtends, LibForExtends
+ access transformation TransfForAccess;
+
+
+main() {
+ var e : EPackage := object EPackage {
+ name := rootModuleQuery();
+
+ eSubpackages += object EPackage {
+ name := callRootModuleQuery();
+
+ var c: EClass;
+ eClassifiers += object c:EClass {
+ name := queryStringForAccess();
+ };
+ };
+
+ eSubpackages += object EPackage {
+ name := this.RootTransfForExtends::rootModuleQuery();
+ };
+ };
+
+ e.eSubpackages += map createOverridenCallsPackage("result-in-MainModule");
+ e.eSubpackages += callOverridenPackageResult();
+
+ e.eClassifiers += object EClass {
+ name := callQuery_LibForExtends();
+ }
+}
+
+
+helper rootModuleQuery() : String {
+ return "mainModule-RootTransfForExtends";
+}
+
+// non-overriding query local hiding of accessed query
+query queryStringForAccess() : String {
+ return "mainModule-queryStringForAccess";
+}
+
+query reusableQuery() : String {
+ return "mainModule->" + this.TransfForExtends::reusableQuery();
+}
+
+query query_LibForExtends() : String {
+ return "mainModule->LibForExtends-query_LibForExtends";
+}
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java b/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java
index d39d274..81a69a9 100644
--- a/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java
@@ -78,6 +78,7 @@
public static ModelTestData[] createTestData() {
return new ModelTestData[] {
+ new FileToFileData("operation_override"), //$NON-NLS-1$
new FileToFileData("fqnMainCalls_272937"), //$NON-NLS-1$
new FileToFileData("fqnMainCalls_271987"), //$NON-NLS-1$
new FileToFileData("fqnOperationCalls_271789"), //$NON-NLS-1$
@@ -292,7 +293,7 @@
"primtypesecore", // uses getDataTypeInstance() defined on ecore //$NON-NLS-1$
// tests using imports are excluded as the compiler never resolved imported unit
// to unitName.qvto.javaless (patched original sources)
- "import_access_extends", "import_access_extends_cfgprop", "importedvirtuals", "imports_transformations", "imports", "virt", "full", "fqntraces", // TODO import other files //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
+ "operation_override", "import_access_extends", "import_access_extends_cfgprop", "importedvirtuals", "imports_transformations", "imports", "virt", "full", "fqntraces", // TODO import other files //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
"importedInstances", "fqnOperationCalls_271789", "fqnMainCalls_271987", "fqnMainCalls_272937", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
"libraryWithModuleElements_257184", "libraryHeaderWithSignature_257575",// TODO import other files //$NON-NLS-1$ //$NON-NLS-2$