Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java')
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java20
1 files changed, 20 insertions, 0 deletions
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java
index 44162885e..2d9fe97d1 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java
@@ -23,8 +23,10 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.pivot.DataType;
import org.eclipse.ocl.pivot.OCLExpression;
import org.eclipse.ocl.pivot.Property;
+import org.eclipse.ocl.pivot.Type;
import org.eclipse.ocl.pivot.Variable;
import org.eclipse.ocl.pivot.resource.ASResource;
import org.eclipse.ocl.pivot.VariableDeclaration;
@@ -376,6 +378,24 @@ public class QVTrelationUtil extends QVTtemplateUtil
// return ClassUtil.nonNullState(rRelation.getWhere());
// }
+ /**
+ * Return true if one of the non-primitive domains has a DataType root variable. This will need a SharedEdge
+ * to enforce the DataType-to-singleton mapping.
+ */
+ public static boolean isDataTypeRelation(@NonNull Relation relation) {
+ for (@NonNull RelationDomain relationDomain : QVTrelationUtil.getOwnedDomains(relation)) {
+ if (!getTypedModel(relationDomain).isIsPrimitive()) {
+ for (@NonNull VariableDeclaration rootVariable : getRootVariables(relationDomain)) {
+ Type rootType = QVTrelationUtil.getType(rootVariable);
+ if (rootType instanceof DataType) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
public static boolean isTraceClassVariable(@NonNull VariableDeclaration variable) {
return TRACE_CLASS_NAME.equals(variable.getName()) && (variable instanceof SharedVariable) && ((SharedVariable)variable).isIsImplicit();
}

Back to the top