Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcgerking2015-08-17 10:58:21 +0000
committercgerking2015-08-17 11:03:05 +0000
commit343763dfca6278933aa076a07891c44b25387b96 (patch)
treef8458f89b2c4052873c7f86af38e0078dee81539
parent0890f26b14260445aa219796bfd8a0aa55e824e6 (diff)
downloadorg.eclipse.qvto-343763dfca6278933aa076a07891c44b25387b96.tar.gz
org.eclipse.qvto-343763dfca6278933aa076a07891c44b25387b96.tar.xz
org.eclipse.qvto-343763dfca6278933aa076a07891c44b25387b96.zip
[475123] Filter out overridden operations during detection of operation
collisions
-rw-r--r--plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/env/QvtEnvironmentBase.java16
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/A.qvto10
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/B.qvto14
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/C.qvto7
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/bug475123.qvto14
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java2
6 files changed, 59 insertions, 4 deletions
diff --git a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/env/QvtEnvironmentBase.java b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/env/QvtEnvironmentBase.java
index eaff057fe..0afbf1d96 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/env/QvtEnvironmentBase.java
+++ b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/env/QvtEnvironmentBase.java
@@ -8,7 +8,7 @@
*
* Contributors:
* Borland Software Corporation - initial API and implementation
- * Christopher Gerking - bugs 302594, 310991, 397959, 425069
+ * Christopher Gerking - bugs 302594, 310991, 397959, 425069, 475123
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.ast.env;
@@ -24,8 +24,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import lpg.runtime.ParseErrorCodes;
-
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.common.util.UniqueEList;
@@ -62,6 +60,8 @@ import org.eclipse.ocl.util.TypeUtil;
import org.eclipse.ocl.utilities.TypedElement;
import org.eclipse.ocl.utilities.UMLReflection;
+import lpg.runtime.ParseErrorCodes;
+
/**
* @since 2.0
@@ -612,6 +612,16 @@ public abstract class QvtEnvironmentBase extends EcoreEnvironment implements QVT
getQVTTypeResolver().collectAdditionalOperationsInTypeHierarchy(ownerType, true, operations);
}
+ // filter out overridden operations
+ for (EOperation next : new LinkedHashSet<EOperation>(operations)) {
+ if (QvtOperationalUtil.isImperativeOperation(next)) {
+ EOperation overridden = ((ImperativeOperation) next).getOverridden();
+ if (overridden != null) {
+ operations.remove(overridden);
+ }
+ }
+ }
+
for (EOperation next : operations) {
if ((next != operation) &&
(getUMLReflection().getName(next).equals(operationName) &&
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/A.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/A.qvto
new file mode 100644
index 000000000..ab5e92647
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/A.qvto
@@ -0,0 +1,10 @@
+import models.bug475123.B;
+
+library A;
+
+modeltype ecore uses 'http://www.eclipse.org/emf/2002/Ecore';
+modeltype expressions uses 'http://www.eclipse.org/qvt/1.0.0/Operational/Expressions';
+
+property nameA : String = 'a';
+
+mapping EClass::M000() : EClass { result.name := nameA; } \ No newline at end of file
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/B.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/B.qvto
new file mode 100644
index 000000000..f410cb918
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/B.qvto
@@ -0,0 +1,14 @@
+import models.bug475123.C;
+
+library B;
+
+modeltype ecore uses 'http://www.eclipse.org/emf/2002/Ecore';
+
+property nameB : String = 'b';
+
+mapping EClass::M000() : EClass { result.name := nameB; }
+
+helper EClass :: testB() : EClass {
+
+ return self.map M000();
+}
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/C.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/C.qvto
new file mode 100644
index 000000000..0bf299e6a
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/C.qvto
@@ -0,0 +1,7 @@
+library C;
+
+modeltype ecore uses 'http://www.eclipse.org/emf/2002/Ecore';
+
+property nameC : String = 'c';
+
+mapping EClass::M000() : EClass { result.name := nameC; }
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/bug475123.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/bug475123.qvto
new file mode 100644
index 000000000..0ed5524cf
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug475123/bug475123.qvto
@@ -0,0 +1,14 @@
+import models.bug475123.A;
+
+transformation bug475123();
+
+modeltype ecore uses 'http://www.eclipse.org/emf/2002/Ecore';
+
+main() {
+
+ var e1 = object EClass{};
+ var e2 = e1.testB();
+
+ assert fatal (e2.name = nameA);
+
+}
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 3c25b7d67..9aa47835a 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
@@ -667,7 +667,7 @@ public class TransformTests {
new FilesToFilesData("bug467600_OrderedSet"), //$NON-NLS-1$
new FilesToFilesData("bug467600_Sequence"), //$NON-NLS-1$
new FilesToFilesData("bug467600_Set"), //$NON-NLS-1$
- new FilesToFilesData("bug475123"), //$NON-NLS-1$
+ new FilesToFilesData("bug475123"), //$NON-NLS-1$
};
}

Back to the top