From 1d8e0b635ccfaac3f4f00a7979601d955f7357d6 Mon Sep 17 00:00:00 2001 From: cbrun Date: Thu, 19 Jan 2017 12:20:42 +0100 Subject: [510126] Specify types for DiagramCreationDescription Add the code and supporting test case so that the variables self, container and containerview in DiagramCreationDescription have their most specific types depending using the VSM structure Bug: 510126 Change-Id: I97922cb9cc1297411ee256fc9c3c5100593c7730 Signed-off-by: Cedric Brun --- .../DiagramInterpretedExpressionQuery.java | 35 ++++++++++++++++++++++ .../data/unit/vsm/validateVariableTypes.odesign | 13 +++++++- .../AbstractInterpretedExpressionQuery.java | 9 +++++- 3 files changed, 55 insertions(+), 2 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 04c68360ea..1729c30018 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 @@ -76,6 +76,7 @@ import org.eclipse.sirius.viewpoint.description.style.BasicLabelStyleDescription import org.eclipse.sirius.viewpoint.description.tool.EditMaskVariables; import org.eclipse.sirius.viewpoint.description.tool.ModelOperation; import org.eclipse.sirius.viewpoint.description.tool.OperationAction; +import org.eclipse.sirius.viewpoint.description.tool.RepresentationCreationDescription; import org.eclipse.sirius.viewpoint.description.tool.ToolDescription; import org.eclipse.sirius.viewpoint.description.tool.ToolPackage; @@ -268,10 +269,41 @@ public class DiagramInterpretedExpressionQuery extends AbstractInterpretedExpres collectPotentialContainerTypes(possibleContainerTypes, Sets. newLinkedHashSet(), ((ReconnectEdgeDescription) target).getMappings()); availableVariables.put(IInterpreterSiriusVariables.CONTAINER, VariableType.fromStrings(possibleContainerTypes)); } + if (target instanceof RepresentationCreationDescription) { + typeVariablesForDiagramCreationRepresentation((RepresentationCreationDescription) target, availableVariables); + } return availableVariables; } + private void typeVariablesForDiagramCreationRepresentation(RepresentationCreationDescription desc, Map availableVariables) { + Collection possibleSemanticTypes = Sets.newLinkedHashSet(); + Collection possibleViewTypes = Sets.newLinkedHashSet(); + Collection possibleContainerViewTypes = Sets.newLinkedHashSet(); + Collection possibleContainerTypes = Sets.newLinkedHashSet(); + for (DiagramElementMapping n : Iterables.filter(desc.getMappings(), DiagramElementMapping.class)) { + collectTypes(possibleSemanticTypes, possibleViewTypes, n); + collectPotentialContainerTypes(possibleContainerTypes, possibleContainerViewTypes, n); + } + refineVariableType(availableVariables, SELF, possibleSemanticTypes); + if (this.feature == ToolPackage.Literals.ABSTRACT_TOOL_DESCRIPTION__PRECONDITION) { + /* + * then we are validating the attribute expressions of the tool. + */ + availableVariables.put(IInterpreterSiriusVariables.CONTAINER, VariableType.fromStrings(possibleContainerTypes)); + availableVariables.put(IInterpreterSiriusVariables.CONTAINER_VIEW, VariableType.fromStrings(possibleContainerViewTypes)); + } else if (this.feature != ToolPackage.Literals.REPRESENTATION_CREATION_DESCRIPTION__BROWSE_EXPRESSION) { + /* + * we are in the model operations + */ + availableVariables.put(IInterpreterSiriusVariables.CONTAINER_VIEW, VariableType.fromStrings(possibleContainerViewTypes)); + if (desc.getRepresentationNameVariable() != null && !StringUtil.isEmpty(desc.getRepresentationNameVariable().getName())) { + availableVariables.put(desc.getRepresentationNameVariable().getName(), VariableType.fromJavaClass(java.lang.String.class)); // $NON-NLS-1$ + } + + } + } + private void collectEdgeCreationDescriptionVariableTypes(Map availableVariables, EdgeCreationDescription tool) { Collection possibleSemanticSources = Sets.newLinkedHashSet(); Collection possibleViewSources = Sets.newLinkedHashSet(); @@ -380,6 +412,9 @@ public class DiagramInterpretedExpressionQuery extends AbstractInterpretedExpres refineVariableType(availableVariables, tool.getElement().getName(), possibleSemanticTypes); refineVariableType(availableVariables, tool.getElementView().getName(), possibleViewTypes); } + if (toolContext instanceof RepresentationCreationDescription) { + typeVariablesForDiagramCreationRepresentation((RepresentationCreationDescription) toolContext, availableVariables); + } } } 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 ac8aefe213..d040d12dd7 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 @@ -160,7 +160,7 @@ - +