diff options
author | cbrun | 2017-01-10 13:24:45 +0000 |
---|---|---|
committer | cbrun | 2017-01-17 14:28:44 +0000 |
commit | 00aa50842f1194003a9a870c9983583283c804a8 (patch) | |
tree | 69e4db041075bc6969ca9627e0889516154c2f48 | |
parent | 7fe5a6477b9a21a09cce66ad970eeb70d4eabd1b (diff) | |
download | org.eclipse.sirius-00aa50842f1194003a9a870c9983583283c804a8.tar.gz org.eclipse.sirius-00aa50842f1194003a9a870c9983583283c804a8.tar.xz org.eclipse.sirius-00aa50842f1194003a9a870c9983583283c804a8.zip |
[510126] Specify type for views variable in OperationAction
Add the code and supporting test cases so that the 'views' variable
which is available both in the attributes of an OperationAction and in
the context of the ModelOperations is typed with DSemanticDecorator.
Bug: 510126
Change-Id: Iab7550aa3e17d990df99ee9c3f1621e7f67dc356
Signed-off-by: Cedric Brun <cedric.brun@obeo.fr>
3 files changed, 31 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java index c43fa2a252..600410517b 100644 --- a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java +++ b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java @@ -299,6 +299,7 @@ public class DiagramInterpretedExpressionQuery extends AbstractInterpretedExpres if (new EObjectQuery(tool).getFirstAncestorOfType(DescriptionPackage.Literals.DIAGRAM_DESCRIPTION).some()) { availableVariables.put("diagram", VariableType.fromString(DIAGRAM_D_SEMANTIC_DIAGRAM)); //$NON-NLS-1$ } + availableVariables.put("views", VariableType.fromString("viewpoint.DSemanticDecorator")); //$NON-NLS-1$ //$NON-NLS-2$ } } } 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 4ee35b6186..5c6ae111db 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 @@ -437,6 +437,16 @@ </firstModelOperations> </initialOperation> </ownedTools> + <ownedTools xsi:type="tool:PopupMenu" name="A Menu"> + <menuItemDescription xsi:type="tool:OperationAction" name="Some Operation" precondition="aql:views.target->size() > 0" elementsToSelect="aql:views.target->first()"> + <view name="views"/> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:views"> + <subModelOperations xsi:type="tool:ChangeContext" browseExpression="feature:target"/> + </firstModelOperations> + </initialOperation> + </menuItemDescription> + </ownedTools> <subSections name="Ignored"> <ownedTools xsi:type="tool_1:DirectEditLabel" name="ElementType"> <mask mask="{0}"/> 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 e5a6ef79d7..e3392b0587 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 @@ -48,6 +48,7 @@ import org.eclipse.sirius.viewpoint.description.tool.For; import org.eclipse.sirius.viewpoint.description.tool.If; import org.eclipse.sirius.viewpoint.description.tool.InitialOperation; import org.eclipse.sirius.viewpoint.description.tool.ModelOperation; +import org.eclipse.sirius.viewpoint.description.tool.OperationAction; import org.eclipse.sirius.viewpoint.description.tool.ToolDescription; import org.eclipse.sirius.viewpoint.description.tool.ToolPackage; import org.eclipse.sirius.viewpoint.description.tool.VariableContainer; @@ -385,16 +386,27 @@ public abstract class AbstractInterpretedExpressionQuery implements IInterpreted */ found = new EObjectQuery(target).getFirstAncestorOfType(org.eclipse.sirius.viewpoint.description.validation.ValidationPackage.eINSTANCE.getValidationRule()); if (!found.some()) { - found = new EObjectQuery(target).getFirstAncestorOfType(ToolPackage.eINSTANCE.getAbstractToolDescription()); - if (found.some() && found.get() instanceof ExternalJavaAction) { + if (this.target instanceof OperationAction) { /* - * an ExternalJavaAction is a special case as it can also be - * embedded as an Operation. We need to make sure it is not the - * case. + * OperationAction represents its own context for its + * interpreted expression attributes, the variables which are + * child of the OperationAction instance (like 'views') are + * available in the precondition and elements to select + * expressions. */ - EObject container = found.get().eContainer(); - if (container instanceof ModelOperation || container instanceof InitialOperation) { - found = new EObjectQuery(container).getFirstAncestorOfType(ToolPackage.eINSTANCE.getAbstractToolDescription()); + found = Options.fromNullable(this.target); + } else { + found = new EObjectQuery(target).getFirstAncestorOfType(ToolPackage.eINSTANCE.getAbstractToolDescription()); + if (found.some() && found.get() instanceof ExternalJavaAction) { + /* + * an ExternalJavaAction is a special case as it can also be + * embedded as an Operation. We need to make sure it is not + * the case. + */ + EObject container = found.get().eContainer(); + if (container instanceof ModelOperation || container instanceof InitialOperation) { + found = new EObjectQuery(container).getFirstAncestorOfType(ToolPackage.eINSTANCE.getAbstractToolDescription()); + } } } } |