Merge changes I077cb946,Ice0f806c,I3582ae0a
* changes:
OCL2AC to Henshin: tool plug-in.
Change-Id: I0000000000000000000000000000000000000000
test for preparing the integration of OCL2AC into Henshin
diff --git a/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/providers/HenshinMarkerNavigationProvider.java b/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/providers/HenshinMarkerNavigationProvider.java
index ecc0ccb..a04d8c6 100644
--- a/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/providers/HenshinMarkerNavigationProvider.java
+++ b/plugins/org.eclipse.emf.henshin.diagram/src/org/eclipse/emf/henshin/diagram/providers/HenshinMarkerNavigationProvider.java
@@ -68,10 +68,10 @@
/**
* @generated
*/
- public static IMarker addMarker(IFile file, String elementId, String location, String message, int statusSeverity) {
+ public static IMarker addMarker(IResource ressource, String elementId, String location, String message, int statusSeverity) {
IMarker marker = null;
try {
- marker = file.createMarker(MARKER_TYPE);
+ marker = ressource.createMarker(MARKER_TYPE);
marker.setAttribute(IMarker.MESSAGE, message);
marker.setAttribute(IMarker.LOCATION, location);
marker.setAttribute(org.eclipse.gmf.runtime.common.ui.resources.IMarker.ELEMENT_ID, elementId);
diff --git a/plugins/org.eclipse.emf.henshin.interpreter.ui/src/org/eclipse/emf/henshin/interpreter/ui/debug/LaunchRuleDelegate.java b/plugins/org.eclipse.emf.henshin.interpreter.ui/src/org/eclipse/emf/henshin/interpreter/ui/debug/LaunchRuleDelegate.java
index d833ef9..4f877b8 100644
--- a/plugins/org.eclipse.emf.henshin.interpreter.ui/src/org/eclipse/emf/henshin/interpreter/ui/debug/LaunchRuleDelegate.java
+++ b/plugins/org.eclipse.emf.henshin.interpreter.ui/src/org/eclipse/emf/henshin/interpreter/ui/debug/LaunchRuleDelegate.java
@@ -15,6 +15,7 @@
import org.eclipse.compare.internal.CompareAction;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
@@ -211,7 +212,15 @@
}
});
- engine.getDebugTarget().initTarget(applicationCondition, findResourceForModulePath(modulePath));
+ IResource moduleResource;
+ if (moduleUri.isPlatform()) {
+ moduleResource = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(moduleUri.toPlatformString(true)));
+ }
+ else
+ {
+ moduleResource = findResourceForModulePath(modulePath);
+ }
+ engine.getDebugTarget().initTarget(applicationCondition, moduleResource);
launch.addDebugTarget(engine.getDebugTarget());
applicationCondition.initNextVariable();
diff --git a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/debug/HenshinDebugTarget.java b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/debug/HenshinDebugTarget.java
index ba957db..928596d 100644
--- a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/debug/HenshinDebugTarget.java
+++ b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/debug/HenshinDebugTarget.java
@@ -2,6 +2,7 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarkerDelta;
+import org.eclipse.core.resources.IResource;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
@@ -23,7 +24,7 @@
*/
private HenshinDebugThread debugThread;
- private IFile moduleFile;
+ private IResource moduleResource;
/**
* The DebugTarget's name (displays in the debug view)
@@ -53,9 +54,9 @@
* Connects the given DebugApplicationCondition to this DebugTarget
* @param applicationCondition the DebugApplicationCondition that will be used for debugging.
*/
- public void initTarget(DebugApplicationCondition applicationCondition, IFile moduleFile) {
+ public void initTarget(DebugApplicationCondition applicationCondition, IResource moduleFile) {
this.debugThread = new HenshinDebugThread(this, applicationCondition);
- this.moduleFile = moduleFile;
+ this.moduleResource = moduleFile;
fireCreationEvent();
}
@@ -69,8 +70,8 @@
return this;
}
- public IFile getModuleFile() {
- return this.moduleFile;
+ public IResource getModuleResource() {
+ return this.moduleResource;
}
@Override
diff --git a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/impl/ChangeImpl.java b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/impl/ChangeImpl.java
index b83f313..d239182 100644
--- a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/impl/ChangeImpl.java
+++ b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/impl/ChangeImpl.java
@@ -16,6 +16,7 @@
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.henshin.interpreter.Change;
import org.eclipse.emf.henshin.interpreter.EGraph;
import org.eclipse.emf.henshin.interpreter.util.InterpreterUtil;
@@ -112,15 +113,26 @@
private EAttribute attribute;
private Object oldValue;
private Object newValue;
+ /**
+ * The semantics of deleting an attribute is to unset it.
+ */
+ private boolean delete;
private boolean initialized;
+ private boolean revert = false;
public AttributeChangeImpl(EGraph graph, EObject object, EAttribute attribute, Object newValue) {
super(graph);
this.object = object;
this.attribute = attribute;
this.newValue = newValue;
+ this.delete = false;
this.initialized = false;
}
+
+ public AttributeChangeImpl(EGraph graph, EObject object, EAttribute attribute) {
+ this(graph, object, attribute, null);
+ this.delete = true;
+ }
/*
* (non-Javadoc)
@@ -132,8 +144,9 @@
// Need to initialize?
if (!initialized && attribute != null) {
oldValue = object.eGet(attribute);
- if ((oldValue==null && newValue==null) ||
- (oldValue!=null && oldValue.equals(newValue))) {
+ if (!delete
+ && ((oldValue==null && newValue==null)
+ || (oldValue!=null && oldValue.equals(newValue)))) {
attribute = null;
}
}
@@ -141,7 +154,9 @@
if (attribute==null) {
return;
}
- if (attribute.isMany()) {
+ if (delete && !revert) {
+ object.eUnset(attribute);
+ } else if (attribute.isMany()) {
List values = (List) object.eGet(attribute);
values.clear();
if (newValue instanceof List) {
@@ -155,6 +170,7 @@
java.lang.Object dummy = oldValue;
oldValue = newValue;
newValue = dummy;
+ revert = !revert;
}
/*
@@ -191,8 +207,7 @@
@Override
public Object getNewValue() {
return newValue;
- }
-
+ }
}
/**
diff --git a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/impl/EngineImpl.java b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/impl/EngineImpl.java
index 0f5c612..f1f0091 100644
--- a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/impl/EngineImpl.java
+++ b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/impl/EngineImpl.java
@@ -986,6 +986,12 @@
}
}
}
+
+ // Deleted (unset) attributes:
+ for (Attribute attribute : ruleChange.getDeletedAttributes()) {
+ EObject object = completeMatch.getNodeTarget(attribute.getNode());
+ changes.add(new AttributeChangeImpl(graph, object, attribute.getType()));
+ }
// Preserved objects:
for (Node node : ruleChange.getPreservedNodes()) {
diff --git a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/info/RuleChangeInfo.java b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/info/RuleChangeInfo.java
index 3626354..01bc7d0 100644
--- a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/info/RuleChangeInfo.java
+++ b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/info/RuleChangeInfo.java
@@ -12,15 +12,19 @@
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.henshin.model.Attribute;
import org.eclipse.emf.henshin.model.Edge;
import org.eclipse.emf.henshin.model.Node;
+import org.eclipse.emf.henshin.model.Parameter;
+import org.eclipse.emf.henshin.model.ParameterKind;
import org.eclipse.emf.henshin.model.Rule;
public class RuleChangeInfo {
private final List<Node> createdNodes;
private final List<Node> deletedNodes;
+ private final List<Attribute> deletedAttributes;
private final List<Node> preservedNodes;
private final List<Edge> createdEdges;
private final List<Edge> deletedEdges;
@@ -30,19 +34,34 @@
public RuleChangeInfo(Rule rule) {
createdNodes = new ArrayList<Node>();
deletedNodes = new ArrayList<Node>();
+ deletedAttributes = new ArrayList<Attribute>();
preservedNodes = new ArrayList<Node>();
createdEdges = new ArrayList<Edge>();
deletedEdges = new ArrayList<Edge>();
attributeChanges = new ArrayList<Attribute>();
indexChanges = new ArrayList<Edge>();
- // Deleted nodes:
+ // Deleted nodes; deleted attributes:
for (Node node : rule.getLhs().getNodes()) {
if (rule.getMultiMappings().getOrigin(node)!=null) {
continue;
}
- if (rule.getMappings().getImage(node, rule.getRhs())==null) {
+ Node image = rule.getMappings().getImage(node, rule.getRhs());
+ if (image==null) {
deletedNodes.add(node);
+ } else {
+ for (Attribute attribute : node.getAttributes()) {
+ boolean attributeDeleted = image.getAttribute(attribute.getType()) == null;
+ if (attributeDeleted) {
+ if (attribute.getType().isUnsettable()
+ && isAttributeChangeable(attribute)) {
+ deletedAttributes.add(attribute);
+ } else {
+ throw new IllegalStateException("Cannot delete attribute which is unsetable"
+ + " or not changeable.");
+ }
+ }
+ }
}
}
@@ -51,13 +70,23 @@
if (rule.getMultiMappings().getOrigin(node)!=null) {
continue;
}
- if (rule.getMappings().getOrigin(node)==null) {
+ Node origin = rule.getMappings().getOrigin(node);
+
+ if (origin==null) {
createdNodes.add(node);
} else {
preservedNodes.add(node);
}
for (Attribute attribute : node.getAttributes()) {
- attributeChanges.add(attribute);
+ boolean attributeChanged = hasAttributeChanged(rule, origin, attribute);
+ if (attributeChanged) {
+ if (isAttributeChangeable(attribute)) {
+ attributeChanges.add(attribute);
+ } else {
+ throw new IllegalStateException("Cannot assign a value to derived or "
+ + "unchangeable attribute.");
+ }
+ }
}
}
@@ -82,8 +111,32 @@
if (edge.getIndex()!=null && edge.getIndex().trim().length()>0) {
indexChanges.add(edge);
}
+ }
+ }
+
+ /**
+ * Returns whether the value of the given attribute has changed.
+ * @param rule rule containing the attribute
+ * @param origin the LHS node mapped to the RHS node containing the given attribute
+ * @param attribute attribute of an RHS node
+ * @return true if the attribute value has changed - false otherwise
+ */
+ private boolean hasAttributeChanged(Rule rule, Node origin, Attribute attribute) {
+ boolean changed;
+ // Attribute has been created explicitly; value assignment expected
+ if (origin == null) {
+ changed = true;
+ //Attribute preserved but value changed
+ } else {
+ Attribute originAttribute = origin.getAttribute(attribute.getType());
+ changed =!( originAttribute != null
+ && originAttribute.getValue().equals(attribute.getValue()));
}
-
+ return changed;
+ }
+
+ private boolean isAttributeChangeable(Attribute attribute) {
+ return !attribute.getType().isDerived() && attribute.getType().isChangeable();
}
/**
@@ -115,6 +168,13 @@
}
/**
+ * @return the deletedAttributes
+ */
+ public List<Attribute> getDeletedAttributes() {
+ return deletedAttributes;
+ }
+
+ /**
* @return the attributeChanges
*/
public List<Attribute> getAttributeChanges() {
diff --git a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/matching/conditions/DebugApplicationCondition.java b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/matching/conditions/DebugApplicationCondition.java
index 3e873c2..75849d2 100644
--- a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/matching/conditions/DebugApplicationCondition.java
+++ b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/matching/conditions/DebugApplicationCondition.java
@@ -9,6 +9,7 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.debug.core.DebugEvent;
@@ -180,12 +181,15 @@
if (variable.requiresFinalCheck) {
DomainSlot slot = domainMap.get(variable);
if (!slot.recheck(variable, domainMap)) {
- // recheck turned out invalid --> terminate (no match found)
+ // recheck turned out invalid --> go back
+ updateDebugState(DebugLevel.VARIABLE, currentVariableIndex-1, ConstraintType.NONE, -1);
+ tryNextValue();
+/* // recheck turned out invalid --> terminate (no match found)
updateDebugState(DebugLevel.NONE, -1, ConstraintType.NONE, -1);
setCurrentDebugState(DebugState.TERMINATED_FALSE);
if (debugTarget != null) {
debugTarget.fireTerminateEvent();
- }
+ }*/
return;
}
}
@@ -211,12 +215,15 @@
return;
}
- // else: final evaluation was not successful --> terminate (no match found)
+ // else formula did not work, go back to last variable
+ updateDebugState(DebugLevel.VARIABLE, currentVariableIndex-1, ConstraintType.NONE, -1);
+ tryNextValue();
+/* // else: final evaluation was not successful --> terminate (no match found)
updateDebugState(DebugLevel.NONE, -1, ConstraintType.NONE, -1);
setCurrentDebugState(DebugState.TERMINATED_FALSE);
if (debugTarget != null) {
debugTarget.fireTerminateEvent();
- }
+ }*/
return;
}
@@ -481,13 +488,13 @@
// set the value
if (!currentSlot.setValueAndLock()) {
- throw new IllegalStateException("step called on Variable level, but no values left: "
- + toString());
+ //if no furthe valuer, try lower index variable
+ tryLowerIndexVariable();
+ break;
}
-
+
// update the debug state (current index does not change)
updateDebugState(DebugLevel.VALUE, currentVariableIndex, ConstraintType.NONE, -1);
-
break;
case VALUE:
// go to the "type" constraint type as it is always the first constraint.
@@ -844,7 +851,7 @@
// get all breakpoints
IBreakpointManager manager = getManager();
// create breakpoint
- IFile moduleFile = debugTarget.getModuleFile();
+ IResource moduleFile = debugTarget.getModuleResource();
IMarker marker = HenshinMarkerNavigationProvider.addMarker(moduleFile, HenshinModelPlugin.PLUGIN_ID, "/variable", "Sample VariableBreakpoint", IStatus.OK);
VariableBreakpoint breakpoint = new VariableBreakpoint();
try {
@@ -879,7 +886,7 @@
// get all breakpoints
IBreakpointManager manager = getManager();
// create breakpoint
- IFile moduleFile = debugTarget.getModuleFile();
+ IResource moduleFile = debugTarget.getModuleResource();
IMarker marker = HenshinMarkerNavigationProvider.addMarker(moduleFile, HenshinModelPlugin.PLUGIN_ID, "/value", "Sample ValueBreakpoint", IStatus.OK);
ValueBreakpoint breakpoint = new ValueBreakpoint();
try {
@@ -903,7 +910,7 @@
// get all breakpoints
IBreakpointManager manager = getManager();
// create breakpoint
- IFile moduleFile = debugTarget.getModuleFile();
+ IResource moduleFile = debugTarget.getModuleResource();
IMarker marker = HenshinMarkerNavigationProvider.addMarker(moduleFile, HenshinModelPlugin.PLUGIN_ID, "/constraintType", "Sample ConstraintTypeBreakpoint", IStatus.OK);
ConstraintTypeBreakpoint breakpoint = new ConstraintTypeBreakpoint();
try {
@@ -925,7 +932,7 @@
// get all breakpoints
IBreakpointManager manager = getManager();
// create breakpoint
- IFile moduleFile = debugTarget.getModuleFile();
+ IResource moduleFile = debugTarget.getModuleResource();
IMarker marker = HenshinMarkerNavigationProvider.addMarker(moduleFile, HenshinModelPlugin.PLUGIN_ID, "/constraintInstance", "Sample ConstraintInstanceBreakpoint", IStatus.OK);
ConstraintInstanceBreakpoint breakpoint = new ConstraintInstanceBreakpoint();
try {
diff --git a/plugins/org.eclipse.emf.henshin.model/src/org/eclipse/emf/henshin/model/util/HenshinValidator.java b/plugins/org.eclipse.emf.henshin.model/src/org/eclipse/emf/henshin/model/util/HenshinValidator.java
index ee2f15e..3a232b2 100644
--- a/plugins/org.eclipse.emf.henshin.model/src/org/eclipse/emf/henshin/model/util/HenshinValidator.java
+++ b/plugins/org.eclipse.emf.henshin.model/src/org/eclipse/emf/henshin/model/util/HenshinValidator.java
@@ -29,6 +29,8 @@
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
@@ -74,21 +76,24 @@
/**
* <!-- begin-user-doc --> The <b>Validator</b> for the Henshin model. <!--
* end-user-doc -->
+ *
* @see org.eclipse.emf.henshin.model.HenshinPackage
* @generated
*/
public class HenshinValidator extends EObjectValidator {
/**
- * The cached model package
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * The cached model package <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public static final HenshinValidator INSTANCE = new HenshinValidator();
/**
- * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource()
+ * source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode()
+ * codes} from this package. <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @see org.eclipse.emf.common.util.Diagnostic#getSource()
* @see org.eclipse.emf.common.util.Diagnostic#getCode()
* @generated
@@ -96,17 +101,19 @@
public static final String DIAGNOSTIC_SOURCE = "org.eclipse.emf.henshin.model";
/**
- * A constant with a fixed name that can be used as the base value for additional hand written constants.
- * <!-- begin-user-doc --> <!--
- * end-user-doc -->
+ * A constant with a fixed name that can be used as the base value for
+ * additional hand written constants. <!-- begin-user-doc --> <!-- end-user-doc
+ * -->
+ *
* @generated
*/
private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0;
/**
- * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
- * <!-- begin-user-doc
- * --> <!-- end-user-doc -->
+ * A constant with a fixed name that can be used as the base value for
+ * additional hand written constants in a derived class. <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
* @generated
*/
protected static final int DIAGNOSTIC_CODE_COUNT = GENERATED_DIAGNOSTIC_CODE_COUNT;
@@ -138,11 +145,11 @@
"typeof", "var", "void", "volatile", "while", "with", "yield" }));
private Set<Unit> unitsWithIllegallyNamedParameters = new HashSet<Unit>();
-
+
/**
- * Creates an instance of the switch.
- * <!-- begin-user-doc --> <!--
- * end-user-doc -->
+ * Creates an instance of the switch. <!-- begin-user-doc --> <!-- end-user-doc
+ * -->
+ *
* @generated
*/
public HenshinValidator() {
@@ -150,100 +157,102 @@
}
/**
- * Returns the package of this validator switch.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * Returns the package of this validator switch. <!-- begin-user-doc --> <!--
+ * end-user-doc -->
+ *
* @generated
*/
@Override
protected EPackage getEPackage() {
- return HenshinPackage.eINSTANCE;
+ return HenshinPackage.eINSTANCE;
}
/**
* Calls <code>validateXXX</code> for the corresponding classifier of the model.
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
@Override
protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics,
Map<Object, Object> context) {
switch (classifierID) {
- case HenshinPackage.MODEL_ELEMENT:
- return validateModelElement((ModelElement)value, diagnostics, context);
- case HenshinPackage.ANNOTATION:
- return validateAnnotation((Annotation)value, diagnostics, context);
- case HenshinPackage.NAMED_ELEMENT:
- return validateNamedElement((NamedElement)value, diagnostics, context);
- case HenshinPackage.GRAPH_ELEMENT:
- return validateGraphElement((GraphElement)value, diagnostics, context);
- case HenshinPackage.MODULE:
- return validateModule((Module)value, diagnostics, context);
- case HenshinPackage.UNIT:
- return validateUnit((Unit)value, diagnostics, context);
- case HenshinPackage.RULE:
- return validateRule((Rule)value, diagnostics, context);
- case HenshinPackage.PARAMETER:
- return validateParameter((Parameter)value, diagnostics, context);
- case HenshinPackage.PARAMETER_MAPPING:
- return validateParameterMapping((ParameterMapping)value, diagnostics, context);
- case HenshinPackage.GRAPH:
- return validateGraph((Graph)value, diagnostics, context);
- case HenshinPackage.NODE:
- return validateNode((Node)value, diagnostics, context);
- case HenshinPackage.EDGE:
- return validateEdge((Edge)value, diagnostics, context);
- case HenshinPackage.ATTRIBUTE:
- return validateAttribute((Attribute)value, diagnostics, context);
- case HenshinPackage.ATTRIBUTE_CONDITION:
- return validateAttributeCondition((AttributeCondition)value, diagnostics, context);
- case HenshinPackage.MAPPING:
- return validateMapping((Mapping)value, diagnostics, context);
- case HenshinPackage.UNARY_UNIT:
- return validateUnaryUnit((UnaryUnit)value, diagnostics, context);
- case HenshinPackage.MULTI_UNIT:
- return validateMultiUnit((MultiUnit)value, diagnostics, context);
- case HenshinPackage.INDEPENDENT_UNIT:
- return validateIndependentUnit((IndependentUnit)value, diagnostics, context);
- case HenshinPackage.SEQUENTIAL_UNIT:
- return validateSequentialUnit((SequentialUnit)value, diagnostics, context);
- case HenshinPackage.CONDITIONAL_UNIT:
- return validateConditionalUnit((ConditionalUnit)value, diagnostics, context);
- case HenshinPackage.PRIORITY_UNIT:
- return validatePriorityUnit((PriorityUnit)value, diagnostics, context);
- case HenshinPackage.ITERATED_UNIT:
- return validateIteratedUnit((IteratedUnit)value, diagnostics, context);
- case HenshinPackage.LOOP_UNIT:
- return validateLoopUnit((LoopUnit)value, diagnostics, context);
- case HenshinPackage.FORMULA:
- return validateFormula((Formula)value, diagnostics, context);
- case HenshinPackage.NESTED_CONDITION:
- return validateNestedCondition((NestedCondition)value, diagnostics, context);
- case HenshinPackage.UNARY_FORMULA:
- return validateUnaryFormula((UnaryFormula)value, diagnostics, context);
- case HenshinPackage.BINARY_FORMULA:
- return validateBinaryFormula((BinaryFormula)value, diagnostics, context);
- case HenshinPackage.AND:
- return validateAnd((And)value, diagnostics, context);
- case HenshinPackage.OR:
- return validateOr((Or)value, diagnostics, context);
- case HenshinPackage.XOR:
- return validateXor((Xor)value, diagnostics, context);
- case HenshinPackage.NOT:
- return validateNot((Not)value, diagnostics, context);
- case HenshinPackage.TRUE:
- return validateTrue((True)value, diagnostics, context);
- case HenshinPackage.PARAMETER_KIND:
- return validateParameterKind((ParameterKind)value, diagnostics, context);
- case HenshinPackage.ACTION:
- return validateAction((Action)value, diagnostics, context);
- default:
- return true;
+ case HenshinPackage.MODEL_ELEMENT:
+ return validateModelElement((ModelElement) value, diagnostics, context);
+ case HenshinPackage.ANNOTATION:
+ return validateAnnotation((Annotation) value, diagnostics, context);
+ case HenshinPackage.NAMED_ELEMENT:
+ return validateNamedElement((NamedElement) value, diagnostics, context);
+ case HenshinPackage.GRAPH_ELEMENT:
+ return validateGraphElement((GraphElement) value, diagnostics, context);
+ case HenshinPackage.MODULE:
+ return validateModule((Module) value, diagnostics, context);
+ case HenshinPackage.UNIT:
+ return validateUnit((Unit) value, diagnostics, context);
+ case HenshinPackage.RULE:
+ return validateRule((Rule) value, diagnostics, context);
+ case HenshinPackage.PARAMETER:
+ return validateParameter((Parameter) value, diagnostics, context);
+ case HenshinPackage.PARAMETER_MAPPING:
+ return validateParameterMapping((ParameterMapping) value, diagnostics, context);
+ case HenshinPackage.GRAPH:
+ return validateGraph((Graph) value, diagnostics, context);
+ case HenshinPackage.NODE:
+ return validateNode((Node) value, diagnostics, context);
+ case HenshinPackage.EDGE:
+ return validateEdge((Edge) value, diagnostics, context);
+ case HenshinPackage.ATTRIBUTE:
+ return validateAttribute((Attribute) value, diagnostics, context);
+ case HenshinPackage.ATTRIBUTE_CONDITION:
+ return validateAttributeCondition((AttributeCondition) value, diagnostics, context);
+ case HenshinPackage.MAPPING:
+ return validateMapping((Mapping) value, diagnostics, context);
+ case HenshinPackage.UNARY_UNIT:
+ return validateUnaryUnit((UnaryUnit) value, diagnostics, context);
+ case HenshinPackage.MULTI_UNIT:
+ return validateMultiUnit((MultiUnit) value, diagnostics, context);
+ case HenshinPackage.INDEPENDENT_UNIT:
+ return validateIndependentUnit((IndependentUnit) value, diagnostics, context);
+ case HenshinPackage.SEQUENTIAL_UNIT:
+ return validateSequentialUnit((SequentialUnit) value, diagnostics, context);
+ case HenshinPackage.CONDITIONAL_UNIT:
+ return validateConditionalUnit((ConditionalUnit) value, diagnostics, context);
+ case HenshinPackage.PRIORITY_UNIT:
+ return validatePriorityUnit((PriorityUnit) value, diagnostics, context);
+ case HenshinPackage.ITERATED_UNIT:
+ return validateIteratedUnit((IteratedUnit) value, diagnostics, context);
+ case HenshinPackage.LOOP_UNIT:
+ return validateLoopUnit((LoopUnit) value, diagnostics, context);
+ case HenshinPackage.FORMULA:
+ return validateFormula((Formula) value, diagnostics, context);
+ case HenshinPackage.NESTED_CONDITION:
+ return validateNestedCondition((NestedCondition) value, diagnostics, context);
+ case HenshinPackage.UNARY_FORMULA:
+ return validateUnaryFormula((UnaryFormula) value, diagnostics, context);
+ case HenshinPackage.BINARY_FORMULA:
+ return validateBinaryFormula((BinaryFormula) value, diagnostics, context);
+ case HenshinPackage.AND:
+ return validateAnd((And) value, diagnostics, context);
+ case HenshinPackage.OR:
+ return validateOr((Or) value, diagnostics, context);
+ case HenshinPackage.XOR:
+ return validateXor((Xor) value, diagnostics, context);
+ case HenshinPackage.NOT:
+ return validateNot((Not) value, diagnostics, context);
+ case HenshinPackage.TRUE:
+ return validateTrue((True) value, diagnostics, context);
+ case HenshinPackage.PARAMETER_KIND:
+ return validateParameterKind((ParameterKind) value, diagnostics, context);
+ case HenshinPackage.ACTION:
+ return validateAction((Action) value, diagnostics, context);
+ default:
+ return true;
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateModelElement(ModelElement modelElement, DiagnosticChain diagnostics,
@@ -253,6 +262,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateAnnotation(Annotation annotation, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -261,6 +271,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateNamedElement(NamedElement namedElement, DiagnosticChain diagnostics,
@@ -270,28 +281,47 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateRule(Rule rule, DiagnosticChain diagnostics, Map<Object, Object> context) {
- if (!validate_NoCircularContainment(rule, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(rule, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateRule_mappingsFromLeft2Right(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateRule_createdNodesNotAbstract(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateRule_createdEdgesNotDerived(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateRule_deletedEdgesNotDerived(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateRule_uniqueNodeNames(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateRule_varParametersOccurOnLeftSide(rule, diagnostics, context);
- if (result || diagnostics != null) result &= validateRule_multiRuleParametersSameKind(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateRule_mappingsFromLeft2Right(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateRule_createdNodesNotAbstract(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateRule_createdEdgesNotDerived(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateRule_deletedEdgesNotDerived(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateRule_uniqueNodeNames(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateRule_varParametersOccurOnLeftSide(rule, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateRule_multiRuleParametersSameKind(rule, diagnostics, context);
return result;
}
@@ -530,8 +560,8 @@
}
/**
- * Validates the multiRuleParametersSameKind constraint of '<em>Rule</em>'.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * Validates the multiRuleParametersSameKind constraint of '<em>Rule</em>'. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -555,8 +585,8 @@
}
/**
- * Validates the modeling of opposite '<em>Edge</em>'s. <!-- begin-user-doc
- * --> <!-- end-user-doc -->
+ * Validates the modeling of opposite '<em>Edge</em>'s. <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -606,8 +636,8 @@
}
/**
- * Validates the deletion of containment '<em>Edge</em>'. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * Validates the deletion of containment '<em>Edge</em>'. <!-- begin-user-doc
+ * --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -650,8 +680,8 @@
}
/**
- * Validates the creation of containment '<em>Edge</em>'. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * Validates the creation of containment '<em>Edge</em>'. <!-- begin-user-doc
+ * --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -696,29 +726,41 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateAttributeCondition(AttributeCondition attributeCondition, DiagnosticChain diagnostics,
Map<Object, Object> context) {
- if (!validate_NoCircularContainment(attributeCondition, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(attributeCondition, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validateAttributeCondition_conditionTextNotEmpty(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validateAttributeCondition_conditionValidJavaScript(attributeCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validateAttributeCondition_conditionAllParametersAreDeclared(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateAttributeCondition_conditionTextNotEmpty(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateAttributeCondition_conditionValidJavaScript(attributeCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateAttributeCondition_conditionAllParametersAreDeclared(attributeCondition, diagnostics,
+ context);
return result;
}
/**
- * Validates the conditionTextNotEmpty constraint of '
- * <em>Attribute Condition</em>'. <!-- begin-user-doc --> <!-- end-user-doc
- * -->
+ * Validates the conditionTextNotEmpty constraint of ' <em>Attribute
+ * Condition</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -734,9 +776,8 @@
}
/**
- * Validates the conditionValidJavaScript constraint of '
- * <em>Attribute Condition</em>'. <!-- begin-user-doc --> <!-- end-user-doc
- * -->
+ * Validates the conditionValidJavaScript constraint of ' <em>Attribute
+ * Condition</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -763,6 +804,18 @@
if (attributeCondition.getConditionText() != null && !attributeCondition.getConditionText().isEmpty()) {
List<String> undeclared = findUndeclaredNames(attributeCondition.getConditionText(),
attributeCondition.getRule());
+
+ if (!undeclared.isEmpty()) {
+ for (Node n : attributeCondition.getRule().getLhs().getNodes()) {
+ for (Attribute a : n.getAttributes()) {
+ if (a.getType() != null && a.getType().getEType() instanceof EEnum) {
+ for (EEnumLiteral lit : ((EEnum) a.getType().getEType()).getELiterals()) {
+ undeclared.remove(lit.getName());
+ }
+ }
+ }
+ }
+ }
if (!undeclared.isEmpty()) {
if (isJavaScriptExpression(attributeCondition.getConditionText()))
diagnostics.add(createDiagnostic(Diagnostic.WARNING, attributeCondition, AttributeCondition.class,
@@ -782,11 +835,11 @@
* errors.
*/
private void validateExpression(String expression, Unit unit) throws ScriptException {
- // If the unit has invalid parameter names (like keywords), this is the primary
+ // If the unit has invalid parameter names (like keywords), this is the primary
// error; directly return to avoid additional feedback that may confuse the user
- if (unitsWithIllegallyNamedParameters.contains(unit))
+ if (unitsWithIllegallyNamedParameters.contains(unit))
return;
-
+
if (expression == null || unit == null) {
return;
}
@@ -834,23 +887,37 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateParameter(Parameter parameter, DiagnosticChain diagnostics, Map<Object, Object> context) {
- if (!validate_NoCircularContainment(parameter, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(parameter, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validateParameter_nameNotEmpty(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validateParameter_nameNotTypeName(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validateParameter_nameNotKindAlias(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validateParameter_unknownKindDeprecated(parameter, diagnostics, context);
- if (result || diagnostics != null) result &= validateParameter_nameNotKeyword(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateParameter_nameNotEmpty(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateParameter_nameNotTypeName(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateParameter_nameNotKindAlias(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateParameter_unknownKindDeprecated(parameter, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateParameter_nameNotKeyword(parameter, diagnostics, context);
return result;
}
@@ -913,8 +980,8 @@
}
/**
- * Validates the unknownKindDeprecated constraint of '<em>Parameter</em>'.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * Validates the unknownKindDeprecated constraint of '<em>Parameter</em>'. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -922,7 +989,7 @@
Map<Object, Object> context) {
if (isSuppressParameterKindDeprecatedWarnings())
return true;
-
+
EObject container = parameter.eContainer();
if (parameter != null && parameter.getKind() == ParameterKind.UNKNOWN
&& !(container instanceof Rule && ((Rule) container).isMultiRule())) {
@@ -975,6 +1042,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateGraph(Graph graph, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -983,6 +1051,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateGraphElement(GraphElement graphElement, DiagnosticChain diagnostics,
@@ -992,6 +1061,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateModule(Module module, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -1000,27 +1070,39 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateUnit(Unit unit, DiagnosticChain diagnostics, Map<Object, Object> context) {
- if (!validate_NoCircularContainment(unit, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(unit, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(unit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(unit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(unit, diagnostics, context);
return result;
}
/**
- * Validates the nameNotEmpty constraint of '<em>Unit</em>'. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * Validates the nameNotEmpty constraint of '<em>Unit</em>'. <!-- begin-user-doc
+ * --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1089,6 +1171,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateMapping(Mapping mapping, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -1097,22 +1180,35 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateNode(Node node, DiagnosticChain diagnostics, Map<Object, Object> context) {
- if (!validate_NoCircularContainment(node, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(node, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(node, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(node, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(node, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(node, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(node, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(node, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(node, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(node, diagnostics, context);
- if (result || diagnostics != null) result &= validateNode_uniqueAttributeTypes(node, diagnostics, context);
- if (result || diagnostics != null) result &= validateNode_atMostOneContainer(node, diagnostics, context);
- if (result || diagnostics != null) result &= validateNode_NodeDeletionDanglingEdge(node, diagnostics, context);
- if (result || diagnostics != null) result &= validateNode_NodeCreationWithoutContainment(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateNode_uniqueAttributeTypes(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateNode_atMostOneContainer(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateNode_NodeDeletionDanglingEdge(node, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateNode_NodeCreationWithoutContainment(node, diagnostics, context);
return result;
}
@@ -1122,13 +1218,12 @@
return preferences.getBoolean(PREF_ENABLE_EXTENDED_CONSISTENCY_CHECK, false);
}
-
private boolean isSuppressParameterKindDeprecatedWarnings() {
// access the global preferences
IEclipsePreferences preferences = InstanceScope.INSTANCE.getNode(HenshinModelPlugin.PLUGIN_ID);
return preferences.getBoolean(PREF_SUPPRESS_PARAMETERKIND_DEPRECATED_WARNINGS, false);
}
-
+
/**
* Validates the uniqueAttributeTypes constraint of '<em>Node</em>'. <!--
* begin-user-doc --> <!-- end-user-doc -->
@@ -1183,8 +1278,8 @@
}
/**
- * Validates the consistent deletion of '<em>Node</em>'. <!-- begin-user-doc
- * --> <!-- end-user-doc -->
+ * Validates the consistent deletion of '<em>Node</em>'. <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1258,26 +1353,37 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateAttribute(Attribute attribute, DiagnosticChain diagnostics, Map<Object, Object> context) {
- if (!validate_NoCircularContainment(attribute, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(attribute, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(attribute, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(attribute, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(attribute, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(attribute, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(attribute, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(attribute, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(attribute, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(attribute, diagnostics, context);
- if (result || diagnostics != null) result &= validateAttribute_valueValidJavaScript(attribute, diagnostics, context);
- if (result || diagnostics != null) result &= validateAttribute_valueAllParametersAreDeclared(attribute, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(attribute, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(attribute, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(attribute, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(attribute, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(attribute, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(attribute, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(attribute, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateAttribute_valueValidJavaScript(attribute, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateAttribute_valueAllParametersAreDeclared(attribute, diagnostics, context);
return result;
}
/**
- * Validates the valueValidJavaScript constraint of '<em>Attribute</em>'.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * Validates the valueValidJavaScript constraint of '<em>Attribute</em>'. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1309,6 +1415,13 @@
List<String> undeclared = findUndeclaredNames(attribute.getValue(),
attribute.getNode().getGraph().getRule());
if (!undeclared.isEmpty()) {
+ if (attribute.getType() != null && attribute.getType().getEType() instanceof EEnum) {
+ for (EEnumLiteral lit : ((EEnum) attribute.getType().getEType()).getELiterals()) {
+ undeclared.remove(lit.getName());
+ }
+ }
+ }
+ if (!undeclared.isEmpty()) {
if (isJavaScriptExpression(attribute.getValue()))
diagnostics.add(createDiagnostic(Diagnostic.WARNING, attribute, Attribute.class,
"valueAllParametersAreDeclaredWarning", context, new RuntimeException(undeclared.get(0))));
@@ -1400,27 +1513,45 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateEdge(Edge edge, DiagnosticChain diagnostics, Map<Object, Object> context) {
- if (!validate_NoCircularContainment(edge, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(edge, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validateEdge_equalParentGraphs(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validateEdge_indexValidJavaScript(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validateEdge_indexAllParametersAreDeclared(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validateEdge_noContainmentCycles(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validateEdge_EOppositeContainments(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validateEdge_oppositeEdgeConsidered(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validateEdge_noParallelEdgesOfSameType(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validateEdge_containmentEdgeDeletion(edge, diagnostics, context);
- if (result || diagnostics != null) result &= validateEdge_containmentEdgeCreation(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateEdge_equalParentGraphs(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateEdge_indexValidJavaScript(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateEdge_indexAllParametersAreDeclared(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateEdge_noContainmentCycles(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateEdge_EOppositeContainments(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateEdge_oppositeEdgeConsidered(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateEdge_noParallelEdgesOfSameType(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateEdge_containmentEdgeDeletion(edge, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateEdge_containmentEdgeCreation(edge, diagnostics, context);
return result;
}
@@ -1457,8 +1588,8 @@
}
/**
- * Validates the indexAllParametersAreDeclared constraint of '<em>Edge</em>
- * '. <!-- begin-user-doc --> <!-- end-user-doc -->
+ * Validates the indexAllParametersAreDeclared constraint of '<em>Edge</em> '.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1520,8 +1651,8 @@
}
/**
- * Validates the EOpposite constraint of '<em>Edge</em>'. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * Validates the EOpposite constraint of '<em>Edge</em>'. <!-- begin-user-doc
+ * --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1541,155 +1672,242 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateUnaryUnit(UnaryUnit unaryUnit, DiagnosticChain diagnostics, Map<Object, Object> context) {
- if (!validate_NoCircularContainment(unaryUnit, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(unaryUnit, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(unaryUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(unaryUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(unaryUnit, diagnostics, context);
return result;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateMultiUnit(MultiUnit multiUnit, DiagnosticChain diagnostics, Map<Object, Object> context) {
- if (!validate_NoCircularContainment(multiUnit, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(multiUnit, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(multiUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(multiUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(multiUnit, diagnostics, context);
return result;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateIndependentUnit(IndependentUnit independentUnit, DiagnosticChain diagnostics,
Map<Object, Object> context) {
- if (!validate_NoCircularContainment(independentUnit, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(independentUnit, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(independentUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(independentUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(independentUnit, diagnostics, context);
return result;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateSequentialUnit(SequentialUnit sequentialUnit, DiagnosticChain diagnostics,
Map<Object, Object> context) {
- if (!validate_NoCircularContainment(sequentialUnit, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(sequentialUnit, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(sequentialUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(sequentialUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(sequentialUnit, diagnostics, context);
return result;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateConditionalUnit(ConditionalUnit conditionalUnit, DiagnosticChain diagnostics,
Map<Object, Object> context) {
- if (!validate_NoCircularContainment(conditionalUnit, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(conditionalUnit, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(conditionalUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(conditionalUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(conditionalUnit, diagnostics, context);
return result;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validatePriorityUnit(PriorityUnit priorityUnit, DiagnosticChain diagnostics,
Map<Object, Object> context) {
- if (!validate_NoCircularContainment(priorityUnit, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(priorityUnit, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(priorityUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(priorityUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(priorityUnit, diagnostics, context);
return result;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateIteratedUnit(IteratedUnit iteratedUnit, DiagnosticChain diagnostics,
Map<Object, Object> context) {
- if (!validate_NoCircularContainment(iteratedUnit, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(iteratedUnit, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateIteratedUnit_iterationsNotEmpty(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateIteratedUnit_iterationsValidJavaScript(iteratedUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateIteratedUnit_iterationsAllParametersAreDeclared(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateIteratedUnit_iterationsNotEmpty(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateIteratedUnit_iterationsValidJavaScript(iteratedUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateIteratedUnit_iterationsAllParametersAreDeclared(iteratedUnit, diagnostics, context);
return result;
}
/**
- * Validates the iterationsNotEmpty constraint of '<em>Iterated Unit</em>'.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * Validates the iterationsNotEmpty constraint of '<em>Iterated Unit</em>'. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1704,8 +1922,8 @@
}
/**
- * Validates the iterationsValidJavaScript constraint of '
- * <em>Iterated Unit</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
+ * Validates the iterationsValidJavaScript constraint of ' <em>Iterated
+ * Unit</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1721,8 +1939,8 @@
}
/**
- * Validates the iterationsAllParametersAreDeclared constraint of '
- * <em>Iterated Unit</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
+ * Validates the iterationsAllParametersAreDeclared constraint of ' <em>Iterated
+ * Unit</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1746,41 +1964,65 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateLoopUnit(LoopUnit loopUnit, DiagnosticChain diagnostics, Map<Object, Object> context) {
- if (!validate_NoCircularContainment(loopUnit, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(loopUnit, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_nameNotEmpty(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterNamesUnique(loopUnit, diagnostics, context);
- if (result || diagnostics != null) result &= validateUnit_parameterMappingsPointToDirectSubUnit(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_nameNotEmpty(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterNamesUnique(loopUnit, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateUnit_parameterMappingsPointToDirectSubUnit(loopUnit, diagnostics, context);
return result;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateNestedCondition(NestedCondition nestedCondition, DiagnosticChain diagnostics,
Map<Object, Object> context) {
- if (!validate_NoCircularContainment(nestedCondition, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(nestedCondition, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(nestedCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(nestedCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(nestedCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(nestedCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(nestedCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(nestedCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(nestedCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(nestedCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validateNestedCondition_mappingOriginContainedInParentCondition(nestedCondition, diagnostics, context);
- if (result || diagnostics != null) result &= validateNestedCondition_mappingImageContainedInCurrent(nestedCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(nestedCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(nestedCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(nestedCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(nestedCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(nestedCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(nestedCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(nestedCondition, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateNestedCondition_mappingOriginContainedInParentCondition(nestedCondition, diagnostics,
+ context);
+ if (result || diagnostics != null)
+ result &= validateNestedCondition_mappingImageContainedInCurrent(nestedCondition, diagnostics, context);
return result;
}
@@ -1806,8 +2048,8 @@
}
/**
- * Validates the mappingImageContainedInCurrent constraint of '
- * <em>Nested Condition</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
+ * Validates the mappingImageContainedInCurrent constraint of ' <em>Nested
+ * Condition</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1825,6 +2067,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateFormula(Formula formula, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -1833,6 +2076,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateUnaryFormula(UnaryFormula unaryFormula, DiagnosticChain diagnostics,
@@ -1842,6 +2086,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateBinaryFormula(BinaryFormula binaryFormula, DiagnosticChain diagnostics,
@@ -1851,6 +2096,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateAnd(And and, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -1859,6 +2105,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateOr(Or or, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -1867,6 +2114,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateNot(Not not, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -1874,8 +2122,8 @@
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateTrue(True true_, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -1884,6 +2132,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateParameterKind(ParameterKind parameterKind, DiagnosticChain diagnostics,
@@ -1893,6 +2142,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateAction(Action action, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -1901,6 +2151,7 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateXor(Xor xor, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -1909,31 +2160,42 @@
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public boolean validateParameterMapping(ParameterMapping parameterMapping, DiagnosticChain diagnostics,
Map<Object, Object> context) {
- if (!validate_NoCircularContainment(parameterMapping, diagnostics, context)) return false;
+ if (!validate_NoCircularContainment(parameterMapping, diagnostics, context))
+ return false;
boolean result = validate_EveryMultiplicityConforms(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryDataValueConforms(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryProxyResolves(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validate_UniqueID(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryKeyUnique(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validateParameterMapping_inParameterMappingIsCausal(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validateParameterMapping_outParameterMappingIsCausal(parameterMapping, diagnostics, context);
- if (result || diagnostics != null) result &= validateParameterMapping_varParameterMappingIsCausal(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryDataValueConforms(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryReferenceIsContained(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryBidirectionalReferenceIsPaired(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryProxyResolves(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_UniqueID(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryKeyUnique(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validate_EveryMapEntryUnique(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateParameterMapping_inParameterMappingIsCausal(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateParameterMapping_outParameterMappingIsCausal(parameterMapping, diagnostics, context);
+ if (result || diagnostics != null)
+ result &= validateParameterMapping_varParameterMappingIsCausal(parameterMapping, diagnostics, context);
return result;
}
/**
- * Validates the inParameterMappingIsCausal constraint of '
- * <em>Parameter Mapping</em>'. <!-- begin-user-doc --> If the source of a
- * parameter mapping is an in parameter contained in a unit, the target
- * parameter has to be of the kinds in, inout or unknown. <!-- end-user-doc
- * -->
+ * Validates the inParameterMappingIsCausal constraint of ' <em>Parameter
+ * Mapping</em>'. <!-- begin-user-doc --> If the source of a parameter mapping
+ * is an in parameter contained in a unit, the target parameter has to be of the
+ * kinds in, inout or unknown. <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1958,11 +2220,10 @@
}
/**
- * Validates the outParameterMappingIsCausal constraint of '
- * <em>Parameter Mapping</em>'. <!-- begin-user-doc --> If the source of a
- * parameter mapping is an out parameter contained in a unit, tha target
- * parameter has to be of the kinds out, inout, or unknown. <!--
- * end-user-doc -->
+ * Validates the outParameterMappingIsCausal constraint of ' <em>Parameter
+ * Mapping</em>'. <!-- begin-user-doc --> If the source of a parameter mapping
+ * is an out parameter contained in a unit, tha target parameter has to be of
+ * the kinds out, inout, or unknown. <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -1997,11 +2258,10 @@
}
/**
- * Validates the varParameterMappingIsCausal constraint of '
- * <em>Parameter Mapping</em>'. <!-- begin-user-doc --> If the source of a
- * parameter mapping is a var parameter contained in a unit, and the target
- * parameter is of the kind in, the mapping is valid if: <!-- end-user-doc
- * -->
+ * Validates the varParameterMappingIsCausal constraint of ' <em>Parameter
+ * Mapping</em>'. <!-- begin-user-doc --> If the source of a parameter mapping
+ * is a var parameter contained in a unit, and the target parameter is of the
+ * kind in, the mapping is valid if: <!-- end-user-doc -->
*
* @generated NOT
*/
@@ -2063,8 +2323,9 @@
}
/**
- * Returns the resource locator that will be used to fetch messages for this validator's diagnostics.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * Returns the resource locator that will be used to fetch messages for this
+ * validator's diagnostics. <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
@Override
diff --git a/plugins/org.eclipse.emf.henshin.monitoring.kieker/src/org/eclipse/emf/henshin/monitoring/kieker/analysis/PerformanceAnalysis.java b/plugins/org.eclipse.emf.henshin.monitoring.kieker/src/org/eclipse/emf/henshin/monitoring/kieker/analysis/PerformanceAnalysis.java
index 7789253..3a7a55b 100644
--- a/plugins/org.eclipse.emf.henshin.monitoring.kieker/src/org/eclipse/emf/henshin/monitoring/kieker/analysis/PerformanceAnalysis.java
+++ b/plugins/org.eclipse.emf.henshin.monitoring.kieker/src/org/eclipse/emf/henshin/monitoring/kieker/analysis/PerformanceAnalysis.java
@@ -24,8 +24,6 @@
public class PerformanceAnalysis {
private static FSReader reader;
- private static final Configuration filterConfig = new Configuration();
- private static final IAnalysisController analysisController = new AnalysisController();
private static LinkedList<RuleExecutionData> ruleCalls;
private static LinkedList<UnitVisualizationData> unitCallData;
private static LinkedList<AbstractMonitoringRecord> startStopRecords;
@@ -150,6 +148,8 @@
if((new File(kiekerDir)).exists()){
final Configuration fsReaderConfig = new Configuration();
fsReaderConfig.setProperty(FSReader.CONFIG_PROPERTY_NAME_INPUTDIRS,kiekerDir);
+ Configuration filterConfig = new Configuration();
+ IAnalysisController analysisController = new AnalysisController();
reader = new FSReader(fsReaderConfig,analysisController);
final PerformanceFilter performanceFilter = new PerformanceFilter(filterConfig,analysisController,ruleCalls,startStopRecords,startRecordToRuleCallsIdx);
try{
diff --git a/plugins/org.eclipse.emf.henshin.monitoring.kieker/src/org/eclipse/emf/henshin/monitoring/kieker/monitoring/PerformanceMonitorImpl.java b/plugins/org.eclipse.emf.henshin.monitoring.kieker/src/org/eclipse/emf/henshin/monitoring/kieker/monitoring/PerformanceMonitorImpl.java
index 3d68e06..6366ec1 100644
--- a/plugins/org.eclipse.emf.henshin.monitoring.kieker/src/org/eclipse/emf/henshin/monitoring/kieker/monitoring/PerformanceMonitorImpl.java
+++ b/plugins/org.eclipse.emf.henshin.monitoring.kieker/src/org/eclipse/emf/henshin/monitoring/kieker/monitoring/PerformanceMonitorImpl.java
@@ -15,18 +15,25 @@
import org.eclipse.emf.henshin.monitoring.kieker.records.VariableCheckRecord;
import org.eclipse.emf.henshin.monitoring.kieker.records.VariableInfoRecord;
+import kieker.common.configuration.Configuration;
import kieker.common.record.AbstractMonitoringRecord;
+import kieker.monitoring.core.configuration.ConfigurationFactory;
import kieker.monitoring.core.controller.IMonitoringController;
import kieker.monitoring.core.controller.MonitoringController;
public class PerformanceMonitorImpl extends BasicApplicationMonitor implements PerformanceMonitor {
- private static final IMonitoringController MONITORING_CONTROLLER=MonitoringController.getInstance();
+ private final IMonitoringController MONITORING_CONTROLLER;
private HashMap<String,BacktrackRecord> varIdToBacktrackRecord=null;
private HashMap<String,VariableCheckRecord> varIdToVariableCheckRecord=null;
private HashMap<String,DomainRestrictionRecord> varIdtoDomainRestrictionRecord=null;
+ public PerformanceMonitorImpl() {
+ super();
+ MONITORING_CONTROLLER=createNewController();
+ }
+
/**
* Decides on the basis of the record type, how it should be handled
*
@@ -203,7 +210,19 @@
if(!MONITORING_CONTROLLER.isMonitoringTerminated()){
MONITORING_CONTROLLER.terminateMonitoring();
}
- PerformanceAnalysis.runPerformanceAnalysis();;
+ PerformanceAnalysis.runPerformanceAnalysis();
+ }
+
+ private IMonitoringController createNewController() {
+ Configuration config=ConfigurationFactory.createSingletonConfiguration();
+ config.setProperty("kieker.monitoring.writer.filesystem.AsciiFileWriter.customStoragePath","");
+ config.setProperty("kieker.monitoring.writer.filesystem.AsciiFileWriter.maxLogFiles",-1);
+ config.setProperty("kieker.monitoring.writer.filesystem.AsciiFileWriter.flush",false);
+ config.setProperty("kieker.monitoring.writer.filesystem.AsciiFileWriter.maxLogSize",-1);
+ config.setProperty("kieker.monitoring.writer.filesystem.AsciiFileWriter.flushMapfile",true);
+ config.setProperty("kieker.monitoring.writer.filesystem.AsciiFileWriter.maxEntriesInFile",25000);
+ config.setProperty("kieker.monitoring.writer.filesystem.AsciiFileWriter.shouldCompress",false);
+ return MonitoringController.createInstance(config);
}
}
diff --git a/plugins/org.eclipse.emf.henshin.monitoring.ui/src/org/eclipse/emf/henshin/monitoring/ui/HenshinPerformanceView.java b/plugins/org.eclipse.emf.henshin.monitoring.ui/src/org/eclipse/emf/henshin/monitoring/ui/HenshinPerformanceView.java
index b07df41..e3d3556 100644
--- a/plugins/org.eclipse.emf.henshin.monitoring.ui/src/org/eclipse/emf/henshin/monitoring/ui/HenshinPerformanceView.java
+++ b/plugins/org.eclipse.emf.henshin.monitoring.ui/src/org/eclipse/emf/henshin/monitoring/ui/HenshinPerformanceView.java
@@ -33,7 +33,7 @@
@Override
public void run() {
JFrame frame = new JFrame("Henshin Profiler");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
String[] transformationTabs = new String[ruleVisualizationData.size()+1];
transformationTabs[0]="Call Graph";
int idx=1;
diff --git a/plugins/org.eclipse.emf.henshin.multicda.cda/src/org/eclipse/emf/henshin/multicda/cda/ConflictAnalysis.java b/plugins/org.eclipse.emf.henshin.multicda.cda/src/org/eclipse/emf/henshin/multicda/cda/ConflictAnalysis.java
index d001104..e6ad492 100644
--- a/plugins/org.eclipse.emf.henshin.multicda.cda/src/org/eclipse/emf/henshin/multicda/cda/ConflictAnalysis.java
+++ b/plugins/org.eclipse.emf.henshin.multicda.cda/src/org/eclipse/emf/henshin/multicda/cda/ConflictAnalysis.java
@@ -332,7 +332,15 @@
Set<Node> l1 = new HashSet<>(rule1.getLhs().getNodes());
Set<Node> l2 = new HashSet<>(originalR2.getLhs().getNodes());
Set<Node> f = new HashSet<>();
- for (NestedCondition nc : originalR2.getLhs().getNACs())
+ Set<Node> l1InNac = new HashSet<>();
+ Set<Node> l2InNac = new HashSet<>();
+ boolean allowed1 = true;
+ boolean allowed2 = true;
+ boolean nac2Allowed = false;
+ boolean nac1Allowed = false;
+
+ //collect all negative nodes of rule 2
+ for (NestedCondition nc : originalR2.getLhs().getNACs()) {
for (Node fn : nc.getConclusion().getNodes()) {
Node mappedNode = nc.getMappings().getOrigin(fn);
if (mappedNode == null)
@@ -341,20 +349,32 @@
l2.remove(mappedNode);
f.add(fn);
}
+ else {
+ l2InNac.add(fn);
+ }
}
+ //if there are negative elements, add l2
if (!f.isEmpty()) {
Map<Node, Node> result = new HashMap<>();
- f.addAll(l2);
+ //f.addAll(l2);
+ f.addAll(l2InNac);
Utils.mapNodes(l1, f, result, true);
- boolean allowed = result.size() < f.size();
- if (!allowed)
- return false;
+ boolean allNodesMapped = result.size() == f.size();
+ if (allNodesMapped) {
+ nac2Allowed = checkValidityOfMapping(result);
+ }
+ else nac2Allowed = true;
}
+ else nac2Allowed = true;
f.clear();
+ l2InNac.clear();
+ allowed1 = allowed1 && nac2Allowed;
+ }
+
l2 = new HashSet<>(originalR2.getLhs().getNodes());
l1 = new HashSet<>(rule1.getLhs().getNodes());
- for (NestedCondition nc : rule1.getLhs().getNACs())
+ for (NestedCondition nc : rule1.getLhs().getNACs()) {
for (Node fn : nc.getConclusion().getNodes()) {
Node mappedNode = nc.getMappings().getOrigin(fn);
if (mappedNode == null)
@@ -363,17 +383,53 @@
l1.remove(mappedNode);
f.add(fn);
}
+ else {
+ l1InNac.add(fn);
+ }
}
if (!f.isEmpty()) {
Map<Node, Node> result = new HashMap<>();
- f.addAll(l1);
+ //f.addAll(l1);
+ f.addAll(l1InNac);
Utils.mapNodes(l2, f, result, true);
- boolean allowed = result.size() < f.size();
- if (!allowed)
- return false;
+ boolean allNodesMapped = result.size() == f.size();
+ if (allNodesMapped) {
+ nac1Allowed = checkValidityOfMapping(result);
+ }
+ else nac1Allowed = true;
+ }
+ else nac1Allowed = true;
+ f.clear();
+ l1InNac.clear();
+ allowed2 = allowed2 && nac1Allowed;
}
- return true;
+ return allowed1 && allowed2;
+ }
+
+ private boolean checkValidityOfMapping(Map<Node, Node> result) {
+ Set<Node> mappedNodes = result.keySet();
+ for (Node n : mappedNodes) {
+ if(n.getOutgoing().size() != result.get(n).getOutgoing().size() ||
+ n.getIncoming().size() != result.get(n).getIncoming().size()){
+ return true;
+ }
+ else if (n.getOutgoing().size() == result.get(n).getOutgoing().size()) {
+ for(Edge e: n.getOutgoing()) {
+ if(!result.containsKey(e.getTarget())){
+ return true;
+ }
+ }
+ if (n.getIncoming().size() == result.get(n).getIncoming().size()) {
+ for(Edge e: n.getIncoming()) {
+ if(!result.containsKey(e.getSource())){
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
}
public <T extends Span> Set<T> setRequires(Set<T> spans) {
diff --git a/plugins/org.eclipse.emf.henshin.multicda.cda/src/org/eclipse/emf/henshin/multicda/cda/Utils.java b/plugins/org.eclipse.emf.henshin.multicda.cda/src/org/eclipse/emf/henshin/multicda/cda/Utils.java
index 69d052e..6858742 100644
--- a/plugins/org.eclipse.emf.henshin.multicda.cda/src/org/eclipse/emf/henshin/multicda/cda/Utils.java
+++ b/plugins/org.eclipse.emf.henshin.multicda.cda/src/org/eclipse/emf/henshin/multicda/cda/Utils.java
@@ -1046,6 +1046,9 @@
public static Map<Node, Node> mapNodes(Set<Node> nodesOriginal1, Set<Node> nodesOriginal2, Set<Node> nodes2,
Map<Node, Node> result, boolean allActionTypes) {
+
+ //Tries to compute a mapping from nodesOriginal1 to nodesOriginal2
+ //When there is a mapping, result is not empty
if (result == null)
result = new HashMap<>();
for (Node n2 : nodes2) {
@@ -1058,12 +1061,16 @@
EList<Edge> e1 = n1.getOutgoing(e2.getType());
boolean foundEdge = false;
for (Edge e : e1)
- if ((allActionTypes || e.getAction().getType() == Action.Type.PRESERVE)
- && nodesOriginal1.contains(e.getTarget())) {
- foundEdge = true;
- break;
- }
- found = foundEdge;
+ if (allActionTypes || e.getAction().getType() == Action.Type.PRESERVE) {
+ //&& nodesOriginal1.contains(e.getTarget())
+ if (result.get(e.getTarget()) == null || result.get(e.getTarget())== e2.getTarget()) {
+ foundEdge = true;
+ break;
+ }
+ }
+ if (e1.size() != 0) {
+ found = foundEdge;
+ }
}
if (found)
for (Edge e2 : n2.getIncoming())
@@ -1071,12 +1078,17 @@
EList<Edge> e1 = n1.getIncoming(e2.getType());
boolean foundEdge = false;
for (Edge e : e1)
- if ((allActionTypes || e.getAction().getType() == Action.Type.PRESERVE)
- && nodesOriginal1.contains(e.getTarget())) {
- foundEdge = true;
- break;
- }
- found = foundEdge;
+ if (allActionTypes || e.getAction().getType() == Action.Type.PRESERVE) {
+ //&& nodesOriginal1.contains(e.getTarget())
+ // in the follwoing: getTarget() should be getSource()
+ if (result.get(e.getSource()) == null || result.get(e.getSource())== e2.getSource()) {
+ foundEdge = true;
+ break;
+ }
+ }
+ if (e1.size() != 0) {
+ found = foundEdge;
+ }
}
if (found) {
result.put(n1, n2);
@@ -1086,7 +1098,9 @@
return result;
}
mapNodes(nodesOriginal1, nodesOriginal2, remained, result, allActionTypes);
- if (result.size() == nodesOriginal2.size()) {
+ //was nodesOriginal2
+ if (result.size() == Math.min(nodesOriginal1.size(),nodesOriginal2.size())) {
+ //if (result.size() == nodesOriginal2.size() - remained.size()) {
return result;
}
result.remove(n1);
diff --git a/plugins/org.eclipse.emf.henshin.tests/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.henshin.tests/META-INF/MANIFEST.MF
index ee737c7..84c5bd8 100644
--- a/plugins/org.eclipse.emf.henshin.tests/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.henshin.tests/META-INF/MANIFEST.MF
@@ -2,6 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.emf.henshin.tests;singleton:=true
+Automatic-Module-Name: org.eclipse.emf.henshin.tests
Bundle-Version: 1.7.0.qualifier
Bundle-ClassPath: .
Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.emf.henshin.tests/basic/models/attributeTestsModels/restrictedAttributes.testmodel b/plugins/org.eclipse.emf.henshin.tests/basic/models/attributeTestsModels/restrictedAttributes.testmodel
new file mode 100644
index 0000000..aef837b
--- /dev/null
+++ b/plugins/org.eclipse.emf.henshin.tests/basic/models/attributeTestsModels/restrictedAttributes.testmodel
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testmodel:cont xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:testmodel="http://www.eclipse.org/emf/2010/Henshin/Tests">
+ <containsNode hasVals="//@containsVal.0" nodename="TestNode"/>
+ <containsVal xsi:type="testmodel:SpecialVal" intvl="10" valname="TestValue" unsetablevl="99"/>
+</testmodel:cont>
diff --git a/plugins/org.eclipse.emf.henshin.tests/basic/rules/basicTests.henshin b/plugins/org.eclipse.emf.henshin.tests/basic/rules/basicTests.henshin
index d70d6bc..af175a0 100644
--- a/plugins/org.eclipse.emf.henshin.tests/basic/rules/basicTests.henshin
+++ b/plugins/org.eclipse.emf.henshin.tests/basic/rules/basicTests.henshin
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="CP1252"?>
-<henshin:Module xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_fzh7MPkLEeG8L_O0_HQfRg" name="basicTests">
+<?xml version="1.0" encoding="UTF-8"?>
+<henshin:Module xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_fzh7MPkLEeG8L_O0_HQfRg" name="basicTests">
<imports href="http://www.eclipse.org/emf/2010/Henshin/Tests#/"/>
<units xsi:type="henshin:Rule" xmi:id="_fziiQPkLEeG8L_O0_HQfRg" name="createNodeWithContainmentEdge">
<lhs xmi:id="_fziiQ_kLEeG8L_O0_HQfRg" name="LHS">
@@ -855,4 +855,109 @@
</rhs>
<mappings xmi:id="_f05NIfkLEeG8L_O0_HQfRg" origin="_f0tm8fkLEeG8L_O0_HQfRg" image="_f0u1EPkLEeG8L_O0_HQfRg"/>
</units>
+ <units xsi:type="henshin:Rule" xmi:id="_407VsASIEeuVKoowyGAAsw" name="setStandardAttributeValue">
+ <lhs xmi:id="_41NCgASIEeuVKoowyGAAsw" name="Lhs">
+ <nodes xmi:id="_jPU-4ASLEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ </nodes>
+ </lhs>
+ <rhs xmi:id="_41NCgQSIEeuVKoowyGAAsw" name="Rhs">
+ <nodes xmi:id="_jPW0EASLEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ <attributes xmi:id="_mni34ASLEeuVKoowyGAAsw" value="99">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val/intvl"/>
+ </attributes>
+ </nodes>
+ </rhs>
+ <mappings xmi:id="_jPW0EQSLEeuVKoowyGAAsw" origin="_jPU-4ASLEeuVKoowyGAAsw" image="_jPW0EASLEeuVKoowyGAAsw"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="__-O6sASIEeuVKoowyGAAsw" name="setDerivedAttributeValue">
+ <lhs xmi:id="__-Qv4ASIEeuVKoowyGAAsw" name="Lhs">
+ <nodes xmi:id="_sufA8ASLEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ </nodes>
+ </lhs>
+ <rhs xmi:id="__-Qv4QSIEeuVKoowyGAAsw" name="Rhs">
+ <nodes xmi:id="_sufoAASLEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ <attributes xmi:id="_uK_bMASLEeuVKoowyGAAsw" value="99">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal/derivedvl"/>
+ </attributes>
+ </nodes>
+ </rhs>
+ <mappings xmi:id="_sufoAQSLEeuVKoowyGAAsw" origin="_sufA8ASLEeuVKoowyGAAsw" image="_sufoAASLEeuVKoowyGAAsw"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_MqS9oASJEeuVKoowyGAAsw" name="setUnchangeableAttributeValue">
+ <lhs xmi:id="_MqULwASJEeuVKoowyGAAsw" name="Lhs">
+ <nodes xmi:id="_2m-JAASLEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ </nodes>
+ </lhs>
+ <rhs xmi:id="_MqULwQSJEeuVKoowyGAAsw" name="Rhs">
+ <nodes xmi:id="_2m-JAQSLEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ <attributes xmi:id="_3zWckASLEeuVKoowyGAAsw" value="99">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal/unchangeablevl"/>
+ </attributes>
+ </nodes>
+ </rhs>
+ <mappings xmi:id="_2m-JAgSLEeuVKoowyGAAsw" origin="_2m-JAASLEeuVKoowyGAAsw" image="_2m-JAQSLEeuVKoowyGAAsw"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_6pMBQASLEeuVKoowyGAAsw" name="unsetUnsetableAttribute">
+ <parameters xmi:id="_XqwTAASMEeuVKoowyGAAsw" name="x" kind="OUT">
+ <type xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+ </parameters>
+ <lhs xmi:id="_6pNPYASLEeuVKoowyGAAsw" name="Lhs">
+ <nodes xmi:id="_UA_XAASMEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ <attributes xmi:id="_VZKD0ASMEeuVKoowyGAAsw" value="x">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal/unsetablevl"/>
+ </attributes>
+ </nodes>
+ </lhs>
+ <rhs xmi:id="_6pNPYQSLEeuVKoowyGAAsw" name="Rhs">
+ <nodes xmi:id="_UA_XAQSMEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ </nodes>
+ </rhs>
+ <mappings xmi:id="_UA_XAgSMEeuVKoowyGAAsw" origin="_UA_XAASMEeuVKoowyGAAsw" image="_UA_XAQSMEeuVKoowyGAAsw"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_B4WWoASMEeuVKoowyGAAsw" name="unsetStandardAttribute">
+ <parameters xmi:id="_P6MgwASMEeuVKoowyGAAsw" name="x" kind="OUT">
+ <type xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+ </parameters>
+ <lhs xmi:id="_B4XkwASMEeuVKoowyGAAsw" name="Lhs">
+ <nodes xmi:id="_E6uigASMEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ <attributes xmi:id="_GkXZ0ASMEeuVKoowyGAAsw" value="x">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val/intvl"/>
+ </attributes>
+ </nodes>
+ </lhs>
+ <rhs xmi:id="_B4XkwQSMEeuVKoowyGAAsw" name="Rhs">
+ <nodes xmi:id="_E6uigQSMEeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ </nodes>
+ </rhs>
+ <mappings xmi:id="_E6uiggSMEeuVKoowyGAAsw" origin="_E6uigASMEeuVKoowyGAAsw" image="_E6uigQSMEeuVKoowyGAAsw"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_3TW0cAS4EeuVKoowyGAAsw" name="unsetUnsetableUnchangeableAttribute">
+ <parameters xmi:id="_Kdef8AS5EeuVKoowyGAAsw" name="x" kind="OUT">
+ <type xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+ </parameters>
+ <lhs xmi:id="_3TZ3wAS4EeuVKoowyGAAsw" name="Lhs">
+ <nodes xmi:id="_3xI8oAS4EeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ <attributes xmi:id="_E2qocAS5EeuVKoowyGAAsw" value="x">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal/unsetableunchangeablevl"/>
+ </attributes>
+ </nodes>
+ </lhs>
+ <rhs xmi:id="_3TZ3wQS4EeuVKoowyGAAsw" name="Rhs">
+ <nodes xmi:id="_3xI8oQS4EeuVKoowyGAAsw" name="v">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//SpecialVal"/>
+ </nodes>
+ </rhs>
+ <mappings xmi:id="_3xI8ogS4EeuVKoowyGAAsw" origin="_3xI8oAS4EeuVKoowyGAAsw" image="_3xI8oQS4EeuVKoowyGAAsw"/>
+ </units>
</henshin:Module>
diff --git a/plugins/org.eclipse.emf.henshin.tests/basic/rules/basicTests.henshin_diagram b/plugins/org.eclipse.emf.henshin.tests/basic/rules/basicTests.henshin_diagram
new file mode 100644
index 0000000..36b46f6
--- /dev/null
+++ b/plugins/org.eclipse.emf.henshin.tests/basic/rules/basicTests.henshin_diagram
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmi:id="_0D_LsASHEeubE-0qOuPy7w" type="Henshin" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_x1HD4ASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1HD4gSIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1HD4wSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_fziiQPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1HD4QSIEeuVKoowyGAAsw"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1HD5ASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1Hq8ASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1Hq8QSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_fzkXcfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1HD5QSIEeuVKoowyGAAsw" x="310"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1Hq8gSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1Hq9ASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1Hq9QSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_fznawfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1Hq8wSIEeuVKoowyGAAsw" x="672"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1Hq9gSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1Hq-ASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1Hq-QSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_fzp3A_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1Hq9wSIEeuVKoowyGAAsw" x="1077"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1Hq-gSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1Hq_ASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1Hq_QSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_fzs6UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1Hq-wSIEeuVKoowyGAAsw" x="1482"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1Hq_gSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1HrAASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1HrAQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_fzthYfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1Hq_wSIEeuVKoowyGAAsw" x="1792"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1HrAgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1HrBASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1HrBQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_fzuvgvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1HrAwSIEeuVKoowyGAAsw" x="2102"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1HrBgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1HrCASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1HrCQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_fz_OMfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1HrBwSIEeuVKoowyGAAsw" x="2464"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1ISAASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISAgSIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISAwSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0CRgPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1ISAQSIEeuVKoowyGAAsw" x="2828"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1ISBASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISBgSIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISBwSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0EtwvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1ISBQSIEeuVKoowyGAAsw" x="3198"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1ISCASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISCgSIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISCwSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0HxEPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1ISCQSIEeuVKoowyGAAsw" x="3568"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1ISDASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISDgSIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISDwSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0K0YfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1ISDQSIEeuVKoowyGAAsw" x="3938"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1ISEASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISEgSIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISEwSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0MpkfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1ISEQSIEeuVKoowyGAAsw" x="4248"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1ISFASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISFgSIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1ISFwSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0OewPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1ISFQSIEeuVKoowyGAAsw" x="4558"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1ISGASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5EASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5EQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0QT8fkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1ISGQSIEeuVKoowyGAAsw" x="4868"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1I5EgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5FASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5FQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0T-UPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1I5EwSIEeuVKoowyGAAsw" x="5178"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1I5FgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5GASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5GQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0XBofkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1I5FwSIEeuVKoowyGAAsw" x="5488"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1I5GgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5HASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5HQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0Zd4fkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1I5GwSIEeuVKoowyGAAsw" x="5798"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1I5HgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5IASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5IQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0b6IPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1I5HwSIEeuVKoowyGAAsw" x="6108"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1I5IgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5JASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1I5JQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0e9cPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1I5IwSIEeuVKoowyGAAsw" x="6478"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1I5JgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgIASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgIQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0hZsvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1I5JwSIEeuVKoowyGAAsw" x="6848"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1JgIgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgJASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgJQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0jO4_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1JgIwSIEeuVKoowyGAAsw" x="7158"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1JgJgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgKASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgKQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0m5QvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1JgJwSIEeuVKoowyGAAsw" x="7563"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1JgKgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgLASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgLQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0p8kPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1JgKwSIEeuVKoowyGAAsw" x="8024"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1JgLgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgMASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgMQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0sY0vkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1JgLwSIEeuVKoowyGAAsw" x="8485"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_x1JgMgSIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgNASIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_x1JgNQSIEeuVKoowyGAAsw" type="7001"/>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_f0s_4_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x1JgMwSIEeuVKoowyGAAsw" x="8795"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_41JYIASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_jPW0EgSLEeuVKoowyGAAsw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_jPW0EwSLEeuVKoowyGAAsw" key="value" value="preserve"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_41JYIgSIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_41JYIwSIEeuVKoowyGAAsw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_jPbFgASLEeuVKoowyGAAsw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_jPbFggSLEeuVKoowyGAAsw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_jPbFgwSLEeuVKoowyGAAsw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_jPbFhASLEeuVKoowyGAAsw" type="7002">
+ <children xmi:type="notation:Node" xmi:id="_mnnJUASLEeuVKoowyGAAsw" type="3002">
+ <element xmi:type="henshin:Attribute" href="basicTests.henshin#_mni34ASLEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_mnnJUQSLEeuVKoowyGAAsw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_jPbFhQSLEeuVKoowyGAAsw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_jPbFhgSLEeuVKoowyGAAsw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="basicTests.henshin#_jPU-4ASLEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jPbFgQSLEeuVKoowyGAAsw" x="57" y="44"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_407VsASIEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_41JYIQSIEeuVKoowyGAAsw" x="8981" y="297"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="__-PhwASIEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_sufoAgSLEeuVKoowyGAAsw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sufoAwSLEeuVKoowyGAAsw" key="value" value="preserve"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="__-PhwgSIEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="__-PhwwSIEeuVKoowyGAAsw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_suirUASLEeuVKoowyGAAsw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_suirUgSLEeuVKoowyGAAsw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_suirUwSLEeuVKoowyGAAsw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_suirVASLEeuVKoowyGAAsw" type="7002">
+ <children xmi:type="notation:Node" xmi:id="_uLCegASLEeuVKoowyGAAsw" type="3002">
+ <element xmi:type="henshin:Attribute" href="basicTests.henshin#_uK_bMASLEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_uLCegQSLEeuVKoowyGAAsw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_suirVQSLEeuVKoowyGAAsw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_suirVgSLEeuVKoowyGAAsw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="basicTests.henshin#_sufA8ASLEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_suirUQSLEeuVKoowyGAAsw" x="53" y="47"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#__-O6sASIEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__-PhwQSIEeuVKoowyGAAsw" x="9271" y="297"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_MqTksASJEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2m-JAwSLEeuVKoowyGAAsw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2m-JBASLEeuVKoowyGAAsw" key="value" value="preserve"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_MqTksgSJEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_MqTkswSJEeuVKoowyGAAsw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_2m-JBQSLEeuVKoowyGAAsw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2m-JBwSLEeuVKoowyGAAsw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_2m-JCASLEeuVKoowyGAAsw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_2m-JCQSLEeuVKoowyGAAsw" type="7002">
+ <children xmi:type="notation:Node" xmi:id="_3zY40ASLEeuVKoowyGAAsw" type="3002">
+ <element xmi:type="henshin:Attribute" href="basicTests.henshin#_3zWckASLEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_3zY40QSLEeuVKoowyGAAsw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_2m-JCgSLEeuVKoowyGAAsw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_2m-JCwSLEeuVKoowyGAAsw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="basicTests.henshin#_2m-JAASLEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2m-JBgSLEeuVKoowyGAAsw" x="54" y="42"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_MqS9oASJEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MqTksQSJEeuVKoowyGAAsw" x="9548" y="297"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_6pMoUASLEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UA_XAwSMEeuVKoowyGAAsw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UA_XBASMEeuVKoowyGAAsw" key="value" value="preserve"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6pMoUgSLEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6pMoUwSLEeuVKoowyGAAsw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_UBCaUASMEeuVKoowyGAAsw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_UBCaUgSMEeuVKoowyGAAsw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_UBCaUwSMEeuVKoowyGAAsw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_UBCaVASMEeuVKoowyGAAsw" type="7002">
+ <children xmi:type="notation:Node" xmi:id="_VZNuMASMEeuVKoowyGAAsw" type="3002">
+ <element xmi:type="henshin:Attribute" href="basicTests.henshin#_VZKD0ASMEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_VZNuMQSMEeuVKoowyGAAsw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_UBCaVQSMEeuVKoowyGAAsw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_UBCaVgSMEeuVKoowyGAAsw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="basicTests.henshin#_UA_XAASMEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UBCaUQSMEeuVKoowyGAAsw" x="57" y="42"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_6pMBQASLEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6pMoUQSLEeuVKoowyGAAsw" x="10134" y="297"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_B4W9sASMEeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_E6uigwSMEeuVKoowyGAAsw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_E6uihASMEeuVKoowyGAAsw" key="value" value="preserve"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_B4W9sgSMEeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_B4W9swSMEeuVKoowyGAAsw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_E6xl0ASMEeuVKoowyGAAsw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_E6xl0gSMEeuVKoowyGAAsw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_E6xl0wSMEeuVKoowyGAAsw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_E6xl1ASMEeuVKoowyGAAsw" type="7002">
+ <children xmi:type="notation:Node" xmi:id="_GkadIASMEeuVKoowyGAAsw" type="3002">
+ <element xmi:type="henshin:Attribute" href="basicTests.henshin#_GkXZ0ASMEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GkadIQSMEeuVKoowyGAAsw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_E6xl1QSMEeuVKoowyGAAsw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_E6xl1gSMEeuVKoowyGAAsw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="basicTests.henshin#_E6uigASMEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E6xl0QSMEeuVKoowyGAAsw" x="76" y="41"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_B4WWoASMEeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_B4W9sQSMEeuVKoowyGAAsw" x="9837" y="297"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_3TYpoAS4EeuVKoowyGAAsw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3xJjsAS4EeuVKoowyGAAsw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_3xJjsQS4EeuVKoowyGAAsw" key="value" value="preserve"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_3TYpogS4EeuVKoowyGAAsw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_3TYpowS4EeuVKoowyGAAsw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_3xN1IAS4EeuVKoowyGAAsw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_3xN1IgS4EeuVKoowyGAAsw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_3xN1IwS4EeuVKoowyGAAsw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_3xN1JAS4EeuVKoowyGAAsw" type="7002">
+ <children xmi:type="notation:Node" xmi:id="_E2wvEAS5EeuVKoowyGAAsw" type="3002">
+ <element xmi:type="henshin:Attribute" href="basicTests.henshin#_E2qocAS5EeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_E2wvEQS5EeuVKoowyGAAsw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_3xN1JQS4EeuVKoowyGAAsw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_3xN1JgS4EeuVKoowyGAAsw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="basicTests.henshin#_3xI8oAS4EeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3xN1IQS4EeuVKoowyGAAsw" x="55" y="40"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="basicTests.henshin#_3TW0cAS4EeuVKoowyGAAsw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3TYpoQS4EeuVKoowyGAAsw" x="10453" y="297"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_0D_LsQSHEeubE-0qOuPy7w"/>
+ <element xmi:type="henshin:Module" href="basicTests.henshin#_fzh7MPkLEeG8L_O0_HQfRg"/>
+</notation:Diagram>
diff --git a/plugins/org.eclipse.emf.henshin.tests/basic/rules/unitTests.henshin b/plugins/org.eclipse.emf.henshin.tests/basic/rules/unitTests.henshin
index 13fe900..c34b27a 100644
--- a/plugins/org.eclipse.emf.henshin.tests/basic/rules/unitTests.henshin
+++ b/plugins/org.eclipse.emf.henshin.tests/basic/rules/unitTests.henshin
@@ -354,6 +354,7 @@
<mappings xmi:id="_sU7mQfkLEeG8L_O0_HQfRg" origin="_sU6YIPkLEeG8L_O0_HQfRg" image="_sU6_MfkLEeG8L_O0_HQfRg"/>
<mappings xmi:id="_sU7mQvkLEeG8L_O0_HQfRg" origin="_sU6YIfkLEeG8L_O0_HQfRg" image="_sU6_MvkLEeG8L_O0_HQfRg"/>
<multiRules xmi:id="_sU8NUPkLEeG8L_O0_HQfRg" name="amalgamationUnitTest_mul_deleteChild" description="">
+ <parameters xmi:id="_HGG-0AM1EeuCbfdqQWBQPQ" name="ndname"/>
<lhs xmi:id="_sU8NU_kLEeG8L_O0_HQfRg" name="LHS">
<nodes xmi:id="_sU8NVPkLEeG8L_O0_HQfRg" name="containment" outgoing="_sU80YvkLEeG8L_O0_HQfRg _sU9bcPkLEeG8L_O0_HQfRg">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//cont"/>
@@ -396,6 +397,7 @@
<multiMappings xmi:id="_sU_QofkLEeG8L_O0_HQfRg" origin="_sU6_MvkLEeG8L_O0_HQfRg" image="_sU-CgfkLEeG8L_O0_HQfRg"/>
</multiRules>
<multiRules xmi:id="_sU_QovkLEeG8L_O0_HQfRg" name="amalgamationUnitTest_mul_deleteVal">
+ <parameters xmi:id="_HGG-0QM1EeuCbfdqQWBQPQ" name="ndname"/>
<lhs xmi:id="_sU_QpfkLEeG8L_O0_HQfRg" name="LHS">
<nodes xmi:id="_sU_3sPkLEeG8L_O0_HQfRg" name="cont" outgoing="_sVAewPkLEeG8L_O0_HQfRg _sVAewfkLEeG8L_O0_HQfRg">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//cont"/>
@@ -510,101 +512,91 @@
</units>
<units xsi:type="henshin:Rule" xmi:id="_sVKPwPkLEeG8L_O0_HQfRg" name="amu_attributeInKernelNac_krl_amu2_krl">
<lhs xmi:id="_sVKPw_kLEeG8L_O0_HQfRg" name="LHS">
- <nodes xmi:id="_sVKPxPkLEeG8L_O0_HQfRg" name="main_nd">
+ <nodes xmi:id="_1DXAgAMzEeuCbfdqQWBQPQ" name="main">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
- <attributes xmi:id="_sVK20PkLEeG8L_O0_HQfRg" value=""X"">
+ <attributes xmi:id="_xdhFwAM0EeuCbfdqQWBQPQ" value=""X"">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node/nodename"/>
</attributes>
</nodes>
- <nodes xmi:id="_sVK20fkLEeG8L_O0_HQfRg" name="sel_nd" outgoing="_sVLd4fkLEeG8L_O0_HQfRg">
+ <nodes xmi:id="_9sR-IAMzEeuCbfdqQWBQPQ" name="sel">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
</nodes>
- <nodes xmi:id="_sVLd4PkLEeG8L_O0_HQfRg" name="vl" incoming="_sVLd4fkLEeG8L_O0_HQfRg">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val"/>
- </nodes>
- <edges xmi:id="_sVLd4fkLEeG8L_O0_HQfRg" source="_sVK20fkLEeG8L_O0_HQfRg" target="_sVLd4PkLEeG8L_O0_HQfRg">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node/hasVals"/>
- </edges>
- <formula xsi:type="henshin:NestedCondition" xmi:id="_sVME8PkLEeG8L_O0_HQfRg">
- <conclusion xmi:id="_sVME8fkLEeG8L_O0_HQfRg" name="select node without val with intvl=4">
- <nodes xmi:id="_sVME8vkLEeG8L_O0_HQfRg" name="nd" outgoing="_sVNTEPkLEeG8L_O0_HQfRg">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
- </nodes>
- <nodes xmi:id="_sVMsAPkLEeG8L_O0_HQfRg" name="vl" incoming="_sVNTEPkLEeG8L_O0_HQfRg">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val"/>
- <attributes xmi:id="_sVMsAfkLEeG8L_O0_HQfRg" value="4">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val/intvl"/>
- </attributes>
- </nodes>
- <edges xmi:id="_sVNTEPkLEeG8L_O0_HQfRg" source="_sVME8vkLEeG8L_O0_HQfRg" target="_sVMsAPkLEeG8L_O0_HQfRg">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node/hasVals"/>
- </edges>
- </conclusion>
- <mappings xmi:id="_sVNTEfkLEeG8L_O0_HQfRg" origin="_sVK20fkLEeG8L_O0_HQfRg" image="_sVME8vkLEeG8L_O0_HQfRg"/>
- <mappings xmi:id="_sVN6IPkLEeG8L_O0_HQfRg" origin="_sVLd4PkLEeG8L_O0_HQfRg" image="_sVMsAPkLEeG8L_O0_HQfRg"/>
- </formula>
</lhs>
<rhs xmi:id="_sVN6IfkLEeG8L_O0_HQfRg" name="RHS">
- <nodes xmi:id="_sVN6IvkLEeG8L_O0_HQfRg" name="main_nd">
+ <nodes xmi:id="_1DXAgQMzEeuCbfdqQWBQPQ" name="main">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
- </nodes>
- <nodes xmi:id="_sVOhMPkLEeG8L_O0_HQfRg" name="sel_nd" outgoing="_sVPIQfkLEeG8L_O0_HQfRg">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
- </nodes>
- <nodes xmi:id="_sVOhMfkLEeG8L_O0_HQfRg" name="vl" incoming="_sVPIQfkLEeG8L_O0_HQfRg">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val"/>
- <attributes xmi:id="_sVPIQPkLEeG8L_O0_HQfRg" value="4">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val/intvl"/>
+ <attributes xmi:id="_xdhFwQM0EeuCbfdqQWBQPQ" value=""X"">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node/nodename"/>
</attributes>
</nodes>
- <edges xmi:id="_sVPIQfkLEeG8L_O0_HQfRg" source="_sVOhMPkLEeG8L_O0_HQfRg" target="_sVOhMfkLEeG8L_O0_HQfRg">
- <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node/hasVals"/>
- </edges>
+ <nodes xmi:id="_9sR-IQMzEeuCbfdqQWBQPQ" name="sel">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
+ </nodes>
</rhs>
- <mappings xmi:id="_sVPvUPkLEeG8L_O0_HQfRg" origin="_sVKPxPkLEeG8L_O0_HQfRg" image="_sVN6IvkLEeG8L_O0_HQfRg"/>
- <mappings xmi:id="_sVPvUfkLEeG8L_O0_HQfRg" origin="_sVK20fkLEeG8L_O0_HQfRg" image="_sVOhMPkLEeG8L_O0_HQfRg"/>
- <mappings xmi:id="_sVPvUvkLEeG8L_O0_HQfRg" origin="_sVLd4PkLEeG8L_O0_HQfRg" image="_sVOhMfkLEeG8L_O0_HQfRg"/>
- <multiRules xmi:id="_sVQWYPkLEeG8L_O0_HQfRg" name="amu_attributeInKernelNac_mul_amu2_multi">
- <lhs xmi:id="_sVQWY_kLEeG8L_O0_HQfRg" name="LHS">
- <nodes xmi:id="_sVQWZPkLEeG8L_O0_HQfRg" name="main_nd">
+ <mappings xmi:id="_1DXAggMzEeuCbfdqQWBQPQ" origin="_1DXAgAMzEeuCbfdqQWBQPQ" image="_1DXAgQMzEeuCbfdqQWBQPQ"/>
+ <mappings xmi:id="_9sR-IgMzEeuCbfdqQWBQPQ" origin="_9sR-IAMzEeuCbfdqQWBQPQ" image="_9sR-IQMzEeuCbfdqQWBQPQ"/>
+ <multiRules xmi:id="_eA1qoAM0EeuCbfdqQWBQPQ">
+ <lhs xmi:id="_eA1qoQM0EeuCbfdqQWBQPQ" name="Lhs">
+ <nodes xmi:id="_eA2RsQM0EeuCbfdqQWBQPQ" name="main">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
</nodes>
- <nodes xmi:id="_sVQ9cPkLEeG8L_O0_HQfRg" name="sel_nd" outgoing="_sVRkgPkLEeG8L_O0_HQfRg">
+ <nodes xmi:id="_eA2RtgM0EeuCbfdqQWBQPQ" name="sel" outgoing="_ffYFMAM0EeuCbfdqQWBQPQ">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
</nodes>
- <nodes xmi:id="_sVQ9cfkLEeG8L_O0_HQfRg" name="vl" incoming="_sVRkgPkLEeG8L_O0_HQfRg">
+ <nodes xmi:id="_cKM5IAM0EeuCbfdqQWBQPQ" name="val" incoming="_ffYFMAM0EeuCbfdqQWBQPQ">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val"/>
</nodes>
- <edges xmi:id="_sVRkgPkLEeG8L_O0_HQfRg" source="_sVQ9cPkLEeG8L_O0_HQfRg" target="_sVQ9cfkLEeG8L_O0_HQfRg">
+ <edges xmi:id="_ffYFMAM0EeuCbfdqQWBQPQ" source="_eA2RtgM0EeuCbfdqQWBQPQ" target="_cKM5IAM0EeuCbfdqQWBQPQ">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node/hasVals"/>
</edges>
+ <formula xsi:type="henshin:Not" xmi:id="_vAb_UAM0EeuCbfdqQWBQPQ">
+ <child xsi:type="henshin:NestedCondition" xmi:id="_vAb_UQM0EeuCbfdqQWBQPQ">
+ <conclusion xmi:id="_vAb_UgM0EeuCbfdqQWBQPQ">
+ <nodes xmi:id="_vAb_UwM0EeuCbfdqQWBQPQ" name="val" incoming="_vAb_WAM0EeuCbfdqQWBQPQ">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val"/>
+ <attributes xmi:id="_nPMQkAM0EeuCbfdqQWBQPQ" value="4">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val/intvl"/>
+ </attributes>
+ </nodes>
+ <nodes xmi:id="_vAb_VgM0EeuCbfdqQWBQPQ" name="sel" outgoing="_vAb_WAM0EeuCbfdqQWBQPQ">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
+ </nodes>
+ <edges xmi:id="_vAb_WAM0EeuCbfdqQWBQPQ" source="_vAb_VgM0EeuCbfdqQWBQPQ" target="_vAb_UwM0EeuCbfdqQWBQPQ">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node/hasVals"/>
+ </edges>
+ </conclusion>
+ <mappings xmi:id="_vAb_VQM0EeuCbfdqQWBQPQ" origin="_cKM5IAM0EeuCbfdqQWBQPQ" image="_vAb_UwM0EeuCbfdqQWBQPQ"/>
+ <mappings xmi:id="_vAb_VwM0EeuCbfdqQWBQPQ" origin="_eA2RtgM0EeuCbfdqQWBQPQ" image="_vAb_VgM0EeuCbfdqQWBQPQ"/>
+ </child>
+ </formula>
</lhs>
- <rhs xmi:id="_sVRkgfkLEeG8L_O0_HQfRg" name="RHS">
- <nodes xmi:id="_sVRkgvkLEeG8L_O0_HQfRg" name="main_nd" outgoing="_sVSyofkLEeG8L_O0_HQfRg">
+ <rhs xmi:id="_eA1qogM0EeuCbfdqQWBQPQ" name="Rhs">
+ <nodes xmi:id="_eA1qowM0EeuCbfdqQWBQPQ" name="main" outgoing="_lIY8IAM0EeuCbfdqQWBQPQ">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
</nodes>
- <nodes xmi:id="_sVSLkPkLEeG8L_O0_HQfRg" name="sel_nd" outgoing="_sVSyoPkLEeG8L_O0_HQfRg">
+ <nodes xmi:id="_eA2RtAM0EeuCbfdqQWBQPQ" name="sel" outgoing="_ffYsQAM0EeuCbfdqQWBQPQ">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node"/>
</nodes>
- <nodes xmi:id="_sVSLkfkLEeG8L_O0_HQfRg" name="vl" incoming="_sVSyoPkLEeG8L_O0_HQfRg _sVSyofkLEeG8L_O0_HQfRg">
+ <nodes xmi:id="_cKM5IQM0EeuCbfdqQWBQPQ" name="val" incoming="_ffYsQAM0EeuCbfdqQWBQPQ _lIY8IAM0EeuCbfdqQWBQPQ">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val"/>
+ <attributes xmi:id="_VxrbYAM1EeuCbfdqQWBQPQ" value="4">
+ <type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Val/intvl"/>
+ </attributes>
</nodes>
- <edges xmi:id="_sVSyoPkLEeG8L_O0_HQfRg" source="_sVSLkPkLEeG8L_O0_HQfRg" target="_sVSLkfkLEeG8L_O0_HQfRg">
+ <edges xmi:id="_ffYsQAM0EeuCbfdqQWBQPQ" source="_eA2RtAM0EeuCbfdqQWBQPQ" target="_cKM5IQM0EeuCbfdqQWBQPQ">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node/hasVals"/>
</edges>
- <edges xmi:id="_sVSyofkLEeG8L_O0_HQfRg" source="_sVRkgvkLEeG8L_O0_HQfRg" target="_sVSLkfkLEeG8L_O0_HQfRg">
+ <edges xmi:id="_lIY8IAM0EeuCbfdqQWBQPQ" source="_eA1qowM0EeuCbfdqQWBQPQ" target="_cKM5IQM0EeuCbfdqQWBQPQ">
<type href="http://www.eclipse.org/emf/2010/Henshin/Tests#//Node/hasVals"/>
</edges>
</rhs>
- <mappings xmi:id="_sVTZsPkLEeG8L_O0_HQfRg" origin="_sVQWZPkLEeG8L_O0_HQfRg" image="_sVRkgvkLEeG8L_O0_HQfRg"/>
- <mappings xmi:id="_sVTZsfkLEeG8L_O0_HQfRg" origin="_sVQ9cPkLEeG8L_O0_HQfRg" image="_sVSLkPkLEeG8L_O0_HQfRg"/>
- <mappings xmi:id="_sVTZsvkLEeG8L_O0_HQfRg" origin="_sVQ9cfkLEeG8L_O0_HQfRg" image="_sVSLkfkLEeG8L_O0_HQfRg"/>
- <multiMappings xmi:id="_sVUAwPkLEeG8L_O0_HQfRg" origin="_sVKPxPkLEeG8L_O0_HQfRg" image="_sVQWZPkLEeG8L_O0_HQfRg"/>
- <multiMappings xmi:id="_sVUAwfkLEeG8L_O0_HQfRg" origin="_sVK20fkLEeG8L_O0_HQfRg" image="_sVQ9cPkLEeG8L_O0_HQfRg"/>
- <multiMappings xmi:id="_sVUAwvkLEeG8L_O0_HQfRg" origin="_sVLd4PkLEeG8L_O0_HQfRg" image="_sVQ9cfkLEeG8L_O0_HQfRg"/>
- <multiMappings xmi:id="_sVUAw_kLEeG8L_O0_HQfRg" origin="_sVN6IvkLEeG8L_O0_HQfRg" image="_sVRkgvkLEeG8L_O0_HQfRg"/>
- <multiMappings xmi:id="_sVUn0PkLEeG8L_O0_HQfRg" origin="_sVOhMPkLEeG8L_O0_HQfRg" image="_sVSLkPkLEeG8L_O0_HQfRg"/>
- <multiMappings xmi:id="_sVUn0fkLEeG8L_O0_HQfRg" origin="_sVOhMfkLEeG8L_O0_HQfRg" image="_sVSLkfkLEeG8L_O0_HQfRg"/>
+ <mappings xmi:id="_eA2RswM0EeuCbfdqQWBQPQ" origin="_eA2RsQM0EeuCbfdqQWBQPQ" image="_eA1qowM0EeuCbfdqQWBQPQ"/>
+ <mappings xmi:id="_eA2RuAM0EeuCbfdqQWBQPQ" origin="_eA2RtgM0EeuCbfdqQWBQPQ" image="_eA2RtAM0EeuCbfdqQWBQPQ"/>
+ <mappings xmi:id="_cKNgMAM0EeuCbfdqQWBQPQ" origin="_cKM5IAM0EeuCbfdqQWBQPQ" image="_cKM5IQM0EeuCbfdqQWBQPQ"/>
+ <multiMappings xmi:id="_eA2RsAM0EeuCbfdqQWBQPQ" origin="_1DXAgQMzEeuCbfdqQWBQPQ" image="_eA1qowM0EeuCbfdqQWBQPQ"/>
+ <multiMappings xmi:id="_eA2RsgM0EeuCbfdqQWBQPQ" origin="_1DXAgAMzEeuCbfdqQWBQPQ" image="_eA2RsQM0EeuCbfdqQWBQPQ"/>
+ <multiMappings xmi:id="_eA2RtQM0EeuCbfdqQWBQPQ" origin="_9sR-IQMzEeuCbfdqQWBQPQ" image="_eA2RtAM0EeuCbfdqQWBQPQ"/>
+ <multiMappings xmi:id="_eA2RtwM0EeuCbfdqQWBQPQ" origin="_9sR-IAMzEeuCbfdqQWBQPQ" image="_eA2RtgM0EeuCbfdqQWBQPQ"/>
</multiRules>
</units>
<units xsi:type="henshin:Rule" xmi:id="_sVUn0vkLEeG8L_O0_HQfRg" name="findNode">
@@ -701,7 +693,6 @@
<units xsi:type="henshin:SequentialUnit" xmi:id="_sVcjoPkLEeG8L_O0_HQfRg" name="sequentialUnitTest" subUnits="_sVF-UfkLEeG8L_O0_HQfRg _sUjLwfkLEeG8L_O0_HQfRg _sVdxxPkLEeG8L_O0_HQfRg"/>
<units xsi:type="henshin:SequentialUnit" xmi:id="_sVdxxPkLEeG8L_O0_HQfRg" name="subsequence" subUnits="_sVF-UfkLEeG8L_O0_HQfRg"/>
<units xsi:type="henshin:IndependentUnit" xmi:id="_sVe_4PkLEeG8L_O0_HQfRg" name="independentUnitTest" subUnits="_sUjLwfkLEeG8L_O0_HQfRg _sVF-UfkLEeG8L_O0_HQfRg _n4J7EJL5EeelVqCQguqkhw"/>
- <units xsi:type="henshin:SequentialUnit" xmi:id="_sVfm8PkLEeG8L_O0_HQfRg" name="loop_amu_attributeInKernelNac" subUnits="_sVKPwPkLEeG8L_O0_HQfRg _sVKPwPkLEeG8L_O0_HQfRg"/>
<units xsi:type="henshin:IndependentUnit" xmi:id="_sVfm9PkLEeG8L_O0_HQfRg" name="emptyIndependentUnit"/>
<units xsi:type="henshin:SequentialUnit" xmi:id="_sVgOAPkLEeG8L_O0_HQfRg" name="emptySequentialUnit"/>
<units xsi:type="henshin:PriorityUnit" xmi:id="_sVgOAfkLEeG8L_O0_HQfRg" name="emptyPriorityUnit"/>
@@ -749,4 +740,5 @@
</rhs>
<mappings xmi:id="_N5LiRyYSEeiTHaGclUiVMQ" origin="_N5LiQiYSEeiTHaGclUiVMQ" image="_N5LiRiYSEeiTHaGclUiVMQ"/>
</units>
+ <units xsi:type="henshin:IteratedUnit" xmi:id="_qmTdsAMxEeuCbfdqQWBQPQ" name="iter_amu_attributeInKernelNac" subUnit="_sVKPwPkLEeG8L_O0_HQfRg" iterations="2" strict="true"/>
</henshin:Module>
diff --git a/plugins/org.eclipse.emf.henshin.tests/basic/rules/unitTests.henshin_diagram b/plugins/org.eclipse.emf.henshin.tests/basic/rules/unitTests.henshin_diagram
new file mode 100644
index 0000000..a55acc0
--- /dev/null
+++ b/plugins/org.eclipse.emf.henshin.tests/basic/rules/unitTests.henshin_diagram
@@ -0,0 +1,1816 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmi:id="_T7HcAAMtEeuKm91C-HHeDg" type="Henshin" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_f8HIsAMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8IW0AMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8IW0QMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_f9Dj4AMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9Dj4gMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9Dj4wMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9EyAAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f9EyAQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f9EyAgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUjy0PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f9Dj4QMtEeuCbfdqQWBQPQ" x="20" y="2"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f9EyAwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9EyBQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9EyBgMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9EyBwMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f9EyCAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f9EyCQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUjy0fkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f9EyBAMtEeuCbfdqQWBQPQ" x="94" y="78"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f9FZEAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9FZEgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9FZEwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9FZFAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f9FZFQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f9FZFgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUkZ4PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f9FZEQMtEeuCbfdqQWBQPQ" x="221" y="78"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f9FZFwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9FZGQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9FZGgMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f9FZGwMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f9FZHAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f9FZHQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUkZ4fkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f9FZGAMtEeuCbfdqQWBQPQ" x="316" y="8"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUjLwfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8HIsQMtEeuCbfdqQWBQPQ" x="6" y="80"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8KMAAMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8KzEAMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8KzEQMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_f-OokAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-OokgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-OokwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-OolAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f-OolQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f-OolgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUm2J_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f-OokQMtEeuCbfdqQWBQPQ" x="24" y="73"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f-OolwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-OomQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-OomgMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-OomwMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f-OonAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f-OonQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUndMPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f-OomAMtEeuCbfdqQWBQPQ" x="114" y="69"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUm2IfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8KMAQMtEeuCbfdqQWBQPQ" x="30" y="380"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8KzEgMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8KzFAMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8KzFQMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_f-dSEAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-dSEgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-dSEwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-dSFAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f-dSFQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f-dSFgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUorU_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f-dSEQMtEeuCbfdqQWBQPQ" x="29" y="32"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f-dSFwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-dSGQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-dSGgMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-dSGwMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f-dSHAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f-dSHQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUpSYPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f-dSGAMtEeuCbfdqQWBQPQ" x="110" y="101"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f-dSHgMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-dSIAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-dSIQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-dSIgMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f-dSIwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f-dSJAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUpSYfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f-dSHwMtEeuCbfdqQWBQPQ" x="209" y="32"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUoEQ_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8KzEwMtEeuCbfdqQWBQPQ" x="525" y="159"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8KzFgMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8KzGAMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8LaIAMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_f-r7kAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-sioAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-sioQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-siogMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f-siowMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f-sipAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUruoPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f-r7kQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f-sipQMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-sipwMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-siqAMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-siqQMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f-siqgMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f-siqwMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUruofkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f-sipgMtEeuCbfdqQWBQPQ" x="121"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUrHkfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8KzFwMtEeuCbfdqQWBQPQ" x="905" y="199"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8LaIQMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8LaIwMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8LaJAMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_f-4v4AMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-4v4gMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-4v4wMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-4v5AMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f-4v5QMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f-4v5gMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUtj1PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f-4v4QMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f-4v5wMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-4v6QMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-4v6gMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-4v6wMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f-4v7AMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f-4v7QMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUuK4fkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f-4v6AMtEeuCbfdqQWBQPQ" x="121"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUs8w_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8LaIgMtEeuCbfdqQWBQPQ" x="1509"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8LaJQMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8LaJwMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8LaKAMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_f_GyUAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_GyUgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_GyUwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_GyVAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_GyVQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_GyVgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUvZBPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_GyUQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f_GyVwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_GyWQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_GyWgMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_GyWwMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_GyXAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_GyXQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUwnI_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_GyWAMtEeuCbfdqQWBQPQ" x="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f_GyXgMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_GyYAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_GyYQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_GyYgMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_GyYwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_GyZAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUwAEPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_GyXwMtEeuCbfdqQWBQPQ" x="318"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUvZAPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8LaJgMtEeuCbfdqQWBQPQ" x="1823"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8MBMAMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MBMgMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MBMwMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_f_X4EAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_YfIAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_YfIQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_YfIgMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_YfIwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_YfJAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUx1RfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_X4EQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f_YfJQMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_YfJwMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_YfKAMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_YfKQMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_YfKgMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_YfKwMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUzqcPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_YfJgMtEeuCbfdqQWBQPQ" x="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f_YfLAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_YfLgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_YfLwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_YfMAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_YfMQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_YfMgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sUycUvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_YfLQMtEeuCbfdqQWBQPQ" x="318"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUx1QfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8MBMQMtEeuCbfdqQWBQPQ" x="2349"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8MBNAMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MBNgMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MBNwMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_f_nvsAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_oWwAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_oWwQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_oWwgMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_oWwwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_oWxAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU04kPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_nvsQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f_oWxQMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_oWxwMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_oWyAMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_oWyQMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_oWygMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_oWywMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU04kfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_oWxgMtEeuCbfdqQWBQPQ" x="143"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f_oWzAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_oWzgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_oWzwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_oW0AMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_oW0QMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_oW0gMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU04kvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_oWzQMtEeuCbfdqQWBQPQ" x="273"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sU0RgvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8MBNQMtEeuCbfdqQWBQPQ" x="2875"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8MBOAMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MBOgMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MBOwMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_f_0kAAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_0kAgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_0kAwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_0kBAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_0kBQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_0kBgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU3U0fkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_0kAQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f_0kBwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_0kCQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_0kCgMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_0kCwMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_0kDAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_0kDQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU3U0vkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_0kCAMtEeuCbfdqQWBQPQ" x="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f_0kDgMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_0kEAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_0kEQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_0kEgMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_f_0kEwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_f_0kFAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU3U0_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_0kDwMtEeuCbfdqQWBQPQ" x="242"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sU2tw_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8MBOQMtEeuCbfdqQWBQPQ" x="3280"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8MBPAMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MoQAMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MoQQMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_gADNgAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gADNggMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gADNgwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gADNhAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gADNhQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gADNhgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU6YIPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gADNgQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gADNhwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gADNiQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gADNigMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gADNiwMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gADNjAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gADNjQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU6YIfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gADNiAMtEeuCbfdqQWBQPQ" x="160"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gADNjgMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gADNkAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gADNkQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAD0kAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gAD0kQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gAD0kgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU80YfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gADNjwMtEeuCbfdqQWBQPQ" x="406"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gAD0kwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAD0lQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAD0lgMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAD0lwMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gAD0mAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gAD0mQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sU_3svkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gAD0lAMtEeuCbfdqQWBQPQ" x="740"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sU5xEvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8MBPQMtEeuCbfdqQWBQPQ" x="3742"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8MoQgMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MoRAMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8MoRQMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_gAWIcAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAWIcgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAWIcwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAWIdAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gAWIdQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gAWIdgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVC7AfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gAWIcQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gAWIdwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAWIeQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAWIegMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAWIewMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gAWIfAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gAWIfQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVC7AvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gAWIeAMtEeuCbfdqQWBQPQ" x="160"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gAWIfgMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAWIgAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAWIgQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAWIggMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gAWIgwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gAWIhAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVDiEPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gAWIfwMtEeuCbfdqQWBQPQ" x="291"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVCT8_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8MoQwMtEeuCbfdqQWBQPQ" x="4814"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8MoRgMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8NPUAMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8NPUQMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_gAlZAAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAmAEAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAmAEQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAmAEgMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gAmAEwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gAmAFAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVGlYPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gAlZAQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gAmAFQMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAmAFwMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAmAGAMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAmAGQMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gAmAGgMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gAmAGwMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVGlYfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gAmAFgMtEeuCbfdqQWBQPQ" x="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gAmAHAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAmAHgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAmAHwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAmAIAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gAmAIQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gAmAIgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVHMcPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gAmAHQMtEeuCbfdqQWBQPQ" x="242"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVF-UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8MoRwMtEeuCbfdqQWBQPQ" x="5239"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8NPUgMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_1DXnkAMzEeuCbfdqQWBQPQ" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_1DXnkQMzEeuCbfdqQWBQPQ" key="value" value="preserve*"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8NPVAMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8NPVQMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_1DgKcAMzEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_1DgKcgMzEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_1DgKcwMzEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_1DgKdAMzEeuCbfdqQWBQPQ" type="7002">
+ <children xmi:type="notation:Node" xmi:id="_xdhs0AM0EeuCbfdqQWBQPQ" type="3002">
+ <element xmi:type="henshin:Attribute" href="unitTests.henshin#_xdhFwAM0EeuCbfdqQWBQPQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xdhs0QM0EeuCbfdqQWBQPQ"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_1DgKdQMzEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_1DgKdgMzEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_1DXAgAMzEeuCbfdqQWBQPQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1DgKcQMzEeuCbfdqQWBQPQ" x="36" y="63"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_9sahAAMzEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_9sahAgMzEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_9sahAwMzEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_9sahBAMzEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_9sahBQMzEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_9sahBgMzEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_9sR-IAMzEeuCbfdqQWBQPQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9sahAQMzEeuCbfdqQWBQPQ" x="251" y="171"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_cKWDEAM0EeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_cKWDEgM0EeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_cKWDEwM0EeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_cKWDFAM0EeuCbfdqQWBQPQ" type="7002">
+ <children xmi:type="notation:Node" xmi:id="_nPUzcAM0EeuCbfdqQWBQPQ" type="3002">
+ <element xmi:type="henshin:Attribute" href="unitTests.henshin#_nPMQkAM0EeuCbfdqQWBQPQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nPUzcQM0EeuCbfdqQWBQPQ"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_cKWDFQM0EeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_cKWDFgM0EeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_cKM5IAM0EeuCbfdqQWBQPQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cKWDEQM0EeuCbfdqQWBQPQ" x="212" y="56" width="124"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVKPwPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8NPUwMtEeuCbfdqQWBQPQ" x="5387" y="258" width="410" height="353"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8NPVgMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8NPWAMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8NPWQMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_gBD6IAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBEhMAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBEhMQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBEhMgMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gBEhMwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gBEhNAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVVO4fkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gBD6IQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gBEhNQMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBEhNwMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBEhOAMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBEhOQMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gBEhOgMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gBEhOwMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVVO4vkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gBEhNgMtEeuCbfdqQWBQPQ" x="160"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVUn0vkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8NPVwMtEeuCbfdqQWBQPQ" x="6334"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8NPWgMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8NPXAMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8NPXQMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_gBO5QAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBPgUAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBPgUQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBPgUgMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gBPgUwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gBPgVAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVXEFPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gBO5QQMtEeuCbfdqQWBQPQ" x="20" y="24"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gBPgVQMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBPgVwMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBPgWAMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBPgWQMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gBPgWgMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gBPgWwMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVXrIPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gBPgVgMtEeuCbfdqQWBQPQ" x="218"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gBPgXAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBPgXgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBPgXwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBPgYAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gBPgYQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gBPgYgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_sVXrIfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gBPgXQMtEeuCbfdqQWBQPQ" x="348"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVXEEPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8NPWwMtEeuCbfdqQWBQPQ" x="6751"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8N2YAMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8N2YgMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8N2YwMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8PEgAMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8PEhAMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8PrkAMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8PEgQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8PEggMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:LoopUnit" href="unitTests.henshin#_sVaucvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8PrkQMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8PrkgMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8PrlgMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8PrlwMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8PrkwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8PrlAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:LoopUnit" href="unitTests.henshin#_sVaucvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8PrmAMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gB8q8AMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gB8q8gMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVCT8_kLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gB8q8QMtEeuCbfdqQWBQPQ"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:LoopUnit" href="unitTests.henshin#_sVaucvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8N2YQMtEeuCbfdqQWBQPQ" x="7479"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8T9AAMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8UkEAMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8UkEQMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8UkEgMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8UkFgMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8UkFwMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8UkEwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8UkFAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVb8kPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8UkGAMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8UkGQMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8UkHQMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8UkHgMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8UkGgMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8UkGwMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVb8kPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8UkHwMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gCNJoAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gCNJogMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUjLwfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gCNJoQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gCNwtAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gCNwtgMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVF-UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gCNwtQMtEeuCbfdqQWBQPQ" x="27" y="87"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gCOXwAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gCOXwgMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_n4J7EJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gCOXwQMtEeuCbfdqQWBQPQ" x="22" y="174"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVb8kPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8T9AQMtEeuCbfdqQWBQPQ" x="7789"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8VyMAMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8VyMgMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8VyMwMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8VyNAMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8VyOAMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8VyOQMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8VyNQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8VyNgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVcjoPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8VyOgMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8VyOwMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8WZQAMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8WZQQMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8VyPAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8VyPQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVcjoPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8WZQgMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gCcaMAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gCcaMgMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVF-UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gCcaMQMtEeuCbfdqQWBQPQ" x="27"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gCdBRAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gCdBRgMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUjLwfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gCdBRQMtEeuCbfdqQWBQPQ" y="87"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gCdBSwMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gCdBTQMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVdxxPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gCdBTAMtEeuCbfdqQWBQPQ" x="18" y="174"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVcjoPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8VyMQMtEeuCbfdqQWBQPQ" x="8099"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8WZQwMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8WZRQMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8WZRgMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8WZRwMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8WZSwMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8WZTAMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8WZSAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8WZSQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVdxxPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8WZTQMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8WZTgMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8XAUAMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8XAUQMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8WZTwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8WZUAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVdxxPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8XAUgMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gCkWAAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gCkWAgMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVF-UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gCkWAQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVdxxPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8WZRAMtEeuCbfdqQWBQPQ" x="8409"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8XAUwMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8XAVQMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8XAVgMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8XAVwMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8XAWwMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8XAXAMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8XAWAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8XAWQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8XAXQMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8XAXgMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8XAYgMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8XAYwMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8XAXwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8XAYAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8XAZAMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8XAZQMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8XnYAMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8XnYQMtEeuCbfdqQWBQPQ" key="type" value="INDEPENDENT_CHOICE"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8XAZgMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8XAZwMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8XnYgMtEeuCbfdqQWBQPQ" x="50" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gConcAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gConcgMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUjLwfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gConcQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gCpOgAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gCpOggMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVF-UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gCpOgQMtEeuCbfdqQWBQPQ" x="181"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gCpOiwMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gCpOjQMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_n4J7EJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gCpOjAMtEeuCbfdqQWBQPQ" x="308"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8XAVAMtEeuCbfdqQWBQPQ" x="8719"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8YOgAMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8YOggMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8YOgwMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8Y1gAMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8Y1hAMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8Y1hQMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8Y1gQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8Y1ggMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVfm9PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8Y1hgMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8Y1hwMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8Y1iwMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8Y1jAMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8Y1iAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8Y1iQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVfm9PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8Y1jQMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVfm9PkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8YOgQMtEeuCbfdqQWBQPQ" x="9508"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8Y1kgMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8ZckQMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8ZckgMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8ZckwMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8ZclwMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8ZcmAMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8ZclAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8ZclQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVgOAPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8ZcmQMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8ZcmgMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8ZcngMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8ZcnwMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8ZcmwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8ZcnAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVgOAPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8ZcoAMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVgOAPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8ZckAMtEeuCbfdqQWBQPQ" x="9818"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8aDoAMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8aDogMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8aDowMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8aDpAMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8aDqAMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8aDqQMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8aDpQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8aDpgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVgOAfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8aDqgMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8aDqwMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8aDrwMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8aDsAMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8aDrAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8aDrQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVgOAfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8aDsQMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVgOAfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8aDoQMtEeuCbfdqQWBQPQ" x="10128"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8aDtgMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8aDuAMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8aDuQMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8aqsAMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8aqtAMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8aqtQMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8aqsQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8aqsgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVgOAvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8aqtgMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8aqtwMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8aquwMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8aqvAMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8aquAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8aquQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVgOAvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8aqvQMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gC8wgAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gC9XkAMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sUvZAPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gC8wgQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVgOAvkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8aDtwMtEeuCbfdqQWBQPQ" x="10438"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8aqvgMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8bRwAMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8bRwQMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8bRwgMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8bRxgMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8bRxwMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8bRwwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8bRxAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_RcgNYJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8bRyAMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8bRyQMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8bRzQMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8bRzgMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8bRygMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8bRywMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_RcgNYJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8bRzwMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDBB8AMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDBB8gMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_n4J7EJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDBB8QMtEeuCbfdqQWBQPQ"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_RcgNYJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8aqvwMtEeuCbfdqQWBQPQ" x="10794"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8bR1AMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8b40AMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8b40QMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_gDEFQAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDEFQgMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDEFQwMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDEFRAMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gDEFRQMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gDEFRgMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_cK3JUJMAEeedrNTWThGyHA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDEFQQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDEFRwMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDEFSQMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDEFSgMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDEFSwMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gDEFTAMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gDEFTQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_cYDQwJMAEeedrNTWThGyHA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDEFSAMtEeuCbfdqQWBQPQ" x="121"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_n4J7EJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8bR1QMtEeuCbfdqQWBQPQ" x="11118"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8b40gMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8b41AMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8b41QMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8b41gMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8b42gMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8b42wMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8b41wMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8b42AMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_YM-ZoJMPEeefGurO37nQTA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8b43AMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8b43QMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8b44QMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8b44gMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8b43gMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8b43wMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_YM-ZoJMPEeefGurO37nQTA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8b44wMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDNPMAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDNPMgMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_n4J7EJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDNPMQMtEeuCbfdqQWBQPQ" x="14"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDNPNwMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDNPOQMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVF-UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDNPOAMtEeuCbfdqQWBQPQ" x="19" y="87"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDN2QAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDN2QgMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_N5LiQCYSEeiTHaGclUiVMQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDN2QQMtEeuCbfdqQWBQPQ" y="174"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_YM-ZoJMPEeefGurO37nQTA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8b40wMtEeuCbfdqQWBQPQ" x="11428"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8b45AMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8cf4QMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8cf4gMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8cf4wMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8cf5wMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8cf6AMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8cf5AMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8cf5QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_bJ2jwCFUEei1C_mtIHo0kg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8cf6QMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8cf6gMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8cf7gMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8cf7wMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8cf6wMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8cf7AMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_bJ2jwCFUEei1C_mtIHo0kg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8cf8AMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDXAMAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDXnQAMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVF-UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDXAMQMtEeuCbfdqQWBQPQ" x="5"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDXnRQMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDXnRwMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_n4J7EJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDXnRgMtEeuCbfdqQWBQPQ" y="87"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_bJ2jwCFUEei1C_mtIHo0kg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8cf4AMtEeuCbfdqQWBQPQ" x="11804"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8cf8QMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8cf8wMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8cf9AMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8dG8AMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8dG9AMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8dG9QMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8dG8QMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8dG8gMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_WyITUCIJEeiK3Yr7wzMkUw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8dG9gMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8dG9wMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8dG-wMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8dG_AMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8dG-AMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8dG-QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_WyITUCIJEeiK3Yr7wzMkUw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8dG_QMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDdt4AMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDeU8AMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVF-UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDdt4QMtEeuCbfdqQWBQPQ" x="71"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDeU9QMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDeU9wMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_n4J7EJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDeU9gMtEeuCbfdqQWBQPQ" y="87"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_WyITUCIJEeiK3Yr7wzMkUw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8cf8gMtEeuCbfdqQWBQPQ" x="12117"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8dG_gMtEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8dHAAMtEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8dHAQMtEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_f8dHAgMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8dHBgMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8dHBwMtEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8dHAwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8dHBAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_ZY9ysCIJEeiK3Yr7wzMkUw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8dHCAMtEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_f8dHCQMtEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_f8duAAMtEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f8duAQMtEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_f8dHCgMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8dHCwMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_ZY9ysCIJEeiK3Yr7wzMkUw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f8duAgMtEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDlpsAMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDlpsgMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVF-UfkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDlpsQMtEeuCbfdqQWBQPQ" x="66"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDmQyQMtEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDmQywMtEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_n4J7EJL5EeelVqCQguqkhw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDmQygMtEeuCbfdqQWBQPQ" x="127" y="87"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_ZY9ysCIJEeiK3Yr7wzMkUw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8dG_wMtEeuCbfdqQWBQPQ" x="12427"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_f8duAwMtEeuCbfdqQWBQPQ" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8duBQMtEeuCbfdqQWBQPQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f8duBgMtEeuCbfdqQWBQPQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_gDs-cAMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDtlgAMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDtlgQMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDtlggMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gDtlgwMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gDtlhAMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_N5LiQiYSEeiTHaGclUiVMQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDs-cQMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDtlhQMtEeuCbfdqQWBQPQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDtlhwMtEeuCbfdqQWBQPQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDtliAMtEeuCbfdqQWBQPQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDtliQMtEeuCbfdqQWBQPQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gDtligMtEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gDtliwMtEeuCbfdqQWBQPQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="unitTests.henshin#_N5LiQyYSEeiTHaGclUiVMQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gDtlhgMtEeuCbfdqQWBQPQ" x="121"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_N5LiQCYSEeiTHaGclUiVMQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8duBAMtEeuCbfdqQWBQPQ" x="12737"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_qmec0AMxEeuCbfdqQWBQPQ" type="2002" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_qmec0gMxEeuCbfdqQWBQPQ" type="5004"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_qmec0wMxEeuCbfdqQWBQPQ" type="7003">
+ <children xmi:type="notation:Node" xmi:id="_qmec1AMxEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_qmec2AMxEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qmec2QMxEeuCbfdqQWBQPQ" key="type" value="UNIT_BEGIN"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_qmec1QMxEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_qmec1gMxEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_qmTdsAMxEeuCbfdqQWBQPQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qmec2gMxEeuCbfdqQWBQPQ" x="15" y="15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_qmec2wMxEeuCbfdqQWBQPQ" type="3004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_qmec3wMxEeuCbfdqQWBQPQ" source="symbol">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qmec4AMxEeuCbfdqQWBQPQ" key="type" value="UNIT_END"/>
+ </eAnnotations>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_qmec3AMxEeuCbfdqQWBQPQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_qmec3QMxEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_qmTdsAMxEeuCbfdqQWBQPQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qmec4QMxEeuCbfdqQWBQPQ" x="205" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_9tX1MAMxEeuCbfdqQWBQPQ" type="3003" fontName="Segoe UI" italic="true" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_9tX1MgMxEeuCbfdqQWBQPQ" type="5005"/>
+ <element xmi:type="henshin:Rule" href="unitTests.henshin#_sVKPwPkLEeG8L_O0_HQfRg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9tX1MQMxEeuCbfdqQWBQPQ" x="49" y="82"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_qmTdsAMxEeuCbfdqQWBQPQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qmec0QMxEeuCbfdqQWBQPQ" x="4956" y="345"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_T7HcAQMtEeuKm91C-HHeDg"/>
+ <element xmi:type="henshin:Module" href="unitTests.henshin#_sUjLwPkLEeG8L_O0_HQfRg"/>
+ <edges xmi:type="notation:Edge" xmi:id="_f8XnYwMtEeuCbfdqQWBQPQ" type="4002" source="_f8XAVwMtEeuCbfdqQWBQPQ" target="_f8XAZQMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_f8XnZAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8XnZQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f8XnZgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_f8Y1jgMtEeuCbfdqQWBQPQ" type="4002" source="_f8Y1gAMtEeuCbfdqQWBQPQ" target="_f8Y1hwMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_f8Y1jwMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8Y1kAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVfm9PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f8Y1kQMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_f8ZcoQMtEeuCbfdqQWBQPQ" type="4002" source="_f8ZckwMtEeuCbfdqQWBQPQ" target="_f8ZcmgMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_f8ZcogMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8ZcowMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVgOAPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f8ZcpAMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_f8aDsgMtEeuCbfdqQWBQPQ" type="4002" source="_f8aDpAMtEeuCbfdqQWBQPQ" target="_f8aDqwMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_f8aDswMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f8aDtAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVgOAfkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f8aDtQMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-Ih8AMtEeuCbfdqQWBQPQ" type="4001" source="_f9FZEAMtEeuCbfdqQWBQPQ" target="_f9FZFwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-JJAAMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-JJAQMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-JJAgMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-JJAwMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-Ih8QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUkZ4vkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-Ih8gMtEeuCbfdqQWBQPQ" points="[9, 21, 0, 11]$[0, -11, -9, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-JwEAMtEeuCbfdqQWBQPQ" type="4001" source="_f9Dj4AMtEeuCbfdqQWBQPQ" target="_f9EyAwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-JwEwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-JwFAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-JwFQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-JwFgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-JwEQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUlA8PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-JwEgMtEeuCbfdqQWBQPQ" points="[23, 21, 12, 11]$[-12, -11, -23, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-KXIAMtEeuCbfdqQWBQPQ" type="4001" source="_f9Dj4AMtEeuCbfdqQWBQPQ" target="_f9FZEAMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-K-MAMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-K-MQMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-K-MgMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-K-MwMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-KXIQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUlA8fkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-KXIgMtEeuCbfdqQWBQPQ" points="[16, 21, 1, 1]$[-1, -1, -16, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-LlQAMtEeuCbfdqQWBQPQ" type="4001" source="_f9Dj4AMtEeuCbfdqQWBQPQ" target="_f9FZFwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-LlQwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-LlRAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-LlRQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-LlRgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-LlQQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUlA8vkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-LlQgMtEeuCbfdqQWBQPQ" points="[17, 21, -7, -9]$[7, 9, -17, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-MMUAMtEeuCbfdqQWBQPQ" type="4001" source="_f9FZEAMtEeuCbfdqQWBQPQ" target="_f9EyAwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-MMUwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-MMVAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-MMVQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-MMVgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-MMUQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUlA8_kLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-MMUgMtEeuCbfdqQWBQPQ" points="[-4, -21, 0, -11]$[0, 11, 4, 21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-MzYAMtEeuCbfdqQWBQPQ" type="4001" source="_f9EyAwMtEeuCbfdqQWBQPQ" target="_f9FZEAMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-MzYwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-MzZAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-MzZQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-MzZgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-MzYQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUloAPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-MzYgMtEeuCbfdqQWBQPQ" points="[4, 21, 0, 11]$[0, -11, -4, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-qGYAMtEeuCbfdqQWBQPQ" type="4001" source="_f-dSEAMtEeuCbfdqQWBQPQ" target="_f-dSFwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-qGYwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-qGZAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-qGZQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-qGZgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-qGYQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUpSYvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-qGYgMtEeuCbfdqQWBQPQ" points="[21, 21, 11, 11]$[-11, -11, -21, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-qGZwMtEeuCbfdqQWBQPQ" type="4001" source="_f-dSEAMtEeuCbfdqQWBQPQ" target="_f-dSHgMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-qGagMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-qGawMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-qtcAMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-qtcQMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-qGaAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUp5cPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-qGaQMtEeuCbfdqQWBQPQ" points="[15, 21, 1, 1]$[-1, -1, -15, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-qtcgMtEeuCbfdqQWBQPQ" type="4001" source="_f-dSFwMtEeuCbfdqQWBQPQ" target="_f-dSHgMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-qtdQMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-qtdgMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-qtdwMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-qteAMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-qtcwMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUp5cfkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-qtdAMtEeuCbfdqQWBQPQ" points="[4, 21, 0, 11]$[0, -11, -4, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f-26sAMtEeuCbfdqQWBQPQ" type="4001" source="_f-r7kAMtEeuCbfdqQWBQPQ" target="_f-sipQMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-3hwAMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-3hwQMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f-3hwgMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f-3hwwMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f-26sQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUruovkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f-26sgMtEeuCbfdqQWBQPQ" points="[31, 10, -8, -3]$[-20, -8, -59, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f_E9IAMtEeuCbfdqQWBQPQ" type="4001" source="_f-4v4AMtEeuCbfdqQWBQPQ" target="_f-4v5wMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_FkMAMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_FkMQMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_FkMgMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_FkMwMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f_E9IQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUux8PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f_E9IgMtEeuCbfdqQWBQPQ" points="[31, 16, -10, -5]$[-20, -11, -61, -32]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f_Vb0AMtEeuCbfdqQWBQPQ" type="4001" source="_f_GyUAMtEeuCbfdqQWBQPQ" target="_f_GyVwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_WC4AMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_WC4QMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_WC4gMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_WC4wMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f_Vb0QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUxOMvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f_Vb0gMtEeuCbfdqQWBQPQ" points="[31, 8, -17, -5]$[-20, -6, -68, -19]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f_Wp8AMtEeuCbfdqQWBQPQ" type="4001" source="_f_GyUAMtEeuCbfdqQWBQPQ" target="_f_GyXgMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_Wp8wMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_Wp9AMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_Wp9QMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_Wp9gMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f_Wp8QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUwnIPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f_Wp8gMtEeuCbfdqQWBQPQ" points="[31, 12, -27, -11]$[-2, -1, -60, -24]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f_lTcAMtEeuCbfdqQWBQPQ" type="4001" source="_f_X4EAMtEeuCbfdqQWBQPQ" target="_f_YfJQMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_l6ggMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_l6gwMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_l6hAMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_l6hQMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f_l6gAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU0RgPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f_l6gQMtEeuCbfdqQWBQPQ" points="[31, 8, -17, -5]$[-20, -6, -68, -19]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f_l6hgMtEeuCbfdqQWBQPQ" type="4001" source="_f_X4EAMtEeuCbfdqQWBQPQ" target="_f_YfLAMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_mhkAMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_mhkQMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_mhkgMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_mhkwMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f_l6hwMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sUzDYfkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f_l6iAMtEeuCbfdqQWBQPQ" points="[31, 12, -27, -11]$[-2, -1, -60, -24]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f_yu0AMtEeuCbfdqQWBQPQ" type="4001" source="_f_oWxQMtEeuCbfdqQWBQPQ" target="_f_oWzAMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_yu0wMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_yu1AMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_yu1QMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_yu1gMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f_yu0QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU04k_kLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f_yu0gMtEeuCbfdqQWBQPQ" points="[5, 21, 0, 11]$[0, -11, -5, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f_yu1wMtEeuCbfdqQWBQPQ" type="4001" source="_f_nvsAMtEeuCbfdqQWBQPQ" target="_f_oWzAMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_zV4AMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_zV4QMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_f_zV4gMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f_zV4wMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f_yu2AMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU2GsvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f_yu2QMtEeuCbfdqQWBQPQ" points="[9, 21, 0, 1]$[0, -1, -9, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAAxQAMtEeuCbfdqQWBQPQ" type="4001" source="_f_0kAAMtEeuCbfdqQWBQPQ" target="_f_0kBwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAAxQwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAAxRAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAAxRQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAAxRgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAAxQQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU374fkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAAxQgMtEeuCbfdqQWBQPQ" points="[21, 21, 11, 11]$[-11, -11, -21, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gABYUAMtEeuCbfdqQWBQPQ" type="4001" source="_f_0kAAMtEeuCbfdqQWBQPQ" target="_f_0kDgMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gABYUwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gABYVAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gABYVQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gABYVgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gABYUQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU374vkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gABYUgMtEeuCbfdqQWBQPQ" points="[31, 11, -33, -12]$[-3, -1, -67, -24]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gABYVwMtEeuCbfdqQWBQPQ" type="4001" source="_f_0kBwMtEeuCbfdqQWBQPQ" target="_f_0kDgMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAB_YAMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAB_YQMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAB_YgMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAB_YwMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gABYWAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU4i8PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gABYWQMtEeuCbfdqQWBQPQ" points="[31, 7, -23, -6]$[-20, -6, -74, -19]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gATFIAMtEeuCbfdqQWBQPQ" type="4001" source="_gADNgAMtEeuCbfdqQWBQPQ" target="_gADNhwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gATFIwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gATFJAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gATFJQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gATFJgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gATFIQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU6YI_kLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gATFIgMtEeuCbfdqQWBQPQ" points="[50, 12, -3, -1]$[-40, -11, -93, -24]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gATsMAMtEeuCbfdqQWBQPQ" type="4001" source="_gADNgAMtEeuCbfdqQWBQPQ" target="_gADNjgMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gATsMwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gATsNAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gATsNQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gATsNgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gATsMQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU9bcPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gATsMgMtEeuCbfdqQWBQPQ" points="[50, 10, -57, -12]$[-5, -1, -112, -23]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gATsNwMtEeuCbfdqQWBQPQ" type="4001" source="_gADNhwMtEeuCbfdqQWBQPQ" target="_gADNjgMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gATsOgMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gATsOwMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gATsPAMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gATsPQMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gATsOAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU9bcfkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gATsOQMtEeuCbfdqQWBQPQ" points="[93, 9, 39, 0]$[-83, 0, -137, -9]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAUTQAMtEeuCbfdqQWBQPQ" type="4001" source="_gADNjgMtEeuCbfdqQWBQPQ" target="_gADNhwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAUTQwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAUTRAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAUTRQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAUTRgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAUTQQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sU9bcvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAUTQgMtEeuCbfdqQWBQPQ" points="[-137, -9, -83, 0]$[39, 0, 93, 9]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAUTRwMtEeuCbfdqQWBQPQ" type="4001" source="_gADNgAMtEeuCbfdqQWBQPQ" target="_gAD0kwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAUTSgMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAUTSwMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAU6UAMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAU6UQMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAUTSAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVAewfkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAUTSQMtEeuCbfdqQWBQPQ" points="[50, 14, -60, -18]$[30, 9, -80, -23]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAU6UgMtEeuCbfdqQWBQPQ" type="4001" source="_gADNhwMtEeuCbfdqQWBQPQ" target="_gAD0kwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAU6VQMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAU6VgMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAU6VwMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAU6WAMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAU6UwMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVAewvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAU6VAMtEeuCbfdqQWBQPQ" points="[74, 25, 17, 6]$[-14, -4, -71, -23]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAi8wAMtEeuCbfdqQWBQPQ" type="4001" source="_gAWIcAMtEeuCbfdqQWBQPQ" target="_gAWIdwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAjj0AMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAjj0QMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAjj0gMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAjj0wMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAi8wQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVDiEfkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAi8wgMtEeuCbfdqQWBQPQ" points="[-5, 21, 0, 11]$[0, -11, 5, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAjj1AMtEeuCbfdqQWBQPQ" type="4001" source="_gAWIcAMtEeuCbfdqQWBQPQ" target="_gAWIfgMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAjj1wMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAjj2AMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAjj2QMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAjj2gMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAjj1QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVEJIPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAjj1gMtEeuCbfdqQWBQPQ" points="[1, 21, 0, 1]$[0, -1, -1, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAkK4AMtEeuCbfdqQWBQPQ" type="4001" source="_gAWIdwMtEeuCbfdqQWBQPQ" target="_gAWIfgMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAkK4wMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAkK5AMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAkK5QMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAkK5gMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAkK4QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVEJIfkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAkK4gMtEeuCbfdqQWBQPQ" points="[6, 21, 0, 11]$[0, -11, -6, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAkK5wMtEeuCbfdqQWBQPQ" type="4001" source="_gAWIfgMtEeuCbfdqQWBQPQ" target="_gAWIdwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAkx8AMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAkx8QMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAkx8gMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAkx8wMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAkK6AMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVEwMPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAkK6QMtEeuCbfdqQWBQPQ" points="[-6, -21, 0, -11]$[0, 11, 6, 21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAw_MAMtEeuCbfdqQWBQPQ" type="4001" source="_gAlZAAMtEeuCbfdqQWBQPQ" target="_gAmAFQMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAw_MwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAw_NAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAw_NQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAw_NgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAw_MQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVHMcfkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAw_MgMtEeuCbfdqQWBQPQ" points="[21, 21, 11, 11]$[-11, -11, -21, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAxmQAMtEeuCbfdqQWBQPQ" type="4001" source="_gAlZAAMtEeuCbfdqQWBQPQ" target="_gAmAHAMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAxmQwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAxmRAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAxmRQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAxmRgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAxmQQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVHzgPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAxmQgMtEeuCbfdqQWBQPQ" points="[15, 21, 1, 1]$[-1, -1, -15, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gAyNUAMtEeuCbfdqQWBQPQ" type="4001" source="_gAmAFQMtEeuCbfdqQWBQPQ" target="_gAmAHAMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAyNUwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAyNVAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gAyNVQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gAyNVgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gAyNUQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVHzgfkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gAyNUgMtEeuCbfdqQWBQPQ" points="[4, 21, 0, 11]$[0, -11, -4, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gBNrIAMtEeuCbfdqQWBQPQ" type="4001" source="_gBD6IAMtEeuCbfdqQWBQPQ" target="_gBEhNQMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBNrIwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gBNrJAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBNrJQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gBNrJgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gBNrIQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVV18PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gBNrIgMtEeuCbfdqQWBQPQ" points="[50, 12, -3, -1]$[-40, -11, -93, -24]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gBf_AAMtEeuCbfdqQWBQPQ" type="4001" source="_gBPgVQMtEeuCbfdqQWBQPQ" target="_gBPgXAMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBf_AwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gBf_BAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gBf_BQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gBf_BgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gBf_AQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_sVXrIvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gBf_AgMtEeuCbfdqQWBQPQ" points="[35, 5, -94, -16]$[-25, -5, -154, -26]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gB8q8wMtEeuCbfdqQWBQPQ" type="4002" source="_f8PEgAMtEeuCbfdqQWBQPQ" target="_gB8q8AMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gB8q9AMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gB8q9QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:LoopUnit" href="unitTests.henshin#_sVaucvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gB8q9gMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gB9SAAMtEeuCbfdqQWBQPQ" type="4002" source="_gB8q8AMtEeuCbfdqQWBQPQ" target="_f8PrkgMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gB9SAQMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gB9SAgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:LoopUnit" href="unitTests.henshin#_sVaucvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gB9SAwMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gB9SBAMtEeuCbfdqQWBQPQ" type="4002" source="_gB8q8AMtEeuCbfdqQWBQPQ" target="_gB8q8AMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gB9SBQMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gB9SBgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:LoopUnit" href="unitTests.henshin#_sVaucvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gB9SBwMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCNwsAMtEeuCbfdqQWBQPQ" type="4002" source="_f8UkEgMtEeuCbfdqQWBQPQ" target="_gCNJoAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCNwsQMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCNwsgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVb8kPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCNwswMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCNwtwMtEeuCbfdqQWBQPQ" type="4002" source="_gCNJoAMtEeuCbfdqQWBQPQ" target="_gCNwtAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCNwuAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCNwuQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVb8kPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCNwugMtEeuCbfdqQWBQPQ" points="[0, 0, 0, -60]$[0, 60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gCZW4AMtEeuCbfdqQWBQPQ" id="(0.49586776859504134,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gCZW4QMtEeuCbfdqQWBQPQ" id="(0.4925373134328358,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCOXwwMtEeuCbfdqQWBQPQ" type="4002" source="_gCOXwAMtEeuCbfdqQWBQPQ" target="_f8UkGQMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCOXxAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCOXxQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVb8kPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCOXxgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCOXxwMtEeuCbfdqQWBQPQ" type="4002" source="_gCNwtAMtEeuCbfdqQWBQPQ" target="_gCOXwAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCOXyAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCOXyQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:PriorityUnit" href="unitTests.henshin#_sVb8kPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCOXygMtEeuCbfdqQWBQPQ" points="[0, 0, 0, -60]$[0, 60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gCYv0AMtEeuCbfdqQWBQPQ" id="(0.4925373134328358,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gCYv0QMtEeuCbfdqQWBQPQ" id="(0.4935064935064935,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCdBQAMtEeuCbfdqQWBQPQ" type="4002" source="_f8VyNAMtEeuCbfdqQWBQPQ" target="_gCcaMAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCdBQQMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCdBQgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVcjoPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCdBQwMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCdBRwMtEeuCbfdqQWBQPQ" type="4002" source="_gCcaMAMtEeuCbfdqQWBQPQ" target="_gCdBRAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCdBSAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCdBSQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVcjoPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCdBSgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, -60]$[0, 60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gCjH4AMtEeuCbfdqQWBQPQ" id="(0.4925373134328358,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gCjH4QMtEeuCbfdqQWBQPQ" id="(0.49586776859504134,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCdBTgMtEeuCbfdqQWBQPQ" type="4002" source="_gCdBSwMtEeuCbfdqQWBQPQ" target="_f8VyOwMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCdBTwMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCdBUAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVcjoPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCdBUQMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCdoUAMtEeuCbfdqQWBQPQ" type="4002" source="_gCdBRAMtEeuCbfdqQWBQPQ" target="_gCdBSwMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCdoUQMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCdoUgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVcjoPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCdoUwMtEeuCbfdqQWBQPQ" points="[0, 0, 0, -60]$[0, 60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gCjH4gMtEeuCbfdqQWBQPQ" id="(0.49586776859504134,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gCjH4wMtEeuCbfdqQWBQPQ" id="(0.49411764705882355,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCkWAwMtEeuCbfdqQWBQPQ" type="4002" source="_f8WZRwMtEeuCbfdqQWBQPQ" target="_gCkWAAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCkWBAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCkWBQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVdxxPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCkWBgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCkWBwMtEeuCbfdqQWBQPQ" type="4002" source="_gCkWAAMtEeuCbfdqQWBQPQ" target="_f8WZTgMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCkWCAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCkWCQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_sVdxxPkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCkWCgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gConcwMtEeuCbfdqQWBQPQ" type="4002" source="_f8XAZQMtEeuCbfdqQWBQPQ" target="_gConcAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCondAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCondQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCondgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCondwMtEeuCbfdqQWBQPQ" type="4002" source="_gConcAMtEeuCbfdqQWBQPQ" target="_f8XAXgMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gConeAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gConeQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gConegMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCpOgwMtEeuCbfdqQWBQPQ" type="4002" source="_f8XAZQMtEeuCbfdqQWBQPQ" target="_gCpOgAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCpOhAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCpOhQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCpOhgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCpOhwMtEeuCbfdqQWBQPQ" type="4002" source="_gCpOgAMtEeuCbfdqQWBQPQ" target="_f8XAXgMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCpOiAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCpOiQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCpOigMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCpOjgMtEeuCbfdqQWBQPQ" type="4002" source="_f8XAZQMtEeuCbfdqQWBQPQ" target="_gCpOiwMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCpOjwMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCpOkAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCpOkQMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gCpOkgMtEeuCbfdqQWBQPQ" type="4002" source="_gCpOiwMtEeuCbfdqQWBQPQ" target="_f8XAXgMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gCpOkwMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gCpOlAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVe_4PkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gCpOlQMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gC9XkQMtEeuCbfdqQWBQPQ" type="4002" source="_f8aqsAMtEeuCbfdqQWBQPQ" target="_gC8wgAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gC9XkgMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gC9XkwMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVgOAvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gC9XlAMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gC9XlQMtEeuCbfdqQWBQPQ" type="4002" source="_gC8wgAMtEeuCbfdqQWBQPQ" target="_f8aqtwMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gC9XlgMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gC9XlwMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IndependentUnit" href="unitTests.henshin#_sVgOAvkLEeG8L_O0_HQfRg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gC9XmAMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDBB8wMtEeuCbfdqQWBQPQ" type="4002" source="_f8bRwgMtEeuCbfdqQWBQPQ" target="_gDBB8AMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDBB9AMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDBB9QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_RcgNYJL5EeelVqCQguqkhw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDBB9gMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDBB9wMtEeuCbfdqQWBQPQ" type="4002" source="_gDBB8AMtEeuCbfdqQWBQPQ" target="_f8bRyQMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDBB-AMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDBB-QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_RcgNYJL5EeelVqCQguqkhw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDBB-gMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDBB-wMtEeuCbfdqQWBQPQ" type="4002" source="_gDBB8AMtEeuCbfdqQWBQPQ" target="_gDBB8AMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDBB_AMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDBB_QMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_RcgNYJL5EeelVqCQguqkhw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDBB_gMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gDLaAAMtEeuCbfdqQWBQPQ" type="4001" source="_gDEFQAMtEeuCbfdqQWBQPQ" target="_gDEFRwMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDLaAwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gDLaBAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gDMBEAMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gDMBEQMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDLaAQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_c0n4AJMAEeedrNTWThGyHA"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDLaAgMtEeuCbfdqQWBQPQ" points="[4, 21, 0, 11]$[0, -11, -4, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDNPMwMtEeuCbfdqQWBQPQ" type="4002" source="_f8b41gMtEeuCbfdqQWBQPQ" target="_gDNPMAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDNPNAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDNPNQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_YM-ZoJMPEeefGurO37nQTA"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDNPNgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDNPOgMtEeuCbfdqQWBQPQ" type="4002" source="_gDNPMAMtEeuCbfdqQWBQPQ" target="_gDNPNwMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDNPOwMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDNPPAMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_YM-ZoJMPEeefGurO37nQTA"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDNPPQMtEeuCbfdqQWBQPQ" points="[0, 0, 0, -60]$[0, 60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDTV0AMtEeuCbfdqQWBQPQ" id="(0.4935064935064935,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDTV0QMtEeuCbfdqQWBQPQ" id="(0.4925373134328358,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDN2QwMtEeuCbfdqQWBQPQ" type="4002" source="_gDN2QAMtEeuCbfdqQWBQPQ" target="_f8b43QMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDN2RAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDN2RQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_YM-ZoJMPEeefGurO37nQTA"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDN2RgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDN2RwMtEeuCbfdqQWBQPQ" type="4002" source="_gDNPNwMtEeuCbfdqQWBQPQ" target="_gDN2QAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDN2SAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDN2SQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:SequentialUnit" href="unitTests.henshin#_YM-ZoJMPEeefGurO37nQTA"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDN2SgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, -60]$[0, 60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDTV0gMtEeuCbfdqQWBQPQ" id="(0.4925373134328358,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDTV0wMtEeuCbfdqQWBQPQ" id="(0.49523809523809526,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDXnQQMtEeuCbfdqQWBQPQ" type="4002" source="_f8cf4wMtEeuCbfdqQWBQPQ" target="_gDXAMAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDXnQgMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDXnQwMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_bJ2jwCFUEei1C_mtIHo0kg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDXnRAMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDXnSAMtEeuCbfdqQWBQPQ" type="4002" source="_gDXAMAMtEeuCbfdqQWBQPQ" target="_gDXnRQMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDXnSQMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDXnSgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_bJ2jwCFUEei1C_mtIHo0kg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDXnSwMtEeuCbfdqQWBQPQ" points="[0, 0, 0, -60]$[0, 60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDdG0AMtEeuCbfdqQWBQPQ" id="(0.4925373134328358,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDdG0QMtEeuCbfdqQWBQPQ" id="(0.4935064935064935,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDXnTAMtEeuCbfdqQWBQPQ" type="4002" source="_gDXnRQMtEeuCbfdqQWBQPQ" target="_f8cf6gMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDXnTQMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDXnTgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_bJ2jwCFUEei1C_mtIHo0kg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDXnTwMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDeU8QMtEeuCbfdqQWBQPQ" type="4002" source="_f8dG8AMtEeuCbfdqQWBQPQ" target="_gDdt4AMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDeU8gMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDeU8wMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_WyITUCIJEeiK3Yr7wzMkUw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDeU9AMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDeU-AMtEeuCbfdqQWBQPQ" type="4002" source="_gDdt4AMtEeuCbfdqQWBQPQ" target="_gDeU9QMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDeU-QMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDeU-gMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_WyITUCIJEeiK3Yr7wzMkUw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDeU-wMtEeuCbfdqQWBQPQ" points="[0, 0, 55, -60]$[0, 30, 55, -30]$[-55, 30, 0, -30]$[-55, 60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDj0gAMtEeuCbfdqQWBQPQ" id="(0.3283582089552239,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDkbkAMtEeuCbfdqQWBQPQ" id="(0.4935064935064935,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDeU_AMtEeuCbfdqQWBQPQ" type="4002" source="_gDeU9QMtEeuCbfdqQWBQPQ" target="_f8dG9wMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDeU_QMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDeU_gMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_WyITUCIJEeiK3Yr7wzMkUw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDeU_wMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDlpswMtEeuCbfdqQWBQPQ" type="4002" source="_f8dHAgMtEeuCbfdqQWBQPQ" target="_gDlpsAMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDlptAMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDlptQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_ZY9ysCIJEeiK3Yr7wzMkUw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDlptgMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDmQzAMtEeuCbfdqQWBQPQ" type="4002" source="_gDlpsAMtEeuCbfdqQWBQPQ" target="_gDmQyQMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDmQzQMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDmQzgMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_ZY9ysCIJEeiK3Yr7wzMkUw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDmQzwMtEeuCbfdqQWBQPQ" points="[0, 0, -55, -60]$[0, 30, -55, -30]$[55, 30, 0, -30]$[55, 60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDsXYgMtEeuCbfdqQWBQPQ" id="(0.6567164179104478,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDsXYwMtEeuCbfdqQWBQPQ" id="(0.4935064935064935,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_gDm30AMtEeuCbfdqQWBQPQ" type="4002" source="_gDmQyQMtEeuCbfdqQWBQPQ" target="_f8dHCQMtEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_gDm30QMtEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gDm30gMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:ConditionalUnit" href="unitTests.henshin#_ZY9ysCIJEeiK3Yr7wzMkUw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gDm30wMtEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gD06QAMtEeuCbfdqQWBQPQ" type="4001" source="_gDs-cAMtEeuCbfdqQWBQPQ" target="_gDtlhQMtEeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gD06QwMtEeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gD06RAMtEeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gD06RQMtEeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gD06RgMtEeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_gD06QQMtEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_N5LiRCYSEeiTHaGclUiVMQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gD06QgMtEeuCbfdqQWBQPQ" points="[4, 21, 0, 11]$[0, -11, -4, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_9tYcQAMxEeuCbfdqQWBQPQ" type="4002" source="_qmec1AMxEeuCbfdqQWBQPQ" target="_9tX1MAMxEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_9tYcQQMxEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_9tYcQgMxEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_qmTdsAMxEeuCbfdqQWBQPQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9tYcQwMxEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_9tYcRAMxEeuCbfdqQWBQPQ" type="4002" source="_9tX1MAMxEeuCbfdqQWBQPQ" target="_qmec2wMxEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_9tYcRQMxEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_9tYcRgMxEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_qmTdsAMxEeuCbfdqQWBQPQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9tYcRwMxEeuCbfdqQWBQPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_9tYcSAMxEeuCbfdqQWBQPQ" type="4002" source="_9tX1MAMxEeuCbfdqQWBQPQ" target="_9tX1MAMxEeuCbfdqQWBQPQ">
+ <styles xmi:type="notation:RoutingStyle" xmi:id="_9tYcSQMxEeuCbfdqQWBQPQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_9tYcSgMxEeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:IteratedUnit" href="unitTests.henshin#_qmTdsAMxEeuCbfdqQWBQPQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9tYcSwMxEeuCbfdqQWBQPQ" points="[93, 14, 93, 14]$[93, 58, 93, 58]$[58, 58, 58, 58]$[58, 14, 58, 14]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_ffZTUAM0EeuCbfdqQWBQPQ" type="4001" source="_9sahAAMzEeuCbfdqQWBQPQ" target="_cKWDEAM0EeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ffZTUwM0EeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ffZTVAM0EeuCbfdqQWBQPQ" x="13" y="58"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_ffZTVQM0EeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ffZTVgM0EeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ffZTUQM0EeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_ffYFMAM0EeuCbfdqQWBQPQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ffZTUgM0EeuCbfdqQWBQPQ" points="[-7, -26, 4, 138]$[-7, -193, 4, -29]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lIZjMAM0EeuCbfdqQWBQPQ" type="4001" source="_1DgKcAMzEeuCbfdqQWBQPQ" target="_cKWDEAM0EeuCbfdqQWBQPQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lIZjMwM0EeuCbfdqQWBQPQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lIZjNAM0EeuCbfdqQWBQPQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lIZjNQM0EeuCbfdqQWBQPQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lIZjNgM0EeuCbfdqQWBQPQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lIZjMQM0EeuCbfdqQWBQPQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="unitTests.henshin#_lIY8IAM0EeuCbfdqQWBQPQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lIZjMgM0EeuCbfdqQWBQPQ" points="[40, -3, -190, 17]$[230, -35, 0, -15]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lIaKQAM0EeuCbfdqQWBQPQ" id="(0.3225806451612903,0.2222222222222222)"/>
+ </edges>
+</notation:Diagram>
diff --git a/plugins/org.eclipse.emf.henshin.tests/model/testmodel.ecore b/plugins/org.eclipse.emf.henshin.tests/model/testmodel.ecore
index caf7b23..1d94cfd 100644
--- a/plugins/org.eclipse.emf.henshin.tests/model/testmodel.ecore
+++ b/plugins/org.eclipse.emf.henshin.tests/model/testmodel.ecore
@@ -23,4 +23,15 @@
<eStructuralFeatures xsi:type="ecore:EAttribute" name="intlist" upperBound="-1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
</eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SpecialVal" eSuperTypes="#//Val">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="derivedvl" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+ transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="unsetablevl" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+ defaultValueLiteral="42" unsettable="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="unchangeablevl" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+ changeable="false" defaultValueLiteral="42"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="unsetableunchangeablevl"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt" changeable="false"
+ defaultValueLiteral="42" unsettable="true"/>
+ </eClassifiers>
</ecore:EPackage>
diff --git a/plugins/org.eclipse.emf.henshin.tests/model/testmodel.genmodel b/plugins/org.eclipse.emf.henshin.tests/model/testmodel.genmodel
index 6639059..eda4bdb 100644
--- a/plugins/org.eclipse.emf.henshin.tests/model/testmodel.genmodel
+++ b/plugins/org.eclipse.emf.henshin.tests/model/testmodel.genmodel
@@ -21,5 +21,11 @@
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute testmodel.ecore#//Val/valname"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute testmodel.ecore#//Val/intlist"/>
</genClasses>
+ <genClasses ecoreClass="testmodel.ecore#//SpecialVal">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute testmodel.ecore#//SpecialVal/derivedvl"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute testmodel.ecore#//SpecialVal/unsetablevl"/>
+ <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute testmodel.ecore#//SpecialVal/unchangeablevl"/>
+ <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute testmodel.ecore#//SpecialVal/unsetableunchangeablevl"/>
+ </genClasses>
</genPackages>
</genmodel:GenModel>
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/basic/AttributeRestrictionsTest.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/basic/AttributeRestrictionsTest.java
new file mode 100644
index 0000000..4f94c71
--- /dev/null
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/basic/AttributeRestrictionsTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.emf.henshin.tests.basic;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.emf.henshin.tests.framework.HenshinTest;
+import org.eclipse.emf.henshin.tests.testmodel.SpecialVal;
+import org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage;
+import org.eclipse.emf.henshin.tests.testmodel.Val;
+import org.eclipse.emf.henshin.tests.testmodel.cont;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AttributeRestrictionsTest extends HenshinTest {
+
+ @Before
+ public void setUp() {
+ TestmodelPackage.eINSTANCE.eClass();
+ init("basic/rules/basicTests.henshin");
+ setEGraphPath("basic/models/attributeTestsModels/", "testmodel");
+ loadEGraph("restrictedAttributes");
+ }
+
+ @Test
+ public void testSetStandardAttribute() {
+ loadRule("setStandardAttributeValue");
+ htRuleApp.execute(null);
+ cont root = (cont)htEGraph.getRoots().get(0);
+ Val val = root.getContainsVal().get(0);
+ assertEquals(99,val.getIntvl());
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void testSetDerivedAttribute() {
+ loadRule("setDerivedAttributeValue");
+ htRuleApp.execute(null);
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void testSetUnchangeableAttribute() {
+ loadRule("setUnchangeableAttributeValue");
+ htRuleApp.execute(null);
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void testUnsetStandardAttribute() {
+ loadRule("unsetStandardAttribute");
+ htRuleApp.execute(null);
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void testUnsetUnsetableUnchangeableAttribute() {
+ loadRule("unsetUnsetableUnchangeableAttribute");
+ htRuleApp.execute(null);
+ }
+
+ @Test
+ public void testUnsetUnsetableAttribute() {
+ loadRule("unsetUnsetableAttribute");
+ htRuleApp.execute(null);
+ cont root = (cont)htEGraph.getRoots().get(0);
+ SpecialVal val = (SpecialVal) root.getContainsVal().get(0);
+ assertEquals(42, val.getUnsetablevl());
+ }
+}
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/basic/UnitTest.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/basic/UnitTest.java
index 29d7b7f..55ad93a 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/basic/UnitTest.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/basic/UnitTest.java
@@ -45,7 +45,7 @@
@Test
public void testAmalgamationUnitAttributeInKernelRuleNac() {
loadEGraph("graphBefore_amu_attributeInKernelNac");
- loadUnit("loop_amu_attributeInKernelNac");
+ loadUnit("iter_amu_attributeInKernelNac");
Units.assertUnitCanBeExecuted(htUnitApp);
}
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java
index f73f2ba..bc5c2db 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java
@@ -17,6 +17,7 @@
import java.util.Map.Entry;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.henshin.interpreter.EGraph;
@@ -120,18 +121,21 @@
* @param henshinFile Henshin file to be loaded.
*/
protected void init(String henshinFile) {
- if (resourceSet == null)
+ if (resourceSet == null) {
resourceSet = new HenshinResourceSet();
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*",
+ new XMIResourceFactoryImpl());
+ }
htModule = (Module) HenshinLoaders.loadHenshin(henshinFile, resourceSet);
htEngine = InterpreterFactory.INSTANCE.createEngine();
}
- protected void initFactory(String extension, XMIResourceFactoryImpl xmiResourceFactoryImpl) {
+ protected void initFactory(String extension, Resource.Factory factoryImpl) {
if (resourceSet == null)
resourceSet = new HenshinResourceSet();
- resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(extension, xmiResourceFactoryImpl);
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(extension, factoryImpl);
}
/**
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java
index ddae9de..85be714 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java
@@ -148,7 +148,7 @@
*/
public Node getParentNode() {
if (parentNode != null && parentNode.eIsProxy()) {
- InternalEObject oldParentNode = (InternalEObject)parentNode;
+ InternalEObject oldParentNode = parentNode;
parentNode = (Node)eResolveProxy(oldParentNode);
if (parentNode != oldParentNode) {
if (eNotificationRequired())
@@ -186,7 +186,7 @@
* Sets the value of the '{@link org.eclipse.emf.henshin.tests.testmodel.Node#getParentNode <em>Parent Node</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
- * @param value the new value of the '<em>Parent Node</em>' reference.
+ * @param newParentNode the new value of the '<em>Parent Node</em>' reference.
* @see #getParentNode()
* @generated
*/
@@ -194,9 +194,9 @@
if (newParentNode != parentNode) {
NotificationChain msgs = null;
if (parentNode != null)
- msgs = ((InternalEObject)parentNode).eInverseRemove(this, TestmodelPackage.NODE__CHILD_NODES, Node.class, msgs);
+ msgs = parentNode.eInverseRemove(this, TestmodelPackage.NODE__CHILD_NODES, Node.class, msgs);
if (newParentNode != null)
- msgs = ((InternalEObject)newParentNode).eInverseAdd(this, TestmodelPackage.NODE__CHILD_NODES, Node.class, msgs);
+ msgs = newParentNode.eInverseAdd(this, TestmodelPackage.NODE__CHILD_NODES, Node.class, msgs);
msgs = basicSetParentNode(newParentNode, msgs);
if (msgs != null) msgs.dispatch();
}
@@ -249,7 +249,7 @@
* Sets the value of the '{@link org.eclipse.emf.henshin.tests.testmodel.Node#getNodename <em>Nodename</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
- * @param value the new value of the '<em>Nodename</em>' attribute.
+ * @param newNodename the new value of the '<em>Nodename</em>' attribute.
* @see #getNodename()
* @generated
*/
@@ -271,7 +271,7 @@
switch (featureID) {
case TestmodelPackage.NODE__PARENT_NODE:
if (parentNode != null)
- msgs = ((InternalEObject)parentNode).eInverseRemove(this, TestmodelPackage.NODE__CHILD_NODES, Node.class, msgs);
+ msgs = parentNode.eInverseRemove(this, TestmodelPackage.NODE__CHILD_NODES, Node.class, msgs);
return basicSetParentNode((Node)otherEnd, msgs);
case TestmodelPackage.NODE__CHILD_NODES:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildNodes()).basicAdd(otherEnd, msgs);
@@ -396,7 +396,7 @@
public String toString() {
if (eIsProxy()) return super.toString();
- StringBuffer result = new StringBuffer(super.toString());
+ StringBuilder result = new StringBuilder(super.toString());
result.append(" (nodename: ");
result.append(nodename);
result.append(')');
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/SpecialVal.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/SpecialVal.java
new file mode 100644
index 0000000..7f0eff5
--- /dev/null
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/SpecialVal.java
@@ -0,0 +1,384 @@
+/**
+ */
+package org.eclipse.emf.henshin.tests.testmodel;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Special Val</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getDerivedvl <em>Derivedvl</em>}</li>
+ * <li>{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetablevl <em>Unsetablevl</em>}</li>
+ * <li>{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnchangeablevl <em>Unchangeablevl</em>}</li>
+ * <li>{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetableunchangeablevl <em>Unsetableunchangeablevl</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getSpecialVal()
+ * @model kind="class"
+ * @generated
+ */
+public class SpecialVal extends Val {
+ /**
+ * The default value of the '{@link #getDerivedvl() <em>Derivedvl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDerivedvl()
+ * @generated
+ * @ordered
+ */
+ protected static final int DERIVEDVL_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getDerivedvl() <em>Derivedvl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDerivedvl()
+ * @generated
+ * @ordered
+ */
+ protected int derivedvl = DERIVEDVL_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getUnsetablevl() <em>Unsetablevl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getUnsetablevl()
+ * @generated
+ * @ordered
+ */
+ protected static final int UNSETABLEVL_EDEFAULT = 42;
+
+ /**
+ * The cached value of the '{@link #getUnsetablevl() <em>Unsetablevl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getUnsetablevl()
+ * @generated
+ * @ordered
+ */
+ protected int unsetablevl = UNSETABLEVL_EDEFAULT;
+
+ /**
+ * This is true if the Unsetablevl attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected boolean unsetablevlESet;
+
+ /**
+ * The default value of the '{@link #getUnchangeablevl() <em>Unchangeablevl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getUnchangeablevl()
+ * @generated
+ * @ordered
+ */
+ protected static final int UNCHANGEABLEVL_EDEFAULT = 42;
+
+ /**
+ * The cached value of the '{@link #getUnchangeablevl() <em>Unchangeablevl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getUnchangeablevl()
+ * @generated
+ * @ordered
+ */
+ protected int unchangeablevl = UNCHANGEABLEVL_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getUnsetableunchangeablevl() <em>Unsetableunchangeablevl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getUnsetableunchangeablevl()
+ * @generated
+ * @ordered
+ */
+ protected static final int UNSETABLEUNCHANGEABLEVL_EDEFAULT = 42;
+
+ /**
+ * The cached value of the '{@link #getUnsetableunchangeablevl() <em>Unsetableunchangeablevl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getUnsetableunchangeablevl()
+ * @generated
+ * @ordered
+ */
+ protected int unsetableunchangeablevl = UNSETABLEUNCHANGEABLEVL_EDEFAULT;
+
+ /**
+ * This is true if the Unsetableunchangeablevl attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected boolean unsetableunchangeablevlESet;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected SpecialVal() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return TestmodelPackage.Literals.SPECIAL_VAL;
+ }
+
+ /**
+ * Returns the value of the '<em><b>Derivedvl</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Derivedvl</em>' attribute.
+ * @see #setDerivedvl(int)
+ * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getSpecialVal_Derivedvl()
+ * @model transient="true" derived="true"
+ * @generated
+ */
+ public int getDerivedvl() {
+ return derivedvl;
+ }
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getDerivedvl <em>Derivedvl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param newDerivedvl the new value of the '<em>Derivedvl</em>' attribute.
+ * @see #getDerivedvl()
+ * @generated
+ */
+ public void setDerivedvl(int newDerivedvl) {
+ int oldDerivedvl = derivedvl;
+ derivedvl = newDerivedvl;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, TestmodelPackage.SPECIAL_VAL__DERIVEDVL, oldDerivedvl, derivedvl));
+ }
+
+ /**
+ * Returns the value of the '<em><b>Unchangeablevl</b></em>' attribute.
+ * The default value is <code>"42"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Unchangeablevl</em>' attribute.
+ * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getSpecialVal_Unchangeablevl()
+ * @model default="42" changeable="false"
+ * @generated
+ */
+ public int getUnchangeablevl() {
+ return unchangeablevl;
+ }
+
+ /**
+ * Returns the value of the '<em><b>Unsetableunchangeablevl</b></em>' attribute.
+ * The default value is <code>"42"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Unsetableunchangeablevl</em>' attribute.
+ * @see #isSetUnsetableunchangeablevl()
+ * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getSpecialVal_Unsetableunchangeablevl()
+ * @model default="42" unsettable="true" changeable="false"
+ * @generated
+ */
+ public int getUnsetableunchangeablevl() {
+ return unsetableunchangeablevl;
+ }
+
+ /**
+ * Returns whether the value of the '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetableunchangeablevl <em>Unsetableunchangeablevl</em>}' attribute is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return whether the value of the '<em>Unsetableunchangeablevl</em>' attribute is set.
+ * @see #getUnsetableunchangeablevl()
+ * @generated
+ */
+ public boolean isSetUnsetableunchangeablevl() {
+ return unsetableunchangeablevlESet;
+ }
+
+ /**
+ * Returns the value of the '<em><b>Unsetablevl</b></em>' attribute.
+ * The default value is <code>"42"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Unsetablevl</em>' attribute.
+ * @see #isSetUnsetablevl()
+ * @see #unsetUnsetablevl()
+ * @see #setUnsetablevl(int)
+ * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getSpecialVal_Unsetablevl()
+ * @model default="42" unsettable="true"
+ * @generated
+ */
+ public int getUnsetablevl() {
+ return unsetablevl;
+ }
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetablevl <em>Unsetablevl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param newUnsetablevl the new value of the '<em>Unsetablevl</em>' attribute.
+ * @see #isSetUnsetablevl()
+ * @see #unsetUnsetablevl()
+ * @see #getUnsetablevl()
+ * @generated
+ */
+ public void setUnsetablevl(int newUnsetablevl) {
+ int oldUnsetablevl = unsetablevl;
+ unsetablevl = newUnsetablevl;
+ boolean oldUnsetablevlESet = unsetablevlESet;
+ unsetablevlESet = true;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, TestmodelPackage.SPECIAL_VAL__UNSETABLEVL, oldUnsetablevl, unsetablevl, !oldUnsetablevlESet));
+ }
+
+ /**
+ * Unsets the value of the '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetablevl <em>Unsetablevl</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isSetUnsetablevl()
+ * @see #getUnsetablevl()
+ * @see #setUnsetablevl(int)
+ * @generated
+ */
+ public void unsetUnsetablevl() {
+ int oldUnsetablevl = unsetablevl;
+ boolean oldUnsetablevlESet = unsetablevlESet;
+ unsetablevl = UNSETABLEVL_EDEFAULT;
+ unsetablevlESet = false;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.UNSET, TestmodelPackage.SPECIAL_VAL__UNSETABLEVL, oldUnsetablevl, UNSETABLEVL_EDEFAULT, oldUnsetablevlESet));
+ }
+
+ /**
+ * Returns whether the value of the '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetablevl <em>Unsetablevl</em>}' attribute is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return whether the value of the '<em>Unsetablevl</em>' attribute is set.
+ * @see #unsetUnsetablevl()
+ * @see #getUnsetablevl()
+ * @see #setUnsetablevl(int)
+ * @generated
+ */
+ public boolean isSetUnsetablevl() {
+ return unsetablevlESet;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case TestmodelPackage.SPECIAL_VAL__DERIVEDVL:
+ return getDerivedvl();
+ case TestmodelPackage.SPECIAL_VAL__UNSETABLEVL:
+ return getUnsetablevl();
+ case TestmodelPackage.SPECIAL_VAL__UNCHANGEABLEVL:
+ return getUnchangeablevl();
+ case TestmodelPackage.SPECIAL_VAL__UNSETABLEUNCHANGEABLEVL:
+ return getUnsetableunchangeablevl();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case TestmodelPackage.SPECIAL_VAL__DERIVEDVL:
+ setDerivedvl((Integer)newValue);
+ return;
+ case TestmodelPackage.SPECIAL_VAL__UNSETABLEVL:
+ setUnsetablevl((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case TestmodelPackage.SPECIAL_VAL__DERIVEDVL:
+ setDerivedvl(DERIVEDVL_EDEFAULT);
+ return;
+ case TestmodelPackage.SPECIAL_VAL__UNSETABLEVL:
+ unsetUnsetablevl();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case TestmodelPackage.SPECIAL_VAL__DERIVEDVL:
+ return derivedvl != DERIVEDVL_EDEFAULT;
+ case TestmodelPackage.SPECIAL_VAL__UNSETABLEVL:
+ return isSetUnsetablevl();
+ case TestmodelPackage.SPECIAL_VAL__UNCHANGEABLEVL:
+ return unchangeablevl != UNCHANGEABLEVL_EDEFAULT;
+ case TestmodelPackage.SPECIAL_VAL__UNSETABLEUNCHANGEABLEVL:
+ return isSetUnsetableunchangeablevl();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (derivedvl: ");
+ result.append(derivedvl);
+ result.append(", unsetablevl: ");
+ if (unsetablevlESet) result.append(unsetablevl); else result.append("<unset>");
+ result.append(", unchangeablevl: ");
+ result.append(unchangeablevl);
+ result.append(", unsetableunchangeablevl: ");
+ if (unsetableunchangeablevlESet) result.append(unsetableunchangeablevl); else result.append("<unset>");
+ result.append(')');
+ return result.toString();
+ }
+
+} // SpecialVal
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelAdapterFactory.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelAdapterFactory.java
index 3fa12ba..458aa1c 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelAdapterFactory.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelAdapterFactory.java
@@ -78,6 +78,10 @@
return createValAdapter();
}
@Override
+ public Adapter caseSpecialVal(SpecialVal object) {
+ return createSpecialValAdapter();
+ }
+ @Override
public Adapter defaultCase(EObject object) {
return createEObjectAdapter();
}
@@ -140,6 +144,20 @@
}
/**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal <em>Special Val</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.emf.henshin.tests.testmodel.SpecialVal
+ * @generated
+ */
+ public Adapter createSpecialValAdapter() {
+ return null;
+ }
+
+ /**
* Creates a new adapter for the default case.
* <!-- begin-user-doc -->
* This default implementation returns null.
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelFactory.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelFactory.java
index aa9df2c..692124e 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelFactory.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelFactory.java
@@ -67,6 +67,7 @@
case TestmodelPackage.CONT: return createcont();
case TestmodelPackage.NODE: return createNode();
case TestmodelPackage.VAL: return createVal();
+ case TestmodelPackage.SPECIAL_VAL: return createSpecialVal();
default:
throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
}
@@ -107,6 +108,16 @@
* <!-- end-user-doc -->
* @generated
*/
+ public SpecialVal createSpecialVal() {
+ SpecialVal specialVal = new SpecialVal();
+ return specialVal;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
public TestmodelPackage getTestmodelPackage() {
return (TestmodelPackage)getEPackage();
}
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelPackage.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelPackage.java
index 555db5e..9bf3444 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelPackage.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelPackage.java
@@ -196,6 +196,88 @@
public static final int VAL_FEATURE_COUNT = 3;
/**
+ * The meta object id for the '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal <em>Special Val</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.henshin.tests.testmodel.SpecialVal
+ * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getSpecialVal()
+ * @generated
+ */
+ public static final int SPECIAL_VAL = 3;
+
+ /**
+ * The feature id for the '<em><b>Intvl</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int SPECIAL_VAL__INTVL = VAL__INTVL;
+
+ /**
+ * The feature id for the '<em><b>Valname</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int SPECIAL_VAL__VALNAME = VAL__VALNAME;
+
+ /**
+ * The feature id for the '<em><b>Intlist</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int SPECIAL_VAL__INTLIST = VAL__INTLIST;
+
+ /**
+ * The feature id for the '<em><b>Derivedvl</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int SPECIAL_VAL__DERIVEDVL = VAL_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Unsetablevl</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int SPECIAL_VAL__UNSETABLEVL = VAL_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Unchangeablevl</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int SPECIAL_VAL__UNCHANGEABLEVL = VAL_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Unsetableunchangeablevl</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int SPECIAL_VAL__UNSETABLEUNCHANGEABLEVL = VAL_FEATURE_COUNT + 3;
+
+ /**
+ * The number of structural features of the '<em>Special Val</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int SPECIAL_VAL_FEATURE_COUNT = VAL_FEATURE_COUNT + 4;
+
+ /**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
@@ -217,6 +299,13 @@
private EClass valEClass = null;
/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass specialValEClass = null;
+
+ /**
* Creates an instance of the model <b>Package</b>, registered with
* {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
* package URI value.
@@ -244,7 +333,7 @@
/**
* Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
- *
+ *
* <p>This method is used to initialize {@link TestmodelPackage#eINSTANCE} when that field is accessed.
* Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
* <!-- begin-user-doc -->
@@ -258,7 +347,8 @@
if (isInited) return (TestmodelPackage)EPackage.Registry.INSTANCE.getEPackage(TestmodelPackage.eNS_URI);
// Obtain or create and register package
- TestmodelPackage theTestmodelPackage = (TestmodelPackage)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof TestmodelPackage ? EPackage.Registry.INSTANCE.get(eNS_URI) : new TestmodelPackage());
+ Object registeredTestmodelPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+ TestmodelPackage theTestmodelPackage = registeredTestmodelPackage instanceof TestmodelPackage ? (TestmodelPackage)registeredTestmodelPackage : new TestmodelPackage();
isInited = true;
@@ -271,7 +361,6 @@
// Mark meta-data to indicate it can't be changed
theTestmodelPackage.freeze();
-
// Update the registry and return the package
EPackage.Registry.INSTANCE.put(TestmodelPackage.eNS_URI, theTestmodelPackage);
return theTestmodelPackage;
@@ -432,6 +521,75 @@
}
/**
+ * Returns the meta object for class '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal <em>Special Val</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Special Val</em>'.
+ * @see org.eclipse.emf.henshin.tests.testmodel.SpecialVal
+ * @generated
+ */
+ public EClass getSpecialVal() {
+ return specialValEClass;
+ }
+
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getDerivedvl <em>Derivedvl</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Derivedvl</em>'.
+ * @see org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getDerivedvl()
+ * @see #getSpecialVal()
+ * @generated
+ */
+ public EAttribute getSpecialVal_Derivedvl() {
+ return (EAttribute)specialValEClass.getEStructuralFeatures().get(0);
+ }
+
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnchangeablevl <em>Unchangeablevl</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Unchangeablevl</em>'.
+ * @see org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnchangeablevl()
+ * @see #getSpecialVal()
+ * @generated
+ */
+ public EAttribute getSpecialVal_Unchangeablevl() {
+ return (EAttribute)specialValEClass.getEStructuralFeatures().get(2);
+ }
+
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetableunchangeablevl <em>Unsetableunchangeablevl</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Unsetableunchangeablevl</em>'.
+ * @see org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetableunchangeablevl()
+ * @see #getSpecialVal()
+ * @generated
+ */
+ public EAttribute getSpecialVal_Unsetableunchangeablevl() {
+ return (EAttribute)specialValEClass.getEStructuralFeatures().get(3);
+ }
+
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetablevl <em>Unsetablevl</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Unsetablevl</em>'.
+ * @see org.eclipse.emf.henshin.tests.testmodel.SpecialVal#getUnsetablevl()
+ * @see #getSpecialVal()
+ * @generated
+ */
+ public EAttribute getSpecialVal_Unsetablevl() {
+ return (EAttribute)specialValEClass.getEStructuralFeatures().get(1);
+ }
+
+
+ /**
* Returns the factory that creates the instances of the model.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -475,6 +633,12 @@
createEAttribute(valEClass, VAL__INTVL);
createEAttribute(valEClass, VAL__VALNAME);
createEAttribute(valEClass, VAL__INTLIST);
+
+ specialValEClass = createEClass(SPECIAL_VAL);
+ createEAttribute(specialValEClass, SPECIAL_VAL__DERIVEDVL);
+ createEAttribute(specialValEClass, SPECIAL_VAL__UNSETABLEVL);
+ createEAttribute(specialValEClass, SPECIAL_VAL__UNCHANGEABLEVL);
+ createEAttribute(specialValEClass, SPECIAL_VAL__UNSETABLEUNCHANGEABLEVL);
}
/**
@@ -505,6 +669,7 @@
// Set bounds for type parameters
// Add supertypes to classes
+ specialValEClass.getESuperTypes().add(this.getVal());
// Initialize classes and features; add operations and parameters
initEClass(contEClass, cont.class, "cont", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -522,6 +687,12 @@
initEAttribute(getVal_Valname(), ecorePackage.getEString(), "valname", null, 0, 1, Val.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getVal_Intlist(), ecorePackage.getEInt(), "intlist", null, 0, -1, Val.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEClass(specialValEClass, SpecialVal.class, "SpecialVal", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getSpecialVal_Derivedvl(), ecorePackage.getEInt(), "derivedvl", null, 0, 1, SpecialVal.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEAttribute(getSpecialVal_Unsetablevl(), ecorePackage.getEInt(), "unsetablevl", "42", 0, 1, SpecialVal.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getSpecialVal_Unchangeablevl(), ecorePackage.getEInt(), "unchangeablevl", "42", 0, 1, SpecialVal.class, !IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getSpecialVal_Unsetableunchangeablevl(), ecorePackage.getEInt(), "unsetableunchangeablevl", "42", 0, 1, SpecialVal.class, !IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
// Create resource
createResource(eNS_URI);
}
@@ -641,6 +812,48 @@
*/
public static final EAttribute VAL__INTLIST = eINSTANCE.getVal_Intlist();
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.henshin.tests.testmodel.SpecialVal <em>Special Val</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.henshin.tests.testmodel.SpecialVal
+ * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getSpecialVal()
+ * @generated
+ */
+ public static final EClass SPECIAL_VAL = eINSTANCE.getSpecialVal();
+
+ /**
+ * The meta object literal for the '<em><b>Derivedvl</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute SPECIAL_VAL__DERIVEDVL = eINSTANCE.getSpecialVal_Derivedvl();
+
+ /**
+ * The meta object literal for the '<em><b>Unchangeablevl</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute SPECIAL_VAL__UNCHANGEABLEVL = eINSTANCE.getSpecialVal_Unchangeablevl();
+
+ /**
+ * The meta object literal for the '<em><b>Unsetableunchangeablevl</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute SPECIAL_VAL__UNSETABLEUNCHANGEABLEVL = eINSTANCE.getSpecialVal_Unsetableunchangeablevl();
+
+ /**
+ * The meta object literal for the '<em><b>Unsetablevl</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute SPECIAL_VAL__UNSETABLEVL = eINSTANCE.getSpecialVal_Unsetablevl();
+
}
} //TestmodelPackage
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelSwitch.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelSwitch.java
index 481aa67..e0ae7e9 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelSwitch.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/TestmodelSwitch.java
@@ -99,6 +99,13 @@
if (result == null) result = defaultCase(theEObject);
return result;
}
+ case TestmodelPackage.SPECIAL_VAL: {
+ SpecialVal specialVal = (SpecialVal)theEObject;
+ T result = caseSpecialVal(specialVal);
+ if (result == null) result = caseVal(specialVal);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
default: return defaultCase(theEObject);
}
}
@@ -149,6 +156,21 @@
}
/**
+ * Returns the result of interpreting the object as an instance of '<em>Special Val</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Special Val</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseSpecialVal(SpecialVal object) {
+ return null;
+ }
+
+ /**
* Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
* <!-- begin-user-doc -->
* This implementation returns null;
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java
index caca445..8ba7c87 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java
@@ -126,7 +126,7 @@
* Sets the value of the '{@link org.eclipse.emf.henshin.tests.testmodel.Val#getIntvl <em>Intvl</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
- * @param value the new value of the '<em>Intvl</em>' attribute.
+ * @param newIntvl the new value of the '<em>Intvl</em>' attribute.
* @see #getIntvl()
* @generated
*/
@@ -159,7 +159,7 @@
* Sets the value of the '{@link org.eclipse.emf.henshin.tests.testmodel.Val#getValname <em>Valname</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
- * @param value the new value of the '<em>Valname</em>' attribute.
+ * @param newValname the new value of the '<em>Valname</em>' attribute.
* @see #getValname()
* @generated
*/
@@ -280,7 +280,7 @@
public String toString() {
if (eIsProxy()) return super.toString();
- StringBuffer result = new StringBuffer(super.toString());
+ StringBuilder result = new StringBuilder(super.toString());
result.append(" (intvl: ");
result.append(intvl);
result.append(", valname: ");
diff --git a/pom.xml b/pom.xml
index 0c19881..0602213 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,26 +52,6 @@
<tycho-extras-version>1.0.0</tycho-extras-version>
</properties>
-<!-- <repositories>
- <repository>
- <id>luna</id>
- <layout>p2</layout>
- <url>http://download.eclipse.org/releases/luna</url>
- </repository>
- <repository>
- <id>eclipse-orbit</id>
- <name>eclipse orbit for AGG</name>
- <layout>p2</layout>
- <url>http://download.eclipse.org/tools/orbit/downloads/drops/R20160520211859/repository/</url>
- </repository>
- <repository>
- <id>xtext</id>
- <name>xtext for textual syntax</name>
- <layout>p2</layout>
- <url>http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/</url>
- </repository>
- </repositories> -->
-
<build>
<plugins>
<plugin>
@@ -89,26 +69,6 @@
<environments>
<environment>
- <os>linux</os>
- <ws>gtk</ws>
- <arch>x86</arch>
- </environment>
- <environment>
- <os>linux</os>
- <ws>gtk</ws>
- <arch>x86_64</arch>
- </environment>
- <environment>
- <os>win32</os>
- <ws>win32</ws>
- <arch>x86</arch>
- </environment>
- <environment>
- <os>win32</os>
- <ws>win32</ws>
- <arch>x86_64</arch>
- </environment>
- <environment>
<os>macosx</os>
<ws>cocoa</ws>
<arch>x86_64</arch>
@@ -137,7 +97,28 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.8.1</version>
+ <configuration>
+ <compilerVersion>1.14</compilerVersion>
+ </configuration>
+ </plugin>
</plugins>
</build>
+ <distributionManagement>
+ <repository>
+ <id>repo.eclipse.org</id>
+ <name>Project Repository - Releases</name>
+ <url>https://repo.eclipse.org/content/repositories/henshin-releases/</url>
+ </repository>
+ <snapshotRepository>
+ <id>repo.eclipse.org</id>
+ <name>Project Repository - Snapshots</name>
+ <url>https://repo.eclipse.org/content/repositories/henshin-snapshots/</url>
+ </snapshotRepository>
+ </distributionManagement>
+
</project>