[469371] WIP towards oclAsType(ecore::EObject).eContainer()
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/oclany/OclAnyOclAsTypeOperation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/oclany/OclAnyOclAsTypeOperation.java
index 3afd0cc..5e14a30 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/oclany/OclAnyOclAsTypeOperation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/oclany/OclAnyOclAsTypeOperation.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.ocl.pivot.library.oclany;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.StandardLibrary;
@@ -40,8 +42,15 @@
if (sourceType.conformsTo(standardLibrary, argType)) {
return sourceVal;
}
- else {
- throw new InvalidValueException(PivotMessages.IncompatibleOclAsTypeSourceType, sourceType, argType);
+ EObject esSourceType = sourceType.getESObject();
+ EObject esArgType = argType.getESObject();
+ if ((esSourceType instanceof EClassifier) && (esArgType instanceof EClassifier)) {
+ Class<?> sourceClass = ((EClassifier)esSourceType).getInstanceClass();
+ Class<?> argClass = ((EClassifier)esArgType).getInstanceClass();
+ if ((sourceClass != null) && (argClass != null) && argClass.isAssignableFrom(sourceClass)) {
+ return sourceVal;
+ }
}
+ throw new InvalidValueException(PivotMessages.IncompatibleOclAsTypeSourceType, sourceType, argType);
}
}
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateConstructsTest4.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateConstructsTest4.java
index d2b3c0a..7320635 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateConstructsTest4.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateConstructsTest4.java
@@ -14,6 +14,7 @@
import java.util.Arrays;
import java.util.Collection;
+import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.pivot.tests.EvaluateUMLTest4.MyOCL;
import org.eclipse.ocl.pivot.PivotTables;
@@ -69,6 +70,12 @@
super.tearDown();
}
+ @Test public void testConstruct_eContents() throws Exception {
+ TestOCL ocl = createOCL();
+// ocl.assertQueryFalse(EcorePackage.Literals.EPACKAGE, "self.eContents()");
+ ocl.assertQueryFalse(EcorePackage.Literals.EPACKAGE, "self.oclAsType(ecore::EObject).eContents()");
+ }
+
@Test public void testConstruct_if() throws Exception {
TestOCL ocl = createOCL();
ocl.assertValidationErrorQuery(null, "if null then 1 else 2 endif",