Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd.Willink2013-02-02 20:22:24 +0000
committerEd.Willink2013-02-02 20:23:57 +0000
commit40510f38ff669787bbd5c25986a4fc8bab25a9b9 (patch)
tree253f07dcdd60b2b2b37502e45a02e296c8af122a
parent15ccd2dfa327e700feaf8a51808c145b84acb417 (diff)
downloadorg.eclipse.qvtd-40510f38ff669787bbd5c25986a4fc8bab25a9b9.tar.gz
org.eclipse.qvtd-40510f38ff669787bbd5c25986a4fc8bab25a9b9.tar.xz
org.eclipse.qvtd-40510f38ff669787bbd5c25986a4fc8bab25a9b9.zip
[unrelated] Fix validation errors, primitive type rootVariable
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/attributes/RelationCallExpCSAttribution.java6
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationContainmentVisitor.java41
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationLeft2RightVisitor.java49
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationPostOrderVisitor.java37
4 files changed, 120 insertions, 13 deletions
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/attributes/RelationCallExpCSAttribution.java b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/attributes/RelationCallExpCSAttribution.java
index a04490e16..3708a17f0 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/attributes/RelationCallExpCSAttribution.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/attributes/RelationCallExpCSAttribution.java
@@ -26,7 +26,6 @@ import org.eclipse.ocl.examples.pivot.CallExp;
import org.eclipse.ocl.examples.pivot.OCLExpression;
import org.eclipse.ocl.examples.pivot.PivotPackage;
import org.eclipse.ocl.examples.pivot.Type;
-import org.eclipse.ocl.examples.pivot.manager.MetaModelManager;
import org.eclipse.ocl.examples.pivot.scoping.EnvironmentView;
import org.eclipse.ocl.examples.pivot.scoping.ScopeFilter;
import org.eclipse.ocl.examples.pivot.scoping.ScopeView;
@@ -53,9 +52,8 @@ public class RelationCallExpCSAttribution extends InvocationExpCSAttribution
}
@Override
-// @Deprecated // going obsolete
- protected @NonNull ScopeFilter createInvocationFilter(@NonNull MetaModelManager metaModelManager, @NonNull InvocationExpCS targetElement, @Nullable Type type) {
- return new OperationFilter(metaModelManager, type, targetElement)
+ protected @NonNull ScopeFilter createInvocationFilter(@NonNull InvocationExpCS targetElement, @Nullable Type type) {
+ return new OperationFilter(type, targetElement)
{
@Override
public boolean matches(@NonNull EnvironmentView environmentView, @NonNull DomainElement eObject) {
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationContainmentVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationContainmentVisitor.java
index 1b9ad3d3e..a278c3afd 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationContainmentVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationContainmentVisitor.java
@@ -107,12 +107,6 @@ public class QVTrelationContainmentVisitor extends AbstractQVTrelationContainmen
@NonNull DomainElement match2, @Nullable Map<TemplateParameter, ParameterableElement> bindings2) {
return 0;
}
-
- @Deprecated // Going obsolete
- public int compareMatches(@NonNull DomainElement match1, @Nullable Map<TemplateParameter, ParameterableElement> bindings1,
- @NonNull DomainElement match2, @Nullable Map<TemplateParameter, ParameterableElement> bindings2) {
- return 0;
- }
public boolean matches(@NonNull EnvironmentView environmentView, @NonNull DomainElement eObject) {
return (eObject instanceof Operation) || (eObject instanceof Rule);
@@ -279,6 +273,15 @@ public class QVTrelationContainmentVisitor extends AbstractQVTrelationContainmen
if (pivotElement != null) {
pivotElement.setPattern(PivotUtil.getPivot(DomainPattern.class, csElement.getPattern()));
context.refreshPivotList(RelationDomainAssignment.class, pivotElement.getDefaultAssignment(), csElement.getDefaultValues());
+ Variable rootVariable = null;
+ DomainPattern rootPattern = pivotElement.getPattern();
+ if (rootPattern != null) {
+ TemplateExp rootTemplate = rootPattern.getTemplateExpression();
+ if (rootTemplate != null) {
+ rootVariable = rootTemplate.getBindsTo();
+ }
+ }
+ pivotElement.setRootVariable(rootVariable);
}
return new DomainContentContinuation(context, csElement);
}
@@ -388,8 +391,23 @@ public class QVTrelationContainmentVisitor extends AbstractQVTrelationContainmen
@Override
public Continuation<?> visitPrimitiveTypeDomainCS(@NonNull PrimitiveTypeDomainCS csElement) {
- @SuppressWarnings("unused")
RelationDomain pivotElement = context.refreshModelElement(RelationDomain.class, QVTrelationPackage.Literals.RELATION_DOMAIN, csElement);
+ if (pivotElement != null) {
+ DomainPattern pattern = context.refreshModelElement(DomainPattern.class, QVTrelationPackage.Literals.DOMAIN_PATTERN, null);
+ if (pattern != null) {
+ pivotElement.setPattern(pattern);
+ TemplateExp template = context.refreshModelElement(TemplateExp.class, QVTtemplatePackage.Literals.OBJECT_TEMPLATE_EXP, null);
+ if (template != null) {
+ pattern.setTemplateExpression(template);
+ Variable rootVariable = context.refreshModelElement(Variable.class, PivotPackage.Literals.VARIABLE, null);
+ if (rootVariable != null) {
+ context.refreshName(rootVariable, csElement.getName());
+ template.setBindsTo(rootVariable);
+ }
+ pivotElement.setRootVariable(rootVariable);
+ }
+ }
+ }
return null;
}
@@ -426,13 +444,20 @@ public class QVTrelationContainmentVisitor extends AbstractQVTrelationContainmen
}
}
for (Domain domain : pivotElement.getDomain()) {
- DomainPattern pattern = ((RelationDomain)domain).getPattern();
+ RelationDomain relationDomain = (RelationDomain)domain;
+ DomainPattern pattern = relationDomain.getPattern();
if (pattern != null) {
TemplateExp templateExpression = pattern.getTemplateExpression();
if (templateExpression != null) {
gatherVariables(pivotVariables, templateExpression);
}
}
+ else {
+ Variable variable = relationDomain.getRootVariable();
+ if (variable != null) {
+ pivotVariables.add(variable);
+ }
+ }
}
PivotUtil.refreshList(pivotElement.getVariable(), pivotVariables);
pivotElement.setWhen(PivotUtil.getPivot(Pattern.class, csElement.getWhen()));
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationLeft2RightVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationLeft2RightVisitor.java
index 83685395c..f96f20b64 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationLeft2RightVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationLeft2RightVisitor.java
@@ -14,8 +14,12 @@
*/
package org.eclipse.qvtd.xtext.qvtrelation.cs2pivot;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.examples.domain.utilities.DomainUtil;
import org.eclipse.ocl.examples.pivot.Element;
import org.eclipse.ocl.examples.pivot.Feature;
import org.eclipse.ocl.examples.pivot.NamedElement;
@@ -23,17 +27,23 @@ import org.eclipse.ocl.examples.pivot.OCLExpression;
import org.eclipse.ocl.examples.pivot.OperationCallExp;
import org.eclipse.ocl.examples.pivot.PivotPackage;
import org.eclipse.ocl.examples.pivot.VariableDeclaration;
+import org.eclipse.ocl.examples.pivot.messages.OCLMessages;
import org.eclipse.ocl.examples.pivot.utilities.PivotUtil;
import org.eclipse.ocl.examples.xtext.base.baseCST.ModelElementCS;
import org.eclipse.ocl.examples.xtext.base.cs2pivot.CS2PivotConversion;
import org.eclipse.ocl.examples.xtext.essentialocl.essentialOCLCST.InvocationExpCS;
+import org.eclipse.ocl.examples.xtext.essentialocl.essentialOCLCST.NavigatingArgCS;
+import org.eclipse.ocl.examples.xtext.essentialocl.essentialOCLCST.NavigationRole;
+import org.eclipse.qvtd.pivot.qvtbase.Domain;
import org.eclipse.qvtd.pivot.qvtbase.Function;
import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage;
import org.eclipse.qvtd.pivot.qvtrelation.Relation;
import org.eclipse.qvtd.pivot.qvtrelation.RelationCallExp;
+import org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment;
import org.eclipse.qvtd.pivot.qvttemplate.CollectionTemplateExp;
import org.eclipse.qvtd.pivot.qvttemplate.ObjectTemplateExp;
import org.eclipse.qvtd.xtext.qvtrelationcst.CollectionTemplateCS;
+import org.eclipse.qvtd.xtext.qvtrelationcst.DefaultValueCS;
import org.eclipse.qvtd.xtext.qvtrelationcst.ObjectTemplateCS;
public class QVTrelationLeft2RightVisitor extends AbstractQVTrelationLeft2RightVisitor
@@ -57,6 +67,7 @@ public class QVTrelationLeft2RightVisitor extends AbstractQVTrelationLeft2RightV
RelationCallExp relationCallExp = context.refreshModelElement(RelationCallExp.class, QVTrelationPackage.Literals.RELATION_CALL_EXP, csInvocationExp);
if (relationCallExp != null) {
relationCallExp.setReferredRelation(relation);
+ resolveRelationArguments(csInvocationExp, null, relation, relationCallExp);
context.installPivotUsage(csInvocationExp, relationCallExp);
return relationCallExp;
}
@@ -81,6 +92,38 @@ public class QVTrelationLeft2RightVisitor extends AbstractQVTrelationLeft2RightV
}
return super.resolveOperationReference(namedElement, csInvocationExp);
}
+
+ protected void resolveRelationArguments(@NonNull InvocationExpCS csInvocationExp,
+ @Nullable OCLExpression source, @NonNull Relation relation, @NonNull RelationCallExp relationCallExp) {
+ List<OCLExpression> pivotArguments = new ArrayList<OCLExpression>();
+ List<NavigatingArgCS> csArguments = csInvocationExp.getArgument();
+ List<Domain> ownedDomains = relation.getDomain();
+ int domainsCount = ownedDomains.size();
+ int csArgumentCount = csArguments.size();
+ if (csArgumentCount > 0) {
+ if (csArguments.get(0).getRole() != NavigationRole.EXPRESSION) {
+ context.addDiagnostic(csInvocationExp, "Relation calls can only specify expressions");
+ }
+ for (int argIndex = 0; argIndex < csArgumentCount; argIndex++) {
+ NavigatingArgCS csArgument = csArguments.get(argIndex);
+ if (csArgument.getInit() != null) {
+ context.addDiagnostic(csArgument, "Unexpected initializer for expression");
+ }
+ if (csArgument.getOwnedType() != null) {
+ context.addDiagnostic(csArgument, "Unexpected type for expression");
+ }
+ OCLExpression arg = PivotUtil.getPivot(OCLExpression.class, csArgument);
+ if (arg != null) {
+ pivotArguments.add(arg);
+ }
+ }
+ }
+ if ((csArgumentCount != domainsCount) && (relation != getBadOperation())) {
+ String boundMessage = DomainUtil.bind(OCLMessages.MismatchedArgumentCount_ERROR_, csArgumentCount, domainsCount);
+ context.addDiagnostic(csInvocationExp, boundMessage);
+ }
+ context.refreshList(relationCallExp.getArgument(), pivotArguments);
+ }
@Override
public Element visitCollectionTemplateCS(@NonNull CollectionTemplateCS csElement) {
@@ -88,6 +131,12 @@ public class QVTrelationLeft2RightVisitor extends AbstractQVTrelationLeft2RightV
}
@Override
+ public Element visitDefaultValueCS(@NonNull DefaultValueCS csElement) {
+ RelationDomainAssignment pivotElement = PivotUtil.getPivot(RelationDomainAssignment.class, csElement);
+ return pivotElement;
+ }
+
+ @Override
public Element visitObjectTemplateCS(@NonNull ObjectTemplateCS csElement) {
return PivotUtil.getPivot(ObjectTemplateExp.class, csElement);
}
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationPostOrderVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationPostOrderVisitor.java
index 262311085..4bebebd29 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationPostOrderVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2pivot/QVTrelationPostOrderVisitor.java
@@ -30,11 +30,15 @@ import org.eclipse.ocl.examples.xtext.base.cs2pivot.SingleContinuation;
import org.eclipse.ocl.examples.xtext.essentialocl.essentialOCLCST.ExpCS;
import org.eclipse.qvtd.pivot.qvtbase.Function;
import org.eclipse.qvtd.pivot.qvtbase.Predicate;
+import org.eclipse.qvtd.pivot.qvtrelation.DomainPattern;
+import org.eclipse.qvtd.pivot.qvtrelation.RelationDomain;
import org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment;
+import org.eclipse.qvtd.pivot.qvttemplate.ObjectTemplateExp;
import org.eclipse.qvtd.pivot.qvttemplate.PropertyTemplateItem;
import org.eclipse.qvtd.pivot.qvttemplate.TemplateExp;
import org.eclipse.qvtd.xtext.qvtrelationcst.DefaultValueCS;
import org.eclipse.qvtd.xtext.qvtrelationcst.PredicateCS;
+import org.eclipse.qvtd.xtext.qvtrelationcst.PrimitiveTypeDomainCS;
import org.eclipse.qvtd.xtext.qvtrelationcst.PropertyTemplateCS;
import org.eclipse.qvtd.xtext.qvtrelationcst.QueryCS;
import org.eclipse.qvtd.xtext.qvtrelationcst.TemplateCS;
@@ -138,11 +142,42 @@ public class QVTrelationPostOrderVisitor extends AbstractQVTrelationPostOrderVis
}
@Override
+ public Continuation<?> visitDefaultValueCS(@NonNull DefaultValueCS csElement) {
+ RelationDomainAssignment pivotElement = PivotUtil.getPivot(RelationDomainAssignment.class, csElement);
+ if (pivotElement != null) {
+ ExpCS initialiser = csElement.getInitialiser();
+ OCLExpression oclExpression = initialiser != null ? context.visitLeft2Right(OCLExpression.class, initialiser) : null;
+ pivotElement.setValueExp(oclExpression);
+ }
+ return null;
+ }
+
+ @Override
public Continuation<?> visitPredicateCS(@NonNull PredicateCS csElement) {
return new PredicateExpressionCompletion(context, csElement);
}
@Override
+ public Continuation<?> visitPrimitiveTypeDomainCS(@NonNull PrimitiveTypeDomainCS csElement) {
+ RelationDomain pivotElement = PivotUtil.getPivot(RelationDomain.class, csElement);
+ if (pivotElement != null) {
+ Type type = PivotUtil.getPivot(Type.class, csElement.getType());
+ Variable rootVariable = pivotElement.getRootVariable();
+ if (rootVariable != null) {
+ context.setType(rootVariable, type, true);
+ }
+ DomainPattern pattern = pivotElement.getPattern();
+ if (pattern != null) {
+ TemplateExp template = pattern.getTemplateExpression();
+ if (template instanceof ObjectTemplateExp) {
+ ((ObjectTemplateExp)template).setReferredClass((org.eclipse.ocl.examples.pivot.Class)type);
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
public Continuation<?> visitPropertyTemplateCS(@NonNull PropertyTemplateCS csElement) {
return new PropertyTemplateExpressionCompletion(context, csElement);
}
@@ -166,7 +201,7 @@ public class QVTrelationPostOrderVisitor extends AbstractQVTrelationPostOrderVis
for (VarDeclarationIdCS csVarDeclarationId : csElement.getVarDeclarationIds()) {
Variable pivotVariable = PivotUtil.getPivot(Variable.class, csVarDeclarationId);
if (pivotVariable != null) {
- context.setType(pivotVariable, pivotType);
+ context.setType(pivotVariable, pivotType, false);
}
}
return null;

Back to the top