Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcbrun2017-01-10 13:24:45 +0000
committercbrun2017-01-17 14:28:44 +0000
commit00aa50842f1194003a9a870c9983583283c804a8 (patch)
tree69e4db041075bc6969ca9627e0889516154c2f48
parent7fe5a6477b9a21a09cce66ad970eeb70d4eabd1b (diff)
downloadorg.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>
-rw-r--r--plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java1
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign10
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java28
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());
+ }
}
}
}

Back to the top