diff options
author | cgerking | 2015-08-17 10:58:21 +0000 |
---|---|---|
committer | cgerking | 2015-08-17 11:03:05 +0000 |
commit | 343763dfca6278933aa076a07891c44b25387b96 (patch) | |
tree | f8458f89b2c4052873c7f86af38e0078dee81539 | |
parent | 0890f26b14260445aa219796bfd8a0aa55e824e6 (diff) | |
download | org.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
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$ }; } |