Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcbrun2017-01-18 15:41:37 +0000
committercbrun2017-02-01 16:41:45 +0000
commit221f7c18b29aa15ac627bc8fcf78e06a602eedcd (patch)
tree1e7edddb7a8c1208d666f04c69a70c7130ec72ad
parent98974c7851a4f1e4fb3ecbc6b309336b545109c3 (diff)
downloadorg.eclipse.sirius-221f7c18b29aa15ac627bc8fcf78e06a602eedcd.tar.gz
org.eclipse.sirius-221f7c18b29aa15ac627bc8fcf78e06a602eedcd.tar.xz
org.eclipse.sirius-221f7c18b29aa15ac627bc8fcf78e06a602eedcd.zip
[510126] Use predicate type inference for Switch/Case
Add the code and supporting test case so that the predicate which is currently valid when we are in the context of a 'Case' is used to infer more specific types. Bug: 510126 Change-Id: I335e1fb158502a0a79960a858510499553b97e53 Signed-off-by: Cedric Brun <cedric.brun@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign15
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java15
2 files changed, 30 insertions, 0 deletions
diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign b/plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign
index 6b31cd40c3..7fbf3fdf80 100644
--- a/plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign
+++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign
@@ -450,6 +450,21 @@
<subModelOperations xsi:type="tool:If" conditionExpression="aql:not self.oclIsKindOf(interactions::Interaction)">
<subModelOperations xsi:type="tool:ChangeContext" browseExpression="feature:type"/>
</subModelOperations>
+ <subModelOperations xsi:type="tool:Switch">
+ <cases conditionExpression="aql:self.oclIsKindOf(interactions::Interaction)">
+ <subModelOperations xsi:type="tool:ChangeContext" browseExpression="feature:executions"/>
+ </cases>
+ <cases conditionExpression="aql:self.oclIsKindOf(interactions::Participant)">
+ <subModelOperations xsi:type="tool:ChangeContext" browseExpression="feature:type"/>
+ </cases>
+ <cases conditionExpression="aql:self.name &lt;> null and self.oclIsKindOf(interactions::Interaction)">
+ <subModelOperations xsi:type="tool:ChangeContext" browseExpression="feature:executions"/>
+ </cases>
+ <cases conditionExpression="aql:not self.oclIsKindOf(interactions::Interaction)">
+ <subModelOperations xsi:type="tool:ChangeContext" browseExpression="feature:type"/>
+ </cases>
+ <default/>
+ </subModelOperations>
</firstModelOperations>
</initialOperation>
</ownedTools>
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java
index 4f4c170f53..d51660bce1 100644
--- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java
+++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java
@@ -42,6 +42,7 @@ import org.eclipse.sirius.viewpoint.description.RepresentationDescription;
import org.eclipse.sirius.viewpoint.description.Viewpoint;
import org.eclipse.sirius.viewpoint.description.tool.AbstractToolDescription;
import org.eclipse.sirius.viewpoint.description.tool.AcceleoVariable;
+import org.eclipse.sirius.viewpoint.description.tool.Case;
import org.eclipse.sirius.viewpoint.description.tool.ChangeContext;
import org.eclipse.sirius.viewpoint.description.tool.CreateInstance;
import org.eclipse.sirius.viewpoint.description.tool.EditMaskVariables;
@@ -535,6 +536,20 @@ public abstract class AbstractInterpretedExpressionQuery implements IInterpreted
}
}
+ if (current instanceof Case) {
+ Case switchCase = (Case) current;
+ IInterpreterContext caseContext = SiriusInterpreterContextFactory.createInterpreterContext(switchCase, ToolPackage.Literals.CASE__CONDITION_EXPRESSION);
+ ValidationResult res = MultiLanguagesValidator.getInstance().validateExpression(caseContext, switchCase.getConditionExpression());
+ Map<String, VariableType> inferedTypes = res.getInferredVariableTypes(Boolean.TRUE);
+ for (Entry<String, VariableType> infered : inferedTypes.entrySet()) {
+ if (SELF.equals(infered.getKey())) {
+ changeSelfType(infered.getValue());
+ } else {
+ addDefinition(definitions, infered.getKey(), infered.getValue());
+ }
+
+ }
+ }
if (current instanceof ChangeContext) {
ChangeContext f = (ChangeContext) current;

Back to the top