Merge "Remove problematic TestSuite classes"
diff --git a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/matching/constraints/DomainSlot.java b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/matching/constraints/DomainSlot.java
index c59b3af..3746d34 100644
--- a/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/matching/constraints/DomainSlot.java
+++ b/plugins/org.eclipse.emf.henshin.interpreter/src/org/eclipse/emf/henshin/interpreter/matching/constraints/DomainSlot.java
@@ -15,6 +15,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.emf.ecore.EObject;
@@ -147,9 +148,9 @@
return false;
}
- if (!setValueAndLock()) {
- return false;
- }
+ //if (!setValueAndLock()) {
+ // return false;
+ //}
// Check the variable?
if (!checkedVariables.contains(variable)) {
@@ -158,6 +159,13 @@
return false;
}
+ //Check injective
+ if(injective)
+ {
+ if(!checkInjective(variable, domainMap))
+ return false;
+ }
+
// Check the dangling constraints:
if (dangling) {
for (DanglingConstraint danglingConstraint : variable.danglingConstraints) {
@@ -213,6 +221,34 @@
return true;
}
+
+ /**Check if matching of variables violates injective
+ * @param variable
+ * @param domainMap
+ */
+ private Boolean checkInjective(Variable variable, Map<Variable, DomainSlot> domainMap) {
+
+ if(variable.name.isEmpty())
+ return true;
+
+ for (Entry<Variable, DomainSlot> entry : domainMap.entrySet()) {
+ Variable checkDoaminVariable = entry.getKey();
+ DomainSlot checkDomainSlot = entry.getValue();
+ // If different variables have the same name
+ if (checkDoaminVariable.name.equals(variable.name) && variable != checkDoaminVariable)
+ // And the variables correspond to the same type
+ if (checkDoaminVariable.typeConstraint.type == variable.typeConstraint.type) {
+ // Compare whether their corresponding maps are consistent
+ if (checkDomainSlot.initialized) {
+ if (checkDomainSlot.value != domainMap.get(variable).value) {
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
/**
* Removes the lock on this domain slot. If the domain contains additional
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/helpers/RuleEditPartVisibilityHelper.java b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/helpers/RuleEditPartVisibilityHelper.java
index 2ca0d23..c0d89cd 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/helpers/RuleEditPartVisibilityHelper.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/helpers/RuleEditPartVisibilityHelper.java
@@ -168,8 +168,8 @@
toggleRuleParts(ruleEditPart, new BaseRuleConcealingCondition());
}
- public static void showConfiguredRule(RuleEditPart ruleEditPart, Configuration configuration, String featureModel) {
- if (featureModel == null || configuration == null || ruleEditPart == null) {
+ public static void showConfiguredRule(RuleEditPart ruleEditPart, Configuration configuration, String featureConstraint) {
+ if (featureConstraint == null || configuration == null || ruleEditPart == null) {
return;
}
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/helpers/VariabilityModelHelper.java b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/helpers/VariabilityModelHelper.java
index fc1f176..c085654 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/helpers/VariabilityModelHelper.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/helpers/VariabilityModelHelper.java
@@ -35,7 +35,7 @@
}
public static Sentence getFeatureExpression(Configuration configuration) {
- Sentence expr = FeatureExpression.getExpr(TransactionalVariabilityFactory.INSTANCE.createVariabilityRule(configuration.getRule()).getFeatureModel());
+ Sentence expr = FeatureExpression.getExpr(TransactionalVariabilityFactory.INSTANCE.createVariabilityRule(configuration.getRule()).getFeatureConstraint());
for (Feature vp : configuration.getFeatures()) {
if (vp.getBinding() == FeatureBinding.TRUE) {
expr = FeatureExpression.and(expr, FeatureExpression.getExpr(vp.getName()));
@@ -66,7 +66,7 @@
}
private static Sentence getFeatureExpression(Configuration configuration, Feature feature) {
- Sentence expr = FeatureExpression.getExpr(TransactionalVariabilityFactory.INSTANCE.createVariabilityRule(configuration.getRule()).getFeatureModel());
+ Sentence expr = FeatureExpression.getExpr(TransactionalVariabilityFactory.INSTANCE.createVariabilityRule(configuration.getRule()).getFeatureConstraint());
if (expr == null)
expr = FeatureExpression.getExpr(Logic.TRUE);
for (Feature vp : configuration.getFeatures()) {
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/providers/ConfigurationProvider.java b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/providers/ConfigurationProvider.java
index 29878df..55f77bf 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/providers/ConfigurationProvider.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/configuration/ui/providers/ConfigurationProvider.java
@@ -139,7 +139,7 @@
ConfigurationFactory fac = ConfigurationFactoryImpl.init();
result = fac.createConfiguration();
result.setRule(varRule);
- String featureModel = varRule.getFeatureModel();
+ String featureConstraint = varRule.getFeatureConstraint();
EList<Feature> variabilityPoints = result.getFeatures();
if(varRule.getFeatures() != null) {
@@ -148,8 +148,8 @@
vp.setName(variabilityPointName);
variabilityPoints.add(vp);
}
- } else if (featureModel != null && !featureModel.isEmpty()) {
- Matcher match = Pattern.compile(REGEX).matcher(featureModel);
+ } else if (featureConstraint != null && !featureConstraint.isEmpty()) {
+ Matcher match = Pattern.compile(REGEX).matcher(featureConstraint);
while (match.find()) {
for (int i = 1; i <= match.groupCount(); i++) {
Feature vp = fac.createFeature();
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/ObservableFeatureModelValue.java b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/ObservableFeatureConstraintValue.java
similarity index 93%
rename from plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/ObservableFeatureModelValue.java
rename to plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/ObservableFeatureConstraintValue.java
index c264237..4db8101 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/ObservableFeatureModelValue.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/ObservableFeatureConstraintValue.java
@@ -20,12 +20,12 @@
*
* @param <T>
*/
-public class ObservableFeatureModelValue<T> implements IObservableValue<String>{
+public class ObservableFeatureConstraintValue<T> implements IObservableValue<String>{
IObservableValue<String> value;
boolean shouldUpdate;
- ObservableFeatureModelValue(IObservableValue<String> value) {
+ ObservableFeatureConstraintValue(IObservableValue<String> value) {
this.value = value;
}
@@ -89,7 +89,7 @@
public String getValue() {
VariabilityRule rule = getTargetVariabilityRule();
if (rule != null) {
- return rule.getFeatureModel();
+ return rule.getFeatureConstraint();
}
return value.getValue();
}
@@ -99,7 +99,7 @@
shouldUpdate = false;
VariabilityRule rule = getTargetVariabilityRule();
if (rule != null) {
- VariabilityTransactionHelper.setAnnotationValue(rule, VariabilityConstants.FEATURE_MODEL, value);
+ VariabilityTransactionHelper.setAnnotationValue(rule, VariabilityConstants.FEATURE_CONSTRAINT, value);
}
shouldUpdate = true;
}
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/VariabilityView.java b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/VariabilityView.java
index ba525df..98ca3c8 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/VariabilityView.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.configuration.ui/src/org/eclipse/emf/henshin/variability/ui/views/VariabilityView.java
@@ -116,7 +116,7 @@
private boolean linkingActive;
private Text variabilityModelText;
private DataBindingContext variabilityModelTextBindingContext;
- private ObservableFeatureModelValue<?> observableFeatureModelValue;
+ private ObservableFeatureConstraintValue<?> observableFeatureConstraintValue;
private FeatureViewerComparator comparator;
private ConfigurationProvider configurationProvider = ConfigurationProvider.getInstance();
private WritableValue<Rule> writableValue;
@@ -128,7 +128,7 @@
private Label ruleNameLabel;
private ToolItem add, delete, clear, refresh, selectedFavorite, deleteFavorite;
- private ToolBar favoriteToolBar, featureModelToolbar;
+ private ToolBar favoriteToolBar, featureConstraintToolbar;
public RuleEditPart getSelectedRuleEditPart() {
return selectedRuleEditPart;
@@ -386,19 +386,19 @@
ruleNameLabel = new Label(composite, SWT.NONE);
ruleNameLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
- ruleNameLabel.setText("No rule selected");
+ resetRuleNameLabel();
Label separatorName = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
separatorName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1));
Label variabilityModelLabel = new Label(composite, SWT.NONE);
variabilityModelLabel.setImage(ImageHelper.getImage("/icons/variability.gif"));
- variabilityModelLabel.setText("Configuration constraint");
+ variabilityModelLabel.setText("Feature Constraint");
variabilityModelLabel.setLayoutData(new GridData(SWT.FILL, SWT.LEFT, false, false, 1, 1));
- featureModelToolbar = new ToolBar(composite, SWT.FLAT);
- GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).grab(true, false).applyTo(featureModelToolbar);
- featureModelToolbar.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
- ToolItem createFeatures = new ToolItem(featureModelToolbar, SWT.PUSH);
+ featureConstraintToolbar = new ToolBar(composite, SWT.FLAT);
+ GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).grab(true, false).applyTo(featureConstraintToolbar);
+ featureConstraintToolbar.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
+ ToolItem createFeatures = new ToolItem(featureConstraintToolbar, SWT.PUSH);
createFeatures.setImage(ImageHelper.getImage("/icons/create_features.png"));
createFeatures.setToolTipText("Create all undefined features");
createFeatures.addSelectionListener(new SelectionListener() {
@@ -412,7 +412,7 @@
feature.setName(featureName);
config.addFeature(feature);
}
- featureModelToolbar.setVisible(false);
+ featureConstraintToolbar.setVisible(false);
refresh();
}
@@ -421,7 +421,7 @@
}
});
- featureModelToolbar.setVisible(false);
+ featureConstraintToolbar.setVisible(false);
variabilityModelText = new Text(composite, SWT.BORDER);
variabilityModelText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1));
@@ -439,9 +439,9 @@
// }
// });
//
-// bindingContext.bindValue(target, new ObservableFeatureModelValue(model), null, null);
- observableFeatureModelValue = new ObservableFeatureModelValue<Object>(model);
- variabilityModelTextBindingContext.bindValue(target, observableFeatureModelValue);
+// bindingContext.bindValue(target, new ObservableFeatureConstraintValue(model), null, null);
+ observableFeatureConstraintValue = new ObservableFeatureConstraintValue<Object>(model);
+ variabilityModelTextBindingContext.bindValue(target, observableFeatureConstraintValue);
Label separator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
separator.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1));
@@ -584,7 +584,7 @@
if (isChecked() && selectedRuleEditPart != null) {
super.run();
RuleEditPartVisibilityHelper.showConfiguredRule(selectedRuleEditPart, config,
- TransactionalVariabilityFactory.INSTANCE.createVariabilityRule(config.getRule()).getFeatureModel());
+ TransactionalVariabilityFactory.INSTANCE.createVariabilityRule(config.getRule()).getFeatureConstraint());
if (creationMode == CreationMode.SELECTION) {
updateEditPolicy(selectedRuleEditPart);
}
@@ -706,16 +706,16 @@
Annotation annotation = findModifiedAnnotation(event.getNotifications());
if (annotation != null) {
String value = annotation.getValue();
- if ((annotation.getKey().equals(VariabilityConstants.FEATURE_MODEL) || annotation.getKey().equals(VariabilityConstants.FEATURES)) && value != null && !value.isEmpty()) {
+ if ((annotation.getKey().equals(VariabilityConstants.FEATURE_CONSTRAINT) || annotation.getKey().equals(VariabilityConstants.FEATURES)) && value != null && !value.isEmpty()) {
if (config.getRule().hasMissingFeatures()) {
- featureModelToolbar.setVisible(true);
+ featureConstraintToolbar.setVisible(true);
} else {
- featureModelToolbar.setVisible(false);
+ featureConstraintToolbar.setVisible(false);
}
}
}
- if (observableFeatureModelValue.shouldUpdate()) {
+ if (observableFeatureConstraintValue.shouldUpdate()) {
refresh();
} else {
viewer.refresh();
@@ -740,7 +740,7 @@
domain.addResourceSetListener(new ConfigurationListener());
viewer.setInput(config);
- ruleNameLabel.setText("Selected rule: " + rule.getName());
+ updateRuleNameLabel(rule);
writableValue.setValue(rule);
refreshFavorites(rule);
@@ -749,9 +749,9 @@
}
if (rule.getMissingFeatures().length > 0) {
- featureModelToolbar.setVisible(true);
+ featureConstraintToolbar.setVisible(true);
} else {
- featureModelToolbar.setVisible(false);
+ featureConstraintToolbar.setVisible(false);
}
add.setEnabled(true);
@@ -759,6 +759,23 @@
clear.setEnabled(true);
refresh.setEnabled(true);
}
+
+ private void resetRuleNameLabel() {
+ ruleNameLabel.setText("No rule selected");
+ }
+
+ private void updateRuleNameLabel(VariabilityRule rule) {
+ if (rule != null) {
+ String ruleName = rule.getName();
+ if (ruleName != null && ! ruleName.isEmpty()) {
+ ruleNameLabel.setText("Selected rule: " + rule.getName());
+ } else {
+ ruleNameLabel.setText("Selected rule is unnamed");
+ }
+ } else {
+ resetRuleNameLabel();
+ }
+ }
@Override
public Configuration getContent() {
@@ -769,6 +786,7 @@
viewer.refresh();
variabilityModelTextBindingContext.updateModels();
variabilityModelTextBindingContext.updateTargets();
+ updateRuleNameLabel(config.getRule());
}
@Override
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.configuration/src/configuration/impl/ConfigurationImpl.java b/plugins/variability/org.eclipse.emf.henshin.variability.configuration/src/configuration/impl/ConfigurationImpl.java
index 56cf8ef..87f1a33 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.configuration/src/configuration/impl/ConfigurationImpl.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.configuration/src/configuration/impl/ConfigurationImpl.java
@@ -19,8 +19,8 @@
import org.eclipse.emf.henshin.model.Rule;
import org.eclipse.emf.henshin.variability.wrapper.VariabilityFactory;
import org.eclipse.emf.henshin.variability.wrapper.VariabilityConstants;
-import org.eclipse.emf.henshin.variability.wrapper.VariabilityHelper;
import org.eclipse.emf.henshin.variability.wrapper.VariabilityRule;
+import org.eclipse.emf.henshin.variability.wrapper.VariabilityTransactionHelper;
import configuration.Configuration;
import configuration.ConfigurationFactory;
@@ -52,7 +52,7 @@
* @author Stefan Schulz
*
*/
- private final class EFeatureModelContentAdapter extends EContentAdapter {
+ private final class EFeatureConstraintContentAdapter extends EContentAdapter {
@Override
public void notifyChanged(Notification notification) {
if (notification.getEventType() == Notification.REMOVING_ADAPTER) {
@@ -88,7 +88,7 @@
*/
protected EList<Feature> features;
- protected EFeatureModelContentAdapter featuresContentAdapter;
+ protected EFeatureConstraintContentAdapter featuresContentAdapter;
/**
* <!-- begin-user-doc -->
@@ -142,7 +142,7 @@
private void enableContentAdapter() {
if (featuresContentAdapter == null) {
- featuresContentAdapter = new EFeatureModelContentAdapter();
+ featuresContentAdapter = new EFeatureConstraintContentAdapter();
}
rule.eResource().getResourceSet().eAdapters().add(featuresContentAdapter);
}
@@ -168,7 +168,7 @@
if (featuresContentAdapter != null) {
oldRule.eResource().getResourceSet().eAdapters().remove(featuresContentAdapter);
} else {
- featuresContentAdapter = new EFeatureModelContentAdapter();
+ featuresContentAdapter = new EFeatureConstraintContentAdapter();
}
rule = newRule;
rule.eResource().getResourceSet().eAdapters().add(featuresContentAdapter);
@@ -218,7 +218,7 @@
} else {
featureAnnotationValue += feature.getName();
}
- VariabilityHelper.setAnnotationValue(rule, VariabilityConstants.FEATURES, featureAnnotationValue);
+ VariabilityTransactionHelper.setAnnotationValue(rule, VariabilityConstants.FEATURES, featureAnnotationValue);
enableContentAdapter();
return features.add(feature);
}
@@ -255,7 +255,7 @@
if (annotationFeatures.size() > 1) {
featureAnnotationValue = featureAnnotationValue.substring(0, featureAnnotationValue.length() - 2);
}
- VariabilityHelper.setAnnotationValue(rule, VariabilityConstants.FEATURES, featureAnnotationValue);
+ VariabilityTransactionHelper.setAnnotationValue(rule, VariabilityConstants.FEATURES, featureAnnotationValue);
enableContentAdapter();
return features.remove(feature);
} else {
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.mergein.refactoring/src/org/eclipse/emf/henshin/variability/mergein/refactoring/logic/NewMerger.java b/plugins/variability/org.eclipse.emf.henshin.variability.mergein.refactoring/src/org/eclipse/emf/henshin/variability/mergein/refactoring/logic/NewMerger.java
index 713651b..d67bbe3 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.mergein.refactoring/src/org/eclipse/emf/henshin/variability/mergein/refactoring/logic/NewMerger.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.mergein.refactoring/src/org/eclipse/emf/henshin/variability/mergein/refactoring/logic/NewMerger.java
@@ -157,7 +157,7 @@
private void completeMerging() throws MergeInException {
setInjectiveMatching();
- setFeatureModel();
+ setFeatureConstraint();
setFeatures();
setAnnotation();
if (furtherRules.isEmpty()) {
@@ -196,19 +196,19 @@
henshinModule.getUnits().removeAll(furtherRules);
}
- private void setFeatureModel() {
- String featureModel = XOR;
+ private void setFeatureConstraint() {
+ String featureConstraint = XOR;
VariabilityRule masterVarRule = VariabilityFactory.INSTANCE.createVariabilityRule(masterRule);
masterVarRule.addFeature(masterVarRule.getName());
- featureModel += BRACKET_LEFT;
- featureModel += getCondition(masterRule);
+ featureConstraint += BRACKET_LEFT;
+ featureConstraint += getCondition(masterRule);
for (Rule rule : furtherRules) {
- featureModel += COMMA;
- featureModel += getCondition(rule);
+ featureConstraint += COMMA;
+ featureConstraint += getCondition(rule);
masterVarRule.addFeature(rule.getName());
}
- featureModel += BRACKET_RIGHT;
- VariabilityFactory.INSTANCE.createVariabilityRule(masterRule).setFeatureModel(featureModel);
+ featureConstraint += BRACKET_RIGHT;
+ VariabilityFactory.INSTANCE.createVariabilityRule(masterRule).setFeatureConstraint(featureConstraint);
}
private void setFeatures() {
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/comb/comb-var-old_syntax.henshin b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/comb/comb-var-old_syntax.henshin
index 17aef83..68e80a5 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/comb/comb-var-old_syntax.henshin
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/comb/comb-var-old_syntax.henshin
@@ -4,7 +4,7 @@
<imports href="http://www.eclipse.org/emf/2002/Ecore#/"/>
<imports href="grid.ecore#/"/>
<units xsi:type="henshin:Rule" xmi:id="_OVdmvvPvEeSqRohALvsrgg" name="combPattern">
- <annotations xmi:id="_Be-oAJaQEemUmuWcLbh5qQ" key="featureModel" value="xor(combPattern3,combPattern4,combPattern5)"/>
+ <annotations xmi:id="_Be-oAJaQEemUmuWcLbh5qQ" key="featureConstraint" value="xor(combPattern3,combPattern4,combPattern5)"/>
<annotations xmi:id="_Be-oAZaQEemUmuWcLbh5qQ" key="features" value="combPattern3, combPattern4, combPattern5"/>
<lhs xmi:id="_OVdmv_PvEeSqRohALvsrgg" name="LHS">
<nodes xmi:id="_OVdmwPPvEeSqRohALvsrgg" name="comb1" outgoing="_OVdmyPPvEeSqRohALvsrgg _OVdmyfPvEeSqRohALvsrgg">
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/comb/comb-var.henshin b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/comb/comb-var.henshin
index 07a5aeb..6b7fa00 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/comb/comb-var.henshin
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/comb/comb-var.henshin
@@ -1,141 +1,141 @@
-<?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:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_q2mewKo1EeGWmNM0TiX1dQ">
- <imports href="grid.ecore#/"/>
- <units xsi:type="henshin:Rule" xmi:id="_OVdmvvPvEeSqRohALvsrgg" name="combPattern">
- <annotations xmi:id="_Be-oAJaQEemUmuWcLbh5qQ" key="featureModel" value="xor(combPattern3, combPattern4, combPattern5)"/>
- <annotations xmi:id="_Be-oAZaQEemUmuWcLbh5qQ" key="features" value="combPattern3, combPattern4, combPattern5"/>
- <annotations xmi:id="_QirmcPpWEem5wpnPu4aQLQ" key="injectiveMatchingPresenceCondition"/>
- <lhs xmi:id="_OVdmv_PvEeSqRohALvsrgg" name="LHS">
- <nodes xmi:id="_OVdmwvPvEeSqRohALvsrgg" name="comb2" outgoing="_OVdmyvPvEeSqRohALvsrgg _OVdmy_PvEeSqRohALvsrgg">
- <annotations xmi:id="_UGRpAPpWEem5wpnPu4aQLQ" key="presenceCondition"/>
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdmw_PvEeSqRohALvsrgg" name="comb2Ver" incoming="_OVdmyvPvEeSqRohALvsrgg">
- <annotations xmi:id="_UGaL4PpWEem5wpnPu4aQLQ" key="presenceCondition"/>
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdmxPPvEeSqRohALvsrgg" name="comb3" incoming="_OVdmy_PvEeSqRohALvsrgg" outgoing="_OVdmzPPvEeSqRohALvsrgg _OVdmzfPvEeSqRohALvsrgg">
- <annotations xmi:id="_atZ48JaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern3 or combPattern4 or combPattern5"/>
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdmxfPvEeSqRohALvsrgg" name="comb3Ver" incoming="_OVdmzPPvEeSqRohALvsrgg">
- <annotations xmi:id="_bC618JaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern3 or combPattern4 or combPattern5"/>
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdmxvPvEeSqRohALvsrgg" name="comb4" incoming="_OVdmzfPvEeSqRohALvsrgg" outgoing="_OVdmzvPvEeSqRohALvsrgg _QKcLIPPvEeSqRohALvsrgg">
- <annotations xmi:id="_TrfVYJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern4 or combPattern5"/>
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdmx_PvEeSqRohALvsrgg" name="comb4Ver" incoming="_OVdmzvPvEeSqRohALvsrgg">
- <annotations xmi:id="_UC4hsJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern4 or combPattern5"/>
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_PeNXQPPvEeSqRohALvsrgg" name="comb5" incoming="_QKcLIPPvEeSqRohALvsrgg" outgoing="_QYo_MPPvEeSqRohALvsrgg">
- <annotations xmi:id="_UX0P4JaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern5"/>
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_Pk08oPPvEeSqRohALvsrgg" name="comb5Ver" incoming="_QYo_MPPvEeSqRohALvsrgg">
- <annotations xmi:id="_UzBlMJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern5"/>
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_zaCfIAZEEeq-0oliJiwLkQ" name="test">
- <annotations xmi:id="_zaP6gAZEEeq-0oliJiwLkQ" key="presenceCondition"/>
- <type href="grid.ecore#//Grid"/>
- </nodes>
- <edges xmi:id="_OVdmyvPvEeSqRohALvsrgg" source="_OVdmwvPvEeSqRohALvsrgg" target="_OVdmw_PvEeSqRohALvsrgg">
- <annotations xmi:id="_UGV6cPpWEem5wpnPu4aQLQ" key="presenceCondition"/>
- <type href="grid.ecore#//Node/ver"/>
- </edges>
- <edges xmi:id="_OVdmy_PvEeSqRohALvsrgg" source="_OVdmwvPvEeSqRohALvsrgg" target="_OVdmxPPvEeSqRohALvsrgg">
- <annotations xmi:id="_kf6U0JaIEem9eqq-XCLikw" key="presenceCondition" value="combpattern3 or combpattern4 or combpattern5"/>
- <type href="grid.ecore#//Node/hor"/>
- </edges>
- <edges xmi:id="_OVdmzPPvEeSqRohALvsrgg" source="_OVdmxPPvEeSqRohALvsrgg" target="_OVdmxfPvEeSqRohALvsrgg">
- <annotations xmi:id="_lPCrsJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern3 or combPattern4 or combPattern5"/>
- <type href="grid.ecore#//Node/ver"/>
- </edges>
- <edges xmi:id="_OVdmzfPvEeSqRohALvsrgg" source="_OVdmxPPvEeSqRohALvsrgg" target="_OVdmxvPvEeSqRohALvsrgg">
- <annotations xmi:id="_ljxlkJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern4 or combPattern5"/>
- <type href="grid.ecore#//Node/hor"/>
- </edges>
- <edges xmi:id="_OVdmzvPvEeSqRohALvsrgg" source="_OVdmxvPvEeSqRohALvsrgg" target="_OVdmx_PvEeSqRohALvsrgg">
- <annotations xmi:id="_l4fRUJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern4 or combPattern5"/>
- <type href="grid.ecore#//Node/ver"/>
- </edges>
- <edges xmi:id="_QKcLIPPvEeSqRohALvsrgg" source="_OVdmxvPvEeSqRohALvsrgg" target="_PeNXQPPvEeSqRohALvsrgg">
- <annotations xmi:id="_mNdbwJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern5"/>
- <type href="grid.ecore#//Node/hor"/>
- </edges>
- <edges xmi:id="_QYo_MPPvEeSqRohALvsrgg" source="_PeNXQPPvEeSqRohALvsrgg" target="_Pk08oPPvEeSqRohALvsrgg">
- <annotations xmi:id="_miAIYJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern5"/>
- <type href="grid.ecore#//Node/ver"/>
- </edges>
- </lhs>
- <rhs xmi:id="_OVdmz_PvEeSqRohALvsrgg" name="RHS">
- <nodes xmi:id="_OVdm0vPvEeSqRohALvsrgg" outgoing="_OVdm2vPvEeSqRohALvsrgg _OVdm2_PvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdm0_PvEeSqRohALvsrgg" incoming="_OVdm2vPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdm1PPvEeSqRohALvsrgg" incoming="_OVdm2_PvEeSqRohALvsrgg" outgoing="_OVdm3PPvEeSqRohALvsrgg _OVdm3fPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdm1fPvEeSqRohALvsrgg" incoming="_OVdm3PPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdm1vPvEeSqRohALvsrgg" incoming="_OVdm3fPvEeSqRohALvsrgg" outgoing="_OVdm3vPvEeSqRohALvsrgg _QKcLIfPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_OVdm1_PvEeSqRohALvsrgg" incoming="_OVdm3vPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_PeNXQfPvEeSqRohALvsrgg" incoming="_QKcLIfPvEeSqRohALvsrgg" outgoing="_QYo_MfPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_Pk08ofPvEeSqRohALvsrgg" incoming="_QYo_MfPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node"/>
- </nodes>
- <nodes xmi:id="_zaEUUAZEEeq-0oliJiwLkQ">
- <type href="grid.ecore#//Grid"/>
- </nodes>
- <edges xmi:id="_OVdm2vPvEeSqRohALvsrgg" source="_OVdm0vPvEeSqRohALvsrgg" target="_OVdm0_PvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node/ver"/>
- </edges>
- <edges xmi:id="_OVdm2_PvEeSqRohALvsrgg" source="_OVdm0vPvEeSqRohALvsrgg" target="_OVdm1PPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node/hor"/>
- </edges>
- <edges xmi:id="_OVdm3PPvEeSqRohALvsrgg" source="_OVdm1PPvEeSqRohALvsrgg" target="_OVdm1fPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node/ver"/>
- </edges>
- <edges xmi:id="_OVdm3fPvEeSqRohALvsrgg" source="_OVdm1PPvEeSqRohALvsrgg" target="_OVdm1vPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node/hor"/>
- </edges>
- <edges xmi:id="_OVdm3vPvEeSqRohALvsrgg" source="_OVdm1vPvEeSqRohALvsrgg" target="_OVdm1_PvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node/ver"/>
- </edges>
- <edges xmi:id="_QKcLIfPvEeSqRohALvsrgg" source="_OVdm1vPvEeSqRohALvsrgg" target="_PeNXQfPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node/hor"/>
- </edges>
- <edges xmi:id="_QYo_MfPvEeSqRohALvsrgg" source="_PeNXQfPvEeSqRohALvsrgg" target="_Pk08ofPvEeSqRohALvsrgg">
- <type href="grid.ecore#//Node/ver"/>
- </edges>
- </rhs>
- <mappings xmi:id="_OVdm4fPvEeSqRohALvsrgg" origin="_OVdmwvPvEeSqRohALvsrgg" image="_OVdm0vPvEeSqRohALvsrgg"/>
- <mappings xmi:id="_OVdm4vPvEeSqRohALvsrgg" origin="_OVdmw_PvEeSqRohALvsrgg" image="_OVdm0_PvEeSqRohALvsrgg"/>
- <mappings xmi:id="_OVdm4_PvEeSqRohALvsrgg" origin="_OVdmxPPvEeSqRohALvsrgg" image="_OVdm1PPvEeSqRohALvsrgg"/>
- <mappings xmi:id="_OVdm5PPvEeSqRohALvsrgg" origin="_OVdmxfPvEeSqRohALvsrgg" image="_OVdm1fPvEeSqRohALvsrgg"/>
- <mappings xmi:id="_OVdm5fPvEeSqRohALvsrgg" origin="_OVdmxvPvEeSqRohALvsrgg" image="_OVdm1vPvEeSqRohALvsrgg"/>
- <mappings xmi:id="_OVdm5vPvEeSqRohALvsrgg" origin="_OVdmx_PvEeSqRohALvsrgg" image="_OVdm1_PvEeSqRohALvsrgg"/>
- <mappings xmi:id="_PeNXQvPvEeSqRohALvsrgg" origin="_PeNXQPPvEeSqRohALvsrgg" image="_PeNXQfPvEeSqRohALvsrgg"/>
- <mappings xmi:id="_Pk08ovPvEeSqRohALvsrgg" origin="_Pk08oPPvEeSqRohALvsrgg" image="_Pk08ofPvEeSqRohALvsrgg"/>
- <mappings xmi:id="_zaEUUQZEEeq-0oliJiwLkQ" origin="_zaCfIAZEEeq-0oliJiwLkQ" image="_zaEUUAZEEeq-0oliJiwLkQ"/>
- </units>
- <units xsi:type="henshin:Rule" xmi:id="_3nCLYAZBEeqhdr1yv25vOw" name="test">
- <annotations xmi:id="_3ncbEAZBEeqhdr1yv25vOw" key="featureModel"/>
- <annotations xmi:id="_3nmzIAZBEeqhdr1yv25vOw" key="injectiveMatchingPresenceCondition"/>
- <annotations xmi:id="_3nrEkAZBEeqhdr1yv25vOw" key="features"/>
- <lhs xmi:id="_3nHq8AZBEeqhdr1yv25vOw" name="Lhs"/>
- <rhs xmi:id="_3nHq8QZBEeqhdr1yv25vOw" name="Rhs"/>
- </units>
-</henshin:Module>
+<?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:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_q2mewKo1EeGWmNM0TiX1dQ">
+ <imports href="grid.ecore#/"/>
+ <units xsi:type="henshin:Rule" xmi:id="_OVdmvvPvEeSqRohALvsrgg" name="combPattern">
+ <annotations xmi:id="_Be-oAJaQEemUmuWcLbh5qQ" key="featureConstraint" value="xor(combPattern3, combPattern4, combPattern5)"/>
+ <annotations xmi:id="_Be-oAZaQEemUmuWcLbh5qQ" key="features" value="combPattern3, combPattern4, combPattern5"/>
+ <annotations xmi:id="_QirmcPpWEem5wpnPu4aQLQ" key="injectiveMatchingPresenceCondition"/>
+ <lhs xmi:id="_OVdmv_PvEeSqRohALvsrgg" name="LHS">
+ <nodes xmi:id="_OVdmwvPvEeSqRohALvsrgg" name="comb2" outgoing="_OVdmyvPvEeSqRohALvsrgg _OVdmy_PvEeSqRohALvsrgg">
+ <annotations xmi:id="_UGRpAPpWEem5wpnPu4aQLQ" key="presenceCondition"/>
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdmw_PvEeSqRohALvsrgg" name="comb2Ver" incoming="_OVdmyvPvEeSqRohALvsrgg">
+ <annotations xmi:id="_UGaL4PpWEem5wpnPu4aQLQ" key="presenceCondition"/>
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdmxPPvEeSqRohALvsrgg" name="comb3" incoming="_OVdmy_PvEeSqRohALvsrgg" outgoing="_OVdmzPPvEeSqRohALvsrgg _OVdmzfPvEeSqRohALvsrgg">
+ <annotations xmi:id="_atZ48JaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern3 or combPattern4 or combPattern5"/>
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdmxfPvEeSqRohALvsrgg" name="comb3Ver" incoming="_OVdmzPPvEeSqRohALvsrgg">
+ <annotations xmi:id="_bC618JaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern3 or combPattern4 or combPattern5"/>
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdmxvPvEeSqRohALvsrgg" name="comb4" incoming="_OVdmzfPvEeSqRohALvsrgg" outgoing="_OVdmzvPvEeSqRohALvsrgg _QKcLIPPvEeSqRohALvsrgg">
+ <annotations xmi:id="_TrfVYJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern4 or combPattern5"/>
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdmx_PvEeSqRohALvsrgg" name="comb4Ver" incoming="_OVdmzvPvEeSqRohALvsrgg">
+ <annotations xmi:id="_UC4hsJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern4 or combPattern5"/>
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_PeNXQPPvEeSqRohALvsrgg" name="comb5" incoming="_QKcLIPPvEeSqRohALvsrgg" outgoing="_QYo_MPPvEeSqRohALvsrgg">
+ <annotations xmi:id="_UX0P4JaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern5"/>
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_Pk08oPPvEeSqRohALvsrgg" name="comb5Ver" incoming="_QYo_MPPvEeSqRohALvsrgg">
+ <annotations xmi:id="_UzBlMJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern5"/>
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_zaCfIAZEEeq-0oliJiwLkQ" name="test">
+ <annotations xmi:id="_zaP6gAZEEeq-0oliJiwLkQ" key="presenceCondition"/>
+ <type href="grid.ecore#//Grid"/>
+ </nodes>
+ <edges xmi:id="_OVdmyvPvEeSqRohALvsrgg" source="_OVdmwvPvEeSqRohALvsrgg" target="_OVdmw_PvEeSqRohALvsrgg">
+ <annotations xmi:id="_UGV6cPpWEem5wpnPu4aQLQ" key="presenceCondition"/>
+ <type href="grid.ecore#//Node/ver"/>
+ </edges>
+ <edges xmi:id="_OVdmy_PvEeSqRohALvsrgg" source="_OVdmwvPvEeSqRohALvsrgg" target="_OVdmxPPvEeSqRohALvsrgg">
+ <annotations xmi:id="_kf6U0JaIEem9eqq-XCLikw" key="presenceCondition" value="combpattern3 or combpattern4 or combpattern5"/>
+ <type href="grid.ecore#//Node/hor"/>
+ </edges>
+ <edges xmi:id="_OVdmzPPvEeSqRohALvsrgg" source="_OVdmxPPvEeSqRohALvsrgg" target="_OVdmxfPvEeSqRohALvsrgg">
+ <annotations xmi:id="_lPCrsJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern3 or combPattern4 or combPattern5"/>
+ <type href="grid.ecore#//Node/ver"/>
+ </edges>
+ <edges xmi:id="_OVdmzfPvEeSqRohALvsrgg" source="_OVdmxPPvEeSqRohALvsrgg" target="_OVdmxvPvEeSqRohALvsrgg">
+ <annotations xmi:id="_ljxlkJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern4 or combPattern5"/>
+ <type href="grid.ecore#//Node/hor"/>
+ </edges>
+ <edges xmi:id="_OVdmzvPvEeSqRohALvsrgg" source="_OVdmxvPvEeSqRohALvsrgg" target="_OVdmx_PvEeSqRohALvsrgg">
+ <annotations xmi:id="_l4fRUJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern4 or combPattern5"/>
+ <type href="grid.ecore#//Node/ver"/>
+ </edges>
+ <edges xmi:id="_QKcLIPPvEeSqRohALvsrgg" source="_OVdmxvPvEeSqRohALvsrgg" target="_PeNXQPPvEeSqRohALvsrgg">
+ <annotations xmi:id="_mNdbwJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern5"/>
+ <type href="grid.ecore#//Node/hor"/>
+ </edges>
+ <edges xmi:id="_QYo_MPPvEeSqRohALvsrgg" source="_PeNXQPPvEeSqRohALvsrgg" target="_Pk08oPPvEeSqRohALvsrgg">
+ <annotations xmi:id="_miAIYJaIEem9eqq-XCLikw" key="presenceCondition" value="combPattern5"/>
+ <type href="grid.ecore#//Node/ver"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_OVdmz_PvEeSqRohALvsrgg" name="RHS">
+ <nodes xmi:id="_OVdm0vPvEeSqRohALvsrgg" outgoing="_OVdm2vPvEeSqRohALvsrgg _OVdm2_PvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdm0_PvEeSqRohALvsrgg" incoming="_OVdm2vPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdm1PPvEeSqRohALvsrgg" incoming="_OVdm2_PvEeSqRohALvsrgg" outgoing="_OVdm3PPvEeSqRohALvsrgg _OVdm3fPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdm1fPvEeSqRohALvsrgg" incoming="_OVdm3PPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdm1vPvEeSqRohALvsrgg" incoming="_OVdm3fPvEeSqRohALvsrgg" outgoing="_OVdm3vPvEeSqRohALvsrgg _QKcLIfPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_OVdm1_PvEeSqRohALvsrgg" incoming="_OVdm3vPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_PeNXQfPvEeSqRohALvsrgg" incoming="_QKcLIfPvEeSqRohALvsrgg" outgoing="_QYo_MfPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_Pk08ofPvEeSqRohALvsrgg" incoming="_QYo_MfPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node"/>
+ </nodes>
+ <nodes xmi:id="_zaEUUAZEEeq-0oliJiwLkQ">
+ <type href="grid.ecore#//Grid"/>
+ </nodes>
+ <edges xmi:id="_OVdm2vPvEeSqRohALvsrgg" source="_OVdm0vPvEeSqRohALvsrgg" target="_OVdm0_PvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node/ver"/>
+ </edges>
+ <edges xmi:id="_OVdm2_PvEeSqRohALvsrgg" source="_OVdm0vPvEeSqRohALvsrgg" target="_OVdm1PPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node/hor"/>
+ </edges>
+ <edges xmi:id="_OVdm3PPvEeSqRohALvsrgg" source="_OVdm1PPvEeSqRohALvsrgg" target="_OVdm1fPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node/ver"/>
+ </edges>
+ <edges xmi:id="_OVdm3fPvEeSqRohALvsrgg" source="_OVdm1PPvEeSqRohALvsrgg" target="_OVdm1vPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node/hor"/>
+ </edges>
+ <edges xmi:id="_OVdm3vPvEeSqRohALvsrgg" source="_OVdm1vPvEeSqRohALvsrgg" target="_OVdm1_PvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node/ver"/>
+ </edges>
+ <edges xmi:id="_QKcLIfPvEeSqRohALvsrgg" source="_OVdm1vPvEeSqRohALvsrgg" target="_PeNXQfPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node/hor"/>
+ </edges>
+ <edges xmi:id="_QYo_MfPvEeSqRohALvsrgg" source="_PeNXQfPvEeSqRohALvsrgg" target="_Pk08ofPvEeSqRohALvsrgg">
+ <type href="grid.ecore#//Node/ver"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_OVdm4fPvEeSqRohALvsrgg" origin="_OVdmwvPvEeSqRohALvsrgg" image="_OVdm0vPvEeSqRohALvsrgg"/>
+ <mappings xmi:id="_OVdm4vPvEeSqRohALvsrgg" origin="_OVdmw_PvEeSqRohALvsrgg" image="_OVdm0_PvEeSqRohALvsrgg"/>
+ <mappings xmi:id="_OVdm4_PvEeSqRohALvsrgg" origin="_OVdmxPPvEeSqRohALvsrgg" image="_OVdm1PPvEeSqRohALvsrgg"/>
+ <mappings xmi:id="_OVdm5PPvEeSqRohALvsrgg" origin="_OVdmxfPvEeSqRohALvsrgg" image="_OVdm1fPvEeSqRohALvsrgg"/>
+ <mappings xmi:id="_OVdm5fPvEeSqRohALvsrgg" origin="_OVdmxvPvEeSqRohALvsrgg" image="_OVdm1vPvEeSqRohALvsrgg"/>
+ <mappings xmi:id="_OVdm5vPvEeSqRohALvsrgg" origin="_OVdmx_PvEeSqRohALvsrgg" image="_OVdm1_PvEeSqRohALvsrgg"/>
+ <mappings xmi:id="_PeNXQvPvEeSqRohALvsrgg" origin="_PeNXQPPvEeSqRohALvsrgg" image="_PeNXQfPvEeSqRohALvsrgg"/>
+ <mappings xmi:id="_Pk08ovPvEeSqRohALvsrgg" origin="_Pk08oPPvEeSqRohALvsrgg" image="_Pk08ofPvEeSqRohALvsrgg"/>
+ <mappings xmi:id="_zaEUUQZEEeq-0oliJiwLkQ" origin="_zaCfIAZEEeq-0oliJiwLkQ" image="_zaEUUAZEEeq-0oliJiwLkQ"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_3nCLYAZBEeqhdr1yv25vOw" name="test">
+ <annotations xmi:id="_3ncbEAZBEeqhdr1yv25vOw" key="featureConstraint"/>
+ <annotations xmi:id="_3nmzIAZBEeqhdr1yv25vOw" key="injectiveMatchingPresenceCondition"/>
+ <annotations xmi:id="_3nrEkAZBEeqhdr1yv25vOw" key="features"/>
+ <lhs xmi:id="_3nHq8AZBEeqhdr1yv25vOw" name="Lhs"/>
+ <rhs xmi:id="_3nHq8QZBEeqhdr1yv25vOw" name="Rhs"/>
+ </units>
+</henshin:Module>
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/inconsistent.henshin b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/inconsistent.henshin
index 04363ac..bad8399 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/inconsistent.henshin
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/inconsistent.henshin
@@ -1,73 +1,73 @@
-<?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:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_EMSTsBBeEeqGYoBEYurJJg">
- <imports href="Java.ecore#/"/>
- <units xsi:type="henshin:Rule" xmi:id="_FRXFYBBeEeqGYoBEYurJJg" name="preserve">
- <annotations xmi:id="_FR3bsBBeEeqGYoBEYurJJg" key="featureModel" value="(M and not F) or (not M and F)"/>
- <annotations xmi:id="_FR3bsRBeEeqGYoBEYurJJg" key="injectiveMatchingPresenceCondition" value=""/>
- <annotations xmi:id="_FR4CwBBeEeqGYoBEYurJJg" key="features" value="M, X"/>
- <lhs xmi:id="_FRfoQBBeEeqGYoBEYurJJg" name="Lhs">
- <nodes xmi:id="_HA034BBeEeqGYoBEYurJJg" outgoing="_IognYBBeEeqGYoBEYurJJg _q4RgMBG6Eeqxptn-OOol6g _xlRjsBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_c5FogBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_Hz_aMBBeEeqGYoBEYurJJg" incoming="_IognYBBeEeqGYoBEYurJJg">
- <annotations xmi:id="_c5Ir0BG6Eeqxptn-OOol6g" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_pOdpwBG6Eeqxptn-OOol6g" incoming="_q4RgMBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_pOmzsBG6Eeqxptn-OOol6g" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_wMfL0BG6Eeqxptn-OOol6g" incoming="_xlRjsBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_wMgZ8BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <edges xmi:id="_IognYBBeEeqGYoBEYurJJg" source="_HA034BBeEeqGYoBEYurJJg" target="_Hz_aMBBeEeqGYoBEYurJJg">
- <annotations xmi:id="_c5JS4BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_q4RgMBG6Eeqxptn-OOol6g" source="_HA034BBeEeqGYoBEYurJJg" target="_pOdpwBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_q4sW8BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_xlRjsBG6Eeqxptn-OOol6g" source="_HA034BBeEeqGYoBEYurJJg" target="_wMfL0BG6Eeqxptn-OOol6g">
- <annotations xmi:id="_xlSKwBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </lhs>
- <rhs xmi:id="_FRfoQRBeEeqGYoBEYurJJg" name="Rhs">
- <nodes xmi:id="_HA1e8BBeEeqGYoBEYurJJg" outgoing="_IognYRBeEeqGYoBEYurJJg _q4SHQBG6Eeqxptn-OOol6g _xlRjsRG6Eeqxptn-OOol6g">
- <annotations xmi:id="_c5J58BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_Hz_aMRBeEeqGYoBEYurJJg" incoming="_IognYRBeEeqGYoBEYurJJg">
- <annotations xmi:id="_c5J58RG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_pOeQ0BG6Eeqxptn-OOol6g" incoming="_q4SHQBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_pOqeEBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_wMfy4BG6Eeqxptn-OOol6g" incoming="_xlRjsRG6Eeqxptn-OOol6g">
- <annotations xmi:id="_wMi2MBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <edges xmi:id="_IognYRBeEeqGYoBEYurJJg" source="_HA1e8BBeEeqGYoBEYurJJg" target="_Hz_aMRBeEeqGYoBEYurJJg">
- <annotations xmi:id="_c5J58hG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_q4SHQBG6Eeqxptn-OOol6g" source="_HA1e8BBeEeqGYoBEYurJJg" target="_pOeQ0BG6Eeqxptn-OOol6g">
- <annotations xmi:id="_q4uMIBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_xlRjsRG6Eeqxptn-OOol6g" source="_HA1e8BBeEeqGYoBEYurJJg" target="_wMfy4BG6Eeqxptn-OOol6g">
- <annotations xmi:id="_xlTY4BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </rhs>
- <mappings xmi:id="_HA1e8RBeEeqGYoBEYurJJg" origin="_HA034BBeEeqGYoBEYurJJg" image="_HA1e8BBeEeqGYoBEYurJJg"/>
- <mappings xmi:id="_H0ABQBBeEeqGYoBEYurJJg" origin="_Hz_aMBBeEeqGYoBEYurJJg" image="_Hz_aMRBeEeqGYoBEYurJJg"/>
- <mappings xmi:id="_pOe34BG6Eeqxptn-OOol6g" origin="_pOdpwBG6Eeqxptn-OOol6g" image="_pOeQ0BG6Eeqxptn-OOol6g"/>
- <mappings xmi:id="_wMfy4RG6Eeqxptn-OOol6g" origin="_wMfL0BG6Eeqxptn-OOol6g" image="_wMfy4BG6Eeqxptn-OOol6g"/>
- </units>
-</henshin:Module>
+<?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:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_EMSTsBBeEeqGYoBEYurJJg">
+ <imports href="Java.ecore#/"/>
+ <units xsi:type="henshin:Rule" xmi:id="_FRXFYBBeEeqGYoBEYurJJg" name="preserve">
+ <annotations xmi:id="_FR3bsBBeEeqGYoBEYurJJg" key="featureConstraint" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_FR3bsRBeEeqGYoBEYurJJg" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_FR4CwBBeEeqGYoBEYurJJg" key="features" value="M, X"/>
+ <lhs xmi:id="_FRfoQBBeEeqGYoBEYurJJg" name="Lhs">
+ <nodes xmi:id="_HA034BBeEeqGYoBEYurJJg" outgoing="_IognYBBeEeqGYoBEYurJJg _q4RgMBG6Eeqxptn-OOol6g _xlRjsBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_c5FogBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Hz_aMBBeEeqGYoBEYurJJg" incoming="_IognYBBeEeqGYoBEYurJJg">
+ <annotations xmi:id="_c5Ir0BG6Eeqxptn-OOol6g" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_pOdpwBG6Eeqxptn-OOol6g" incoming="_q4RgMBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_pOmzsBG6Eeqxptn-OOol6g" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_wMfL0BG6Eeqxptn-OOol6g" incoming="_xlRjsBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_wMgZ8BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_IognYBBeEeqGYoBEYurJJg" source="_HA034BBeEeqGYoBEYurJJg" target="_Hz_aMBBeEeqGYoBEYurJJg">
+ <annotations xmi:id="_c5JS4BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_q4RgMBG6Eeqxptn-OOol6g" source="_HA034BBeEeqGYoBEYurJJg" target="_pOdpwBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_q4sW8BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_xlRjsBG6Eeqxptn-OOol6g" source="_HA034BBeEeqGYoBEYurJJg" target="_wMfL0BG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_xlSKwBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_FRfoQRBeEeqGYoBEYurJJg" name="Rhs">
+ <nodes xmi:id="_HA1e8BBeEeqGYoBEYurJJg" outgoing="_IognYRBeEeqGYoBEYurJJg _q4SHQBG6Eeqxptn-OOol6g _xlRjsRG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_c5J58BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Hz_aMRBeEeqGYoBEYurJJg" incoming="_IognYRBeEeqGYoBEYurJJg">
+ <annotations xmi:id="_c5J58RG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_pOeQ0BG6Eeqxptn-OOol6g" incoming="_q4SHQBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_pOqeEBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_wMfy4BG6Eeqxptn-OOol6g" incoming="_xlRjsRG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_wMi2MBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_IognYRBeEeqGYoBEYurJJg" source="_HA1e8BBeEeqGYoBEYurJJg" target="_Hz_aMRBeEeqGYoBEYurJJg">
+ <annotations xmi:id="_c5J58hG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_q4SHQBG6Eeqxptn-OOol6g" source="_HA1e8BBeEeqGYoBEYurJJg" target="_pOeQ0BG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_q4uMIBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_xlRjsRG6Eeqxptn-OOol6g" source="_HA1e8BBeEeqGYoBEYurJJg" target="_wMfy4BG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_xlTY4BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_HA1e8RBeEeqGYoBEYurJJg" origin="_HA034BBeEeqGYoBEYurJJg" image="_HA1e8BBeEeqGYoBEYurJJg"/>
+ <mappings xmi:id="_H0ABQBBeEeqGYoBEYurJJg" origin="_Hz_aMBBeEeqGYoBEYurJJg" image="_Hz_aMRBeEeqGYoBEYurJJg"/>
+ <mappings xmi:id="_pOe34BG6Eeqxptn-OOol6g" origin="_pOdpwBG6Eeqxptn-OOol6g" image="_pOeQ0BG6Eeqxptn-OOol6g"/>
+ <mappings xmi:id="_wMfy4RG6Eeqxptn-OOol6g" origin="_wMfL0BG6Eeqxptn-OOol6g" image="_wMfy4BG6Eeqxptn-OOol6g"/>
+ </units>
+</henshin:Module>
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/non-vb.henshin b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/non-vb.henshin
index c3316bc..52078df 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/non-vb.henshin
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/non-vb.henshin
@@ -1,101 +1,101 @@
-<?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:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_QYMFABHAEeqxptn-OOol6g">
- <imports href="Java.ecore#/"/>
- <units xsi:type="henshin:Rule" xmi:id="_RDazUBHAEeqxptn-OOol6g" name="preserve">
- <annotations xmi:id="_RD6ikBHAEeqxptn-OOol6g" key="featureModel" value=""/>
- <annotations xmi:id="_RD6ikRHAEeqxptn-OOol6g" key="injectiveMatchingPresenceCondition" value=""/>
- <annotations xmi:id="_RD7JoBHAEeqxptn-OOol6g" key="features" value=""/>
- <lhs xmi:id="_RDkkUBHAEeqxptn-OOol6g" name="Lhs">
- <nodes xmi:id="_SDDrYBHAEeqxptn-OOol6g" outgoing="_Uon_cBHAEeqxptn-OOol6g _VHVUsBHAEeqxptn-OOol6g">
- <annotations xmi:id="_SDE5gBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_ScrsUBHAEeqxptn-OOol6g" incoming="_VHVUsBHAEeqxptn-OOol6g">
- <annotations xmi:id="_ScsTYRHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_SxPAABHAEeqxptn-OOol6g" incoming="_Uon_cBHAEeqxptn-OOol6g">
- <annotations xmi:id="_SxPnEBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <edges xmi:id="_Uon_cBHAEeqxptn-OOol6g" source="_SDDrYBHAEeqxptn-OOol6g" target="_SxPAABHAEeqxptn-OOol6g">
- <annotations xmi:id="_UoomgRHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_VHVUsBHAEeqxptn-OOol6g" source="_SDDrYBHAEeqxptn-OOol6g" target="_ScrsUBHAEeqxptn-OOol6g">
- <annotations xmi:id="_VHWi0BHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </lhs>
- <rhs xmi:id="_RDkkURHAEeqxptn-OOol6g" name="Rhs">
- <nodes xmi:id="_SDDrYRHAEeqxptn-OOol6g" outgoing="_UoomgBHAEeqxptn-OOol6g _VHVUsRHAEeqxptn-OOol6g">
- <annotations xmi:id="_SDLnMBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_ScrsURHAEeqxptn-OOol6g" incoming="_VHVUsRHAEeqxptn-OOol6g">
- <annotations xmi:id="_ScuIkBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_SxPAARHAEeqxptn-OOol6g" incoming="_UoomgBHAEeqxptn-OOol6g">
- <annotations xmi:id="_SxT4gBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <edges xmi:id="_UoomgBHAEeqxptn-OOol6g" source="_SDDrYRHAEeqxptn-OOol6g" target="_SxPAARHAEeqxptn-OOol6g">
- <annotations xmi:id="_UopNkBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_VHVUsRHAEeqxptn-OOol6g" source="_SDDrYRHAEeqxptn-OOol6g" target="_ScrsURHAEeqxptn-OOol6g">
- <annotations xmi:id="_VHXw8BHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </rhs>
- <mappings xmi:id="_SDDrYhHAEeqxptn-OOol6g" origin="_SDDrYBHAEeqxptn-OOol6g" image="_SDDrYRHAEeqxptn-OOol6g"/>
- <mappings xmi:id="_ScsTYBHAEeqxptn-OOol6g" origin="_ScrsUBHAEeqxptn-OOol6g" image="_ScrsURHAEeqxptn-OOol6g"/>
- <mappings xmi:id="_SxPAAhHAEeqxptn-OOol6g" origin="_SxPAABHAEeqxptn-OOol6g" image="_SxPAARHAEeqxptn-OOol6g"/>
- </units>
- <units xsi:type="henshin:Rule" xmi:id="_0swUMBHJEeqgupJREgJjUg" name="create">
- <lhs xmi:id="_0tFrYBHJEeqgupJREgJjUg" name="Lhs">
- <nodes xmi:id="_2p-14BHJEeqgupJREgJjUg" outgoing="_5ZBPABHJEeqgupJREgJjUg _5rzBEBHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_3uGlUBHJEeqgupJREgJjUg" incoming="_5ZBPABHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_4xhxMBHJEeqgupJREgJjUg" incoming="_5rzBEBHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Field"/>
- </nodes>
- <edges xmi:id="_5ZBPABHJEeqgupJREgJjUg" source="_2p-14BHJEeqgupJREgJjUg" target="_3uGlUBHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_5rzBEBHJEeqgupJREgJjUg" source="_2p-14BHJEeqgupJREgJjUg" target="_4xhxMBHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- </lhs>
- <rhs xmi:id="_0tFrYRHJEeqgupJREgJjUg" name="Rhs">
- <nodes xmi:id="_2p-14RHJEeqgupJREgJjUg" outgoing="_5ZB2EBHJEeqgupJREgJjUg _5rzBERHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_3uHMYBHJEeqgupJREgJjUg" incoming="_5ZB2EBHJEeqgupJREgJjUg" outgoing="_BGnM0BHKEeqgupJREgJjUg">
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_4xiYQBHJEeqgupJREgJjUg" incoming="_5rzBERHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_7sqsoBHJEeqgupJREgJjUg" incoming="_BGnM0BHKEeqgupJREgJjUg">
- <type href="Java.ecore#//Annotation"/>
- </nodes>
- <edges xmi:id="_5ZB2EBHJEeqgupJREgJjUg" source="_2p-14RHJEeqgupJREgJjUg" target="_3uHMYBHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_5rzBERHJEeqgupJREgJjUg" source="_2p-14RHJEeqgupJREgJjUg" target="_4xiYQBHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_BGnM0BHKEeqgupJREgJjUg" source="_3uHMYBHJEeqgupJREgJjUg" target="_7sqsoBHJEeqgupJREgJjUg">
- <type href="Java.ecore#//Method/annotation"/>
- </edges>
- </rhs>
- <mappings xmi:id="_2p-14hHJEeqgupJREgJjUg" origin="_2p-14BHJEeqgupJREgJjUg" image="_2p-14RHJEeqgupJREgJjUg"/>
- <mappings xmi:id="_3uHMYRHJEeqgupJREgJjUg" origin="_3uGlUBHJEeqgupJREgJjUg" image="_3uHMYBHJEeqgupJREgJjUg"/>
- <mappings xmi:id="_4xiYQRHJEeqgupJREgJjUg" origin="_4xhxMBHJEeqgupJREgJjUg" image="_4xiYQBHJEeqgupJREgJjUg"/>
- </units>
-</henshin:Module>
+<?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:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_QYMFABHAEeqxptn-OOol6g">
+ <imports href="Java.ecore#/"/>
+ <units xsi:type="henshin:Rule" xmi:id="_RDazUBHAEeqxptn-OOol6g" name="preserve">
+ <annotations xmi:id="_RD6ikBHAEeqxptn-OOol6g" key="featureConstraint" value=""/>
+ <annotations xmi:id="_RD6ikRHAEeqxptn-OOol6g" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_RD7JoBHAEeqxptn-OOol6g" key="features" value=""/>
+ <lhs xmi:id="_RDkkUBHAEeqxptn-OOol6g" name="Lhs">
+ <nodes xmi:id="_SDDrYBHAEeqxptn-OOol6g" outgoing="_Uon_cBHAEeqxptn-OOol6g _VHVUsBHAEeqxptn-OOol6g">
+ <annotations xmi:id="_SDE5gBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_ScrsUBHAEeqxptn-OOol6g" incoming="_VHVUsBHAEeqxptn-OOol6g">
+ <annotations xmi:id="_ScsTYRHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_SxPAABHAEeqxptn-OOol6g" incoming="_Uon_cBHAEeqxptn-OOol6g">
+ <annotations xmi:id="_SxPnEBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <edges xmi:id="_Uon_cBHAEeqxptn-OOol6g" source="_SDDrYBHAEeqxptn-OOol6g" target="_SxPAABHAEeqxptn-OOol6g">
+ <annotations xmi:id="_UoomgRHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_VHVUsBHAEeqxptn-OOol6g" source="_SDDrYBHAEeqxptn-OOol6g" target="_ScrsUBHAEeqxptn-OOol6g">
+ <annotations xmi:id="_VHWi0BHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_RDkkURHAEeqxptn-OOol6g" name="Rhs">
+ <nodes xmi:id="_SDDrYRHAEeqxptn-OOol6g" outgoing="_UoomgBHAEeqxptn-OOol6g _VHVUsRHAEeqxptn-OOol6g">
+ <annotations xmi:id="_SDLnMBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_ScrsURHAEeqxptn-OOol6g" incoming="_VHVUsRHAEeqxptn-OOol6g">
+ <annotations xmi:id="_ScuIkBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_SxPAARHAEeqxptn-OOol6g" incoming="_UoomgBHAEeqxptn-OOol6g">
+ <annotations xmi:id="_SxT4gBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <edges xmi:id="_UoomgBHAEeqxptn-OOol6g" source="_SDDrYRHAEeqxptn-OOol6g" target="_SxPAARHAEeqxptn-OOol6g">
+ <annotations xmi:id="_UopNkBHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_VHVUsRHAEeqxptn-OOol6g" source="_SDDrYRHAEeqxptn-OOol6g" target="_ScrsURHAEeqxptn-OOol6g">
+ <annotations xmi:id="_VHXw8BHAEeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_SDDrYhHAEeqxptn-OOol6g" origin="_SDDrYBHAEeqxptn-OOol6g" image="_SDDrYRHAEeqxptn-OOol6g"/>
+ <mappings xmi:id="_ScsTYBHAEeqxptn-OOol6g" origin="_ScrsUBHAEeqxptn-OOol6g" image="_ScrsURHAEeqxptn-OOol6g"/>
+ <mappings xmi:id="_SxPAAhHAEeqxptn-OOol6g" origin="_SxPAABHAEeqxptn-OOol6g" image="_SxPAARHAEeqxptn-OOol6g"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_0swUMBHJEeqgupJREgJjUg" name="create">
+ <lhs xmi:id="_0tFrYBHJEeqgupJREgJjUg" name="Lhs">
+ <nodes xmi:id="_2p-14BHJEeqgupJREgJjUg" outgoing="_5ZBPABHJEeqgupJREgJjUg _5rzBEBHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_3uGlUBHJEeqgupJREgJjUg" incoming="_5ZBPABHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_4xhxMBHJEeqgupJREgJjUg" incoming="_5rzBEBHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <edges xmi:id="_5ZBPABHJEeqgupJREgJjUg" source="_2p-14BHJEeqgupJREgJjUg" target="_3uGlUBHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_5rzBEBHJEeqgupJREgJjUg" source="_2p-14BHJEeqgupJREgJjUg" target="_4xhxMBHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_0tFrYRHJEeqgupJREgJjUg" name="Rhs">
+ <nodes xmi:id="_2p-14RHJEeqgupJREgJjUg" outgoing="_5ZB2EBHJEeqgupJREgJjUg _5rzBERHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_3uHMYBHJEeqgupJREgJjUg" incoming="_5ZB2EBHJEeqgupJREgJjUg" outgoing="_BGnM0BHKEeqgupJREgJjUg">
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_4xiYQBHJEeqgupJREgJjUg" incoming="_5rzBERHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_7sqsoBHJEeqgupJREgJjUg" incoming="_BGnM0BHKEeqgupJREgJjUg">
+ <type href="Java.ecore#//Annotation"/>
+ </nodes>
+ <edges xmi:id="_5ZB2EBHJEeqgupJREgJjUg" source="_2p-14RHJEeqgupJREgJjUg" target="_3uHMYBHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_5rzBERHJEeqgupJREgJjUg" source="_2p-14RHJEeqgupJREgJjUg" target="_4xiYQBHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_BGnM0BHKEeqgupJREgJjUg" source="_3uHMYBHJEeqgupJREgJjUg" target="_7sqsoBHJEeqgupJREgJjUg">
+ <type href="Java.ecore#//Method/annotation"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_2p-14hHJEeqgupJREgJjUg" origin="_2p-14BHJEeqgupJREgJjUg" image="_2p-14RHJEeqgupJREgJjUg"/>
+ <mappings xmi:id="_3uHMYRHJEeqgupJREgJjUg" origin="_3uGlUBHJEeqgupJREgJjUg" image="_3uHMYBHJEeqgupJREgJjUg"/>
+ <mappings xmi:id="_4xiYQRHJEeqgupJREgJjUg" origin="_4xhxMBHJEeqgupJREgJjUg" image="_4xiYQBHJEeqgupJREgJjUg"/>
+ </units>
+</henshin:Module>
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin
index d60436a..f441460 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin
+++ b/plugins/variability/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin
@@ -1,346 +1,346 @@
-<?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:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_EMSTsBBeEeqGYoBEYurJJg">
- <imports href="Java.ecore#/"/>
- <units xsi:type="henshin:Rule" xmi:id="_FRXFYBBeEeqGYoBEYurJJg" name="preserve">
- <annotations xmi:id="_FR3bsBBeEeqGYoBEYurJJg" key="featureModel" value="(M and not F) or (not M and F)"/>
- <annotations xmi:id="_FR3bsRBeEeqGYoBEYurJJg" key="injectiveMatchingPresenceCondition" value=""/>
- <annotations xmi:id="_FR4CwBBeEeqGYoBEYurJJg" key="features" value="M, F"/>
- <lhs xmi:id="_FRfoQBBeEeqGYoBEYurJJg" name="Lhs">
- <nodes xmi:id="_HA034BBeEeqGYoBEYurJJg" outgoing="_IognYBBeEeqGYoBEYurJJg _q4RgMBG6Eeqxptn-OOol6g _xlRjsBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_c5FogBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_Hz_aMBBeEeqGYoBEYurJJg" incoming="_IognYBBeEeqGYoBEYurJJg">
- <annotations xmi:id="_c5Ir0BG6Eeqxptn-OOol6g" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_pOdpwBG6Eeqxptn-OOol6g" incoming="_q4RgMBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_pOmzsBG6Eeqxptn-OOol6g" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_wMfL0BG6Eeqxptn-OOol6g" incoming="_xlRjsBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_wMgZ8BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <edges xmi:id="_IognYBBeEeqGYoBEYurJJg" source="_HA034BBeEeqGYoBEYurJJg" target="_Hz_aMBBeEeqGYoBEYurJJg">
- <annotations xmi:id="_c5JS4BG6Eeqxptn-OOol6g" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_q4RgMBG6Eeqxptn-OOol6g" source="_HA034BBeEeqGYoBEYurJJg" target="_pOdpwBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_q4sW8BG6Eeqxptn-OOol6g" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_xlRjsBG6Eeqxptn-OOol6g" source="_HA034BBeEeqGYoBEYurJJg" target="_wMfL0BG6Eeqxptn-OOol6g">
- <annotations xmi:id="_xlSKwBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </lhs>
- <rhs xmi:id="_FRfoQRBeEeqGYoBEYurJJg" name="Rhs">
- <nodes xmi:id="_HA1e8BBeEeqGYoBEYurJJg" outgoing="_IognYRBeEeqGYoBEYurJJg _q4SHQBG6Eeqxptn-OOol6g _xlRjsRG6Eeqxptn-OOol6g">
- <annotations xmi:id="_c5J58BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_Hz_aMRBeEeqGYoBEYurJJg" incoming="_IognYRBeEeqGYoBEYurJJg">
- <annotations xmi:id="_c5J58RG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_pOeQ0BG6Eeqxptn-OOol6g" incoming="_q4SHQBG6Eeqxptn-OOol6g">
- <annotations xmi:id="_pOqeEBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_wMfy4BG6Eeqxptn-OOol6g" incoming="_xlRjsRG6Eeqxptn-OOol6g">
- <annotations xmi:id="_wMi2MBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <edges xmi:id="_IognYRBeEeqGYoBEYurJJg" source="_HA1e8BBeEeqGYoBEYurJJg" target="_Hz_aMRBeEeqGYoBEYurJJg">
- <annotations xmi:id="_c5J58hG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_q4SHQBG6Eeqxptn-OOol6g" source="_HA1e8BBeEeqGYoBEYurJJg" target="_pOeQ0BG6Eeqxptn-OOol6g">
- <annotations xmi:id="_q4uMIBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_xlRjsRG6Eeqxptn-OOol6g" source="_HA1e8BBeEeqGYoBEYurJJg" target="_wMfy4BG6Eeqxptn-OOol6g">
- <annotations xmi:id="_xlTY4BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </rhs>
- <mappings xmi:id="_HA1e8RBeEeqGYoBEYurJJg" origin="_HA034BBeEeqGYoBEYurJJg" image="_HA1e8BBeEeqGYoBEYurJJg"/>
- <mappings xmi:id="_H0ABQBBeEeqGYoBEYurJJg" origin="_Hz_aMBBeEeqGYoBEYurJJg" image="_Hz_aMRBeEeqGYoBEYurJJg"/>
- <mappings xmi:id="_pOe34BG6Eeqxptn-OOol6g" origin="_pOdpwBG6Eeqxptn-OOol6g" image="_pOeQ0BG6Eeqxptn-OOol6g"/>
- <mappings xmi:id="_wMfy4RG6Eeqxptn-OOol6g" origin="_wMfL0BG6Eeqxptn-OOol6g" image="_wMfy4BG6Eeqxptn-OOol6g"/>
- </units>
- <units xsi:type="henshin:Rule" xmi:id="_0rWAkCTxEeqQuPO741JcQw" name="create1">
- <annotations xmi:id="_0rWAkSTxEeqQuPO741JcQw" key="featureModel" value="(M and not F) or (not M and F)"/>
- <annotations xmi:id="_0rWAkiTxEeqQuPO741JcQw" key="injectiveMatchingPresenceCondition" value=""/>
- <annotations xmi:id="_0rWAkyTxEeqQuPO741JcQw" key="features" value="M, F"/>
- <lhs xmi:id="_0rWAlCTxEeqQuPO741JcQw" name="Lhs">
- <nodes xmi:id="_0rWAlSTxEeqQuPO741JcQw" outgoing="_0rWAnSTxEeqQuPO741JcQw _0rWAnyTxEeqQuPO741JcQw _0rWAoSTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAliTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_0rWAlyTxEeqQuPO741JcQw" incoming="_0rWAnSTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAmCTxEeqQuPO741JcQw" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_0rWAmSTxEeqQuPO741JcQw" incoming="_0rWAnyTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAmiTxEeqQuPO741JcQw" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_0rWAmyTxEeqQuPO741JcQw" incoming="_0rWAoSTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAnCTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <edges xmi:id="_0rWAnSTxEeqQuPO741JcQw" source="_0rWAlSTxEeqQuPO741JcQw" target="_0rWAlyTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAniTxEeqQuPO741JcQw" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_0rWAnyTxEeqQuPO741JcQw" source="_0rWAlSTxEeqQuPO741JcQw" target="_0rWAmSTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAoCTxEeqQuPO741JcQw" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_0rWAoSTxEeqQuPO741JcQw" source="_0rWAlSTxEeqQuPO741JcQw" target="_0rWAmyTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAoiTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </lhs>
- <rhs xmi:id="_0rWAoyTxEeqQuPO741JcQw" name="Rhs">
- <nodes xmi:id="_0rWApCTxEeqQuPO741JcQw" outgoing="_0rWArCTxEeqQuPO741JcQw _0rWAriTxEeqQuPO741JcQw _0rWAsCTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWApSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_0rWApiTxEeqQuPO741JcQw" incoming="_0rWArCTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWApyTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_0rWAqCTxEeqQuPO741JcQw" incoming="_0rWAriTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAqSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_0rWAqiTxEeqQuPO741JcQw" incoming="_0rWAsCTxEeqQuPO741JcQw" outgoing="_akKm4CTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_0rWAqyTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_7tIoUCTxEeqQuPO741JcQw" incoming="_akKm4CTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_7tMSsCTxEeqQuPO741JcQw" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Annotation"/>
- </nodes>
- <edges xmi:id="_0rWArCTxEeqQuPO741JcQw" source="_0rWApCTxEeqQuPO741JcQw" target="_0rWApiTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWArSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_0rWAriTxEeqQuPO741JcQw" source="_0rWApCTxEeqQuPO741JcQw" target="_0rWAqCTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAryTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_0rWAsCTxEeqQuPO741JcQw" source="_0rWApCTxEeqQuPO741JcQw" target="_0rWAqiTxEeqQuPO741JcQw">
- <annotations xmi:id="_0rWAsSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_akKm4CTyEeqmvcN2WI4rvQ" source="_0rWAqiTxEeqQuPO741JcQw" target="_7tIoUCTxEeqQuPO741JcQw">
- <annotations xmi:id="_akPfYCTyEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Method/annotation"/>
- </edges>
- </rhs>
- <mappings xmi:id="_0rWAsiTxEeqQuPO741JcQw" origin="_0rWAlSTxEeqQuPO741JcQw" image="_0rWApCTxEeqQuPO741JcQw"/>
- <mappings xmi:id="_0rWAsyTxEeqQuPO741JcQw" origin="_0rWAlyTxEeqQuPO741JcQw" image="_0rWApiTxEeqQuPO741JcQw"/>
- <mappings xmi:id="_0rWAtCTxEeqQuPO741JcQw" origin="_0rWAmSTxEeqQuPO741JcQw" image="_0rWAqCTxEeqQuPO741JcQw"/>
- <mappings xmi:id="_0rWAtSTxEeqQuPO741JcQw" origin="_0rWAmyTxEeqQuPO741JcQw" image="_0rWAqiTxEeqQuPO741JcQw"/>
- </units>
- <units xsi:type="henshin:Rule" xmi:id="_52y8UCTyEeqmvcN2WI4rvQ" name="create2">
- <annotations xmi:id="_52y8USTyEeqmvcN2WI4rvQ" key="featureModel" value="(M and not F) or (not M and F)"/>
- <annotations xmi:id="_52y8UiTyEeqmvcN2WI4rvQ" key="injectiveMatchingPresenceCondition" value=""/>
- <annotations xmi:id="_52y8UyTyEeqmvcN2WI4rvQ" key="features" value="M, F"/>
- <lhs xmi:id="_52y8VCTyEeqmvcN2WI4rvQ" name="Lhs">
- <nodes xmi:id="_52y8VSTyEeqmvcN2WI4rvQ" outgoing="_52y8XSTyEeqmvcN2WI4rvQ _52y8XyTyEeqmvcN2WI4rvQ _52y8YSTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8ViTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_52y8VyTyEeqmvcN2WI4rvQ" incoming="_52y8XSTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8WCTyEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_52y8WSTyEeqmvcN2WI4rvQ" incoming="_52y8XyTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8WiTyEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_52y8WyTyEeqmvcN2WI4rvQ" incoming="_52y8YSTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8XCTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <edges xmi:id="_52y8XSTyEeqmvcN2WI4rvQ" source="_52y8VSTyEeqmvcN2WI4rvQ" target="_52y8VyTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8XiTyEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_52y8XyTyEeqmvcN2WI4rvQ" source="_52y8VSTyEeqmvcN2WI4rvQ" target="_52y8WSTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8YCTyEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_52y8YSTyEeqmvcN2WI4rvQ" source="_52y8VSTyEeqmvcN2WI4rvQ" target="_52y8WyTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8YiTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </lhs>
- <rhs xmi:id="_52y8YyTyEeqmvcN2WI4rvQ" name="Rhs">
- <nodes xmi:id="_52y8ZCTyEeqmvcN2WI4rvQ" outgoing="_52y8biTyEeqmvcN2WI4rvQ _52y8cCTyEeqmvcN2WI4rvQ _52y8ciTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8ZSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_52y8ZiTyEeqmvcN2WI4rvQ" incoming="_52y8biTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8ZyTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_52y8aCTyEeqmvcN2WI4rvQ" incoming="_52y8cCTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8aSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_52y8aiTyEeqmvcN2WI4rvQ" incoming="_52y8ciTyEeqmvcN2WI4rvQ" outgoing="_52y8dCTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8ayTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_52y8bCTyEeqmvcN2WI4rvQ" incoming="_52y8dCTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8bSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Annotation"/>
- </nodes>
- <edges xmi:id="_52y8biTyEeqmvcN2WI4rvQ" source="_52y8ZCTyEeqmvcN2WI4rvQ" target="_52y8ZiTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8byTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_52y8cCTyEeqmvcN2WI4rvQ" source="_52y8ZCTyEeqmvcN2WI4rvQ" target="_52y8aCTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8cSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_52y8ciTyEeqmvcN2WI4rvQ" source="_52y8ZCTyEeqmvcN2WI4rvQ" target="_52y8aiTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8cyTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_52y8dCTyEeqmvcN2WI4rvQ" source="_52y8aiTyEeqmvcN2WI4rvQ" target="_52y8bCTyEeqmvcN2WI4rvQ">
- <annotations xmi:id="_52y8dSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method/annotation"/>
- </edges>
- </rhs>
- <mappings xmi:id="_52y8diTyEeqmvcN2WI4rvQ" origin="_52y8VSTyEeqmvcN2WI4rvQ" image="_52y8ZCTyEeqmvcN2WI4rvQ"/>
- <mappings xmi:id="_52y8dyTyEeqmvcN2WI4rvQ" origin="_52y8VyTyEeqmvcN2WI4rvQ" image="_52y8ZiTyEeqmvcN2WI4rvQ"/>
- <mappings xmi:id="_52y8eCTyEeqmvcN2WI4rvQ" origin="_52y8WSTyEeqmvcN2WI4rvQ" image="_52y8aCTyEeqmvcN2WI4rvQ"/>
- <mappings xmi:id="_52y8eSTyEeqmvcN2WI4rvQ" origin="_52y8WyTyEeqmvcN2WI4rvQ" image="_52y8aiTyEeqmvcN2WI4rvQ"/>
- </units>
- <units xsi:type="henshin:Rule" xmi:id="_SrasgCTzEeqmvcN2WI4rvQ" name="delete1">
- <annotations xmi:id="_SrasgSTzEeqmvcN2WI4rvQ" key="featureModel" value="(M and not F) or (not M and F)"/>
- <annotations xmi:id="_SrasgiTzEeqmvcN2WI4rvQ" key="injectiveMatchingPresenceCondition" value=""/>
- <annotations xmi:id="_SrasgyTzEeqmvcN2WI4rvQ" key="features" value="M, F"/>
- <lhs xmi:id="_SrashCTzEeqmvcN2WI4rvQ" name="Lhs">
- <nodes xmi:id="_SrashSTzEeqmvcN2WI4rvQ" outgoing="_SrasjSTzEeqmvcN2WI4rvQ _SrasjyTzEeqmvcN2WI4rvQ _SraskSTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SrashiTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_SrashyTzEeqmvcN2WI4rvQ" incoming="_SrasjSTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SrasiCTzEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_SrasiSTzEeqmvcN2WI4rvQ" incoming="_SrasjyTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SrasiiTzEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_SrasiyTzEeqmvcN2WI4rvQ" incoming="_SraskSTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SrasjCTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <edges xmi:id="_SrasjSTzEeqmvcN2WI4rvQ" source="_SrashSTzEeqmvcN2WI4rvQ" target="_SrashyTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SrasjiTzEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_SrasjyTzEeqmvcN2WI4rvQ" source="_SrashSTzEeqmvcN2WI4rvQ" target="_SrasiSTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SraskCTzEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_SraskSTzEeqmvcN2WI4rvQ" source="_SrashSTzEeqmvcN2WI4rvQ" target="_SrasiyTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SraskiTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </lhs>
- <rhs xmi:id="_SraskyTzEeqmvcN2WI4rvQ" name="Rhs">
- <nodes xmi:id="_SraslCTzEeqmvcN2WI4rvQ" outgoing="_SrasnCTzEeqmvcN2WI4rvQ _SrasoCTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SraslSTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_SrasliTzEeqmvcN2WI4rvQ" incoming="_SrasnCTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SraslyTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_SrasmiTzEeqmvcN2WI4rvQ" incoming="_SrasoCTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SrasmyTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <edges xmi:id="_SrasnCTzEeqmvcN2WI4rvQ" source="_SraslCTzEeqmvcN2WI4rvQ" target="_SrasliTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SrasnSTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_SrasoCTzEeqmvcN2WI4rvQ" source="_SraslCTzEeqmvcN2WI4rvQ" target="_SrasmiTzEeqmvcN2WI4rvQ">
- <annotations xmi:id="_SrasoSTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </rhs>
- <mappings xmi:id="_SrasoiTzEeqmvcN2WI4rvQ" origin="_SrashSTzEeqmvcN2WI4rvQ" image="_SraslCTzEeqmvcN2WI4rvQ"/>
- <mappings xmi:id="_SrasoyTzEeqmvcN2WI4rvQ" origin="_SrashyTzEeqmvcN2WI4rvQ" image="_SrasliTzEeqmvcN2WI4rvQ"/>
- <mappings xmi:id="_SraspSTzEeqmvcN2WI4rvQ" origin="_SrasiyTzEeqmvcN2WI4rvQ" image="_SrasmiTzEeqmvcN2WI4rvQ"/>
- </units>
- <units xsi:type="henshin:Rule" xmi:id="_Z6vIACT1EeqBU_anwUtFuQ" name="delete2">
- <annotations xmi:id="_Z6vIAST1EeqBU_anwUtFuQ" key="featureModel" value="(M and not F) or (not M and F)"/>
- <annotations xmi:id="_Z6vIAiT1EeqBU_anwUtFuQ" key="injectiveMatchingPresenceCondition" value=""/>
- <annotations xmi:id="_Z6vIAyT1EeqBU_anwUtFuQ" key="features" value="M, F"/>
- <lhs xmi:id="_Z6vIBCT1EeqBU_anwUtFuQ" name="Lhs">
- <nodes xmi:id="_Z6vIBST1EeqBU_anwUtFuQ" outgoing="_Z6vIDST1EeqBU_anwUtFuQ _Z6vIDyT1EeqBU_anwUtFuQ _Z6vIEST1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vIBiT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_Z6vIByT1EeqBU_anwUtFuQ" incoming="_Z6vIDST1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vICCT1EeqBU_anwUtFuQ" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_Z6vICST1EeqBU_anwUtFuQ" incoming="_Z6vIDyT1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vICiT1EeqBU_anwUtFuQ" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <nodes xmi:id="_Z6vICyT1EeqBU_anwUtFuQ" incoming="_Z6vIEST1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vIDCT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <edges xmi:id="_Z6vIDST1EeqBU_anwUtFuQ" source="_Z6vIBST1EeqBU_anwUtFuQ" target="_Z6vIByT1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vIDiT1EeqBU_anwUtFuQ" key="presenceCondition" value="M"/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_Z6vIDyT1EeqBU_anwUtFuQ" source="_Z6vIBST1EeqBU_anwUtFuQ" target="_Z6vICST1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vIECT1EeqBU_anwUtFuQ" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- <edges xmi:id="_Z6vIEST1EeqBU_anwUtFuQ" source="_Z6vIBST1EeqBU_anwUtFuQ" target="_Z6vICyT1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vIEiT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- </lhs>
- <rhs xmi:id="_Z6vIEyT1EeqBU_anwUtFuQ" name="Rhs">
- <nodes xmi:id="_Z6vIFCT1EeqBU_anwUtFuQ" outgoing="_Z6vIGiT1EeqBU_anwUtFuQ _ggCBAyT1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vIFST1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class"/>
- </nodes>
- <nodes xmi:id="_Z6vIFiT1EeqBU_anwUtFuQ" incoming="_Z6vIGiT1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vIFyT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Method"/>
- </nodes>
- <nodes xmi:id="_ggCBACT1EeqBU_anwUtFuQ" incoming="_ggCBAyT1EeqBU_anwUtFuQ">
- <annotations xmi:id="_ggCBAST1EeqBU_anwUtFuQ" key="presenceCondition" value="F"/>
- <type href="Java.ecore#//Field"/>
- </nodes>
- <edges xmi:id="_Z6vIGiT1EeqBU_anwUtFuQ" source="_Z6vIFCT1EeqBU_anwUtFuQ" target="_Z6vIFiT1EeqBU_anwUtFuQ">
- <annotations xmi:id="_Z6vIGyT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
- <type href="Java.ecore#//Class/methods"/>
- </edges>
- <edges xmi:id="_ggCBAyT1EeqBU_anwUtFuQ" source="_Z6vIFCT1EeqBU_anwUtFuQ" target="_ggCBACT1EeqBU_anwUtFuQ">
- <type href="Java.ecore#//Class/fields"/>
- </edges>
- </rhs>
- <mappings xmi:id="_Z6vIHiT1EeqBU_anwUtFuQ" origin="_Z6vIBST1EeqBU_anwUtFuQ" image="_Z6vIFCT1EeqBU_anwUtFuQ"/>
- <mappings xmi:id="_Z6vIHyT1EeqBU_anwUtFuQ" origin="_Z6vIByT1EeqBU_anwUtFuQ" image="_Z6vIFiT1EeqBU_anwUtFuQ"/>
- <mappings xmi:id="_ggCBAiT1EeqBU_anwUtFuQ" origin="_Z6vICST1EeqBU_anwUtFuQ" image="_ggCBACT1EeqBU_anwUtFuQ"/>
- </units>
-</henshin:Module>
+<?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:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_EMSTsBBeEeqGYoBEYurJJg">
+ <imports href="Java.ecore#/"/>
+ <units xsi:type="henshin:Rule" xmi:id="_FRXFYBBeEeqGYoBEYurJJg" name="preserve">
+ <annotations xmi:id="_FR3bsBBeEeqGYoBEYurJJg" key="featureConstraint" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_FR3bsRBeEeqGYoBEYurJJg" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_FR4CwBBeEeqGYoBEYurJJg" key="features" value="M, F"/>
+ <lhs xmi:id="_FRfoQBBeEeqGYoBEYurJJg" name="Lhs">
+ <nodes xmi:id="_HA034BBeEeqGYoBEYurJJg" outgoing="_IognYBBeEeqGYoBEYurJJg _q4RgMBG6Eeqxptn-OOol6g _xlRjsBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_c5FogBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Hz_aMBBeEeqGYoBEYurJJg" incoming="_IognYBBeEeqGYoBEYurJJg">
+ <annotations xmi:id="_c5Ir0BG6Eeqxptn-OOol6g" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_pOdpwBG6Eeqxptn-OOol6g" incoming="_q4RgMBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_pOmzsBG6Eeqxptn-OOol6g" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_wMfL0BG6Eeqxptn-OOol6g" incoming="_xlRjsBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_wMgZ8BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_IognYBBeEeqGYoBEYurJJg" source="_HA034BBeEeqGYoBEYurJJg" target="_Hz_aMBBeEeqGYoBEYurJJg">
+ <annotations xmi:id="_c5JS4BG6Eeqxptn-OOol6g" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_q4RgMBG6Eeqxptn-OOol6g" source="_HA034BBeEeqGYoBEYurJJg" target="_pOdpwBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_q4sW8BG6Eeqxptn-OOol6g" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_xlRjsBG6Eeqxptn-OOol6g" source="_HA034BBeEeqGYoBEYurJJg" target="_wMfL0BG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_xlSKwBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_FRfoQRBeEeqGYoBEYurJJg" name="Rhs">
+ <nodes xmi:id="_HA1e8BBeEeqGYoBEYurJJg" outgoing="_IognYRBeEeqGYoBEYurJJg _q4SHQBG6Eeqxptn-OOol6g _xlRjsRG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_c5J58BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Hz_aMRBeEeqGYoBEYurJJg" incoming="_IognYRBeEeqGYoBEYurJJg">
+ <annotations xmi:id="_c5J58RG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_pOeQ0BG6Eeqxptn-OOol6g" incoming="_q4SHQBG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_pOqeEBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_wMfy4BG6Eeqxptn-OOol6g" incoming="_xlRjsRG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_wMi2MBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_IognYRBeEeqGYoBEYurJJg" source="_HA1e8BBeEeqGYoBEYurJJg" target="_Hz_aMRBeEeqGYoBEYurJJg">
+ <annotations xmi:id="_c5J58hG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_q4SHQBG6Eeqxptn-OOol6g" source="_HA1e8BBeEeqGYoBEYurJJg" target="_pOeQ0BG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_q4uMIBG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_xlRjsRG6Eeqxptn-OOol6g" source="_HA1e8BBeEeqGYoBEYurJJg" target="_wMfy4BG6Eeqxptn-OOol6g">
+ <annotations xmi:id="_xlTY4BG6Eeqxptn-OOol6g" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_HA1e8RBeEeqGYoBEYurJJg" origin="_HA034BBeEeqGYoBEYurJJg" image="_HA1e8BBeEeqGYoBEYurJJg"/>
+ <mappings xmi:id="_H0ABQBBeEeqGYoBEYurJJg" origin="_Hz_aMBBeEeqGYoBEYurJJg" image="_Hz_aMRBeEeqGYoBEYurJJg"/>
+ <mappings xmi:id="_pOe34BG6Eeqxptn-OOol6g" origin="_pOdpwBG6Eeqxptn-OOol6g" image="_pOeQ0BG6Eeqxptn-OOol6g"/>
+ <mappings xmi:id="_wMfy4RG6Eeqxptn-OOol6g" origin="_wMfL0BG6Eeqxptn-OOol6g" image="_wMfy4BG6Eeqxptn-OOol6g"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_0rWAkCTxEeqQuPO741JcQw" name="create1">
+ <annotations xmi:id="_0rWAkSTxEeqQuPO741JcQw" key="featureConstraint" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_0rWAkiTxEeqQuPO741JcQw" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_0rWAkyTxEeqQuPO741JcQw" key="features" value="M, F"/>
+ <lhs xmi:id="_0rWAlCTxEeqQuPO741JcQw" name="Lhs">
+ <nodes xmi:id="_0rWAlSTxEeqQuPO741JcQw" outgoing="_0rWAnSTxEeqQuPO741JcQw _0rWAnyTxEeqQuPO741JcQw _0rWAoSTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAliTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_0rWAlyTxEeqQuPO741JcQw" incoming="_0rWAnSTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAmCTxEeqQuPO741JcQw" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_0rWAmSTxEeqQuPO741JcQw" incoming="_0rWAnyTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAmiTxEeqQuPO741JcQw" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_0rWAmyTxEeqQuPO741JcQw" incoming="_0rWAoSTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAnCTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_0rWAnSTxEeqQuPO741JcQw" source="_0rWAlSTxEeqQuPO741JcQw" target="_0rWAlyTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAniTxEeqQuPO741JcQw" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_0rWAnyTxEeqQuPO741JcQw" source="_0rWAlSTxEeqQuPO741JcQw" target="_0rWAmSTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAoCTxEeqQuPO741JcQw" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_0rWAoSTxEeqQuPO741JcQw" source="_0rWAlSTxEeqQuPO741JcQw" target="_0rWAmyTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAoiTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_0rWAoyTxEeqQuPO741JcQw" name="Rhs">
+ <nodes xmi:id="_0rWApCTxEeqQuPO741JcQw" outgoing="_0rWArCTxEeqQuPO741JcQw _0rWAriTxEeqQuPO741JcQw _0rWAsCTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWApSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_0rWApiTxEeqQuPO741JcQw" incoming="_0rWArCTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWApyTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_0rWAqCTxEeqQuPO741JcQw" incoming="_0rWAriTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAqSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_0rWAqiTxEeqQuPO741JcQw" incoming="_0rWAsCTxEeqQuPO741JcQw" outgoing="_akKm4CTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_0rWAqyTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_7tIoUCTxEeqQuPO741JcQw" incoming="_akKm4CTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_7tMSsCTxEeqQuPO741JcQw" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Annotation"/>
+ </nodes>
+ <edges xmi:id="_0rWArCTxEeqQuPO741JcQw" source="_0rWApCTxEeqQuPO741JcQw" target="_0rWApiTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWArSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_0rWAriTxEeqQuPO741JcQw" source="_0rWApCTxEeqQuPO741JcQw" target="_0rWAqCTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAryTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_0rWAsCTxEeqQuPO741JcQw" source="_0rWApCTxEeqQuPO741JcQw" target="_0rWAqiTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAsSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_akKm4CTyEeqmvcN2WI4rvQ" source="_0rWAqiTxEeqQuPO741JcQw" target="_7tIoUCTxEeqQuPO741JcQw">
+ <annotations xmi:id="_akPfYCTyEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Method/annotation"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_0rWAsiTxEeqQuPO741JcQw" origin="_0rWAlSTxEeqQuPO741JcQw" image="_0rWApCTxEeqQuPO741JcQw"/>
+ <mappings xmi:id="_0rWAsyTxEeqQuPO741JcQw" origin="_0rWAlyTxEeqQuPO741JcQw" image="_0rWApiTxEeqQuPO741JcQw"/>
+ <mappings xmi:id="_0rWAtCTxEeqQuPO741JcQw" origin="_0rWAmSTxEeqQuPO741JcQw" image="_0rWAqCTxEeqQuPO741JcQw"/>
+ <mappings xmi:id="_0rWAtSTxEeqQuPO741JcQw" origin="_0rWAmyTxEeqQuPO741JcQw" image="_0rWAqiTxEeqQuPO741JcQw"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_52y8UCTyEeqmvcN2WI4rvQ" name="create2">
+ <annotations xmi:id="_52y8USTyEeqmvcN2WI4rvQ" key="featureConstraint" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_52y8UiTyEeqmvcN2WI4rvQ" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_52y8UyTyEeqmvcN2WI4rvQ" key="features" value="M, F"/>
+ <lhs xmi:id="_52y8VCTyEeqmvcN2WI4rvQ" name="Lhs">
+ <nodes xmi:id="_52y8VSTyEeqmvcN2WI4rvQ" outgoing="_52y8XSTyEeqmvcN2WI4rvQ _52y8XyTyEeqmvcN2WI4rvQ _52y8YSTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8ViTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_52y8VyTyEeqmvcN2WI4rvQ" incoming="_52y8XSTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8WCTyEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_52y8WSTyEeqmvcN2WI4rvQ" incoming="_52y8XyTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8WiTyEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_52y8WyTyEeqmvcN2WI4rvQ" incoming="_52y8YSTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8XCTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_52y8XSTyEeqmvcN2WI4rvQ" source="_52y8VSTyEeqmvcN2WI4rvQ" target="_52y8VyTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8XiTyEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_52y8XyTyEeqmvcN2WI4rvQ" source="_52y8VSTyEeqmvcN2WI4rvQ" target="_52y8WSTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8YCTyEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_52y8YSTyEeqmvcN2WI4rvQ" source="_52y8VSTyEeqmvcN2WI4rvQ" target="_52y8WyTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8YiTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_52y8YyTyEeqmvcN2WI4rvQ" name="Rhs">
+ <nodes xmi:id="_52y8ZCTyEeqmvcN2WI4rvQ" outgoing="_52y8biTyEeqmvcN2WI4rvQ _52y8cCTyEeqmvcN2WI4rvQ _52y8ciTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8ZSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_52y8ZiTyEeqmvcN2WI4rvQ" incoming="_52y8biTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8ZyTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_52y8aCTyEeqmvcN2WI4rvQ" incoming="_52y8cCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8aSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_52y8aiTyEeqmvcN2WI4rvQ" incoming="_52y8ciTyEeqmvcN2WI4rvQ" outgoing="_52y8dCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8ayTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_52y8bCTyEeqmvcN2WI4rvQ" incoming="_52y8dCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8bSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Annotation"/>
+ </nodes>
+ <edges xmi:id="_52y8biTyEeqmvcN2WI4rvQ" source="_52y8ZCTyEeqmvcN2WI4rvQ" target="_52y8ZiTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8byTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_52y8cCTyEeqmvcN2WI4rvQ" source="_52y8ZCTyEeqmvcN2WI4rvQ" target="_52y8aCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8cSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_52y8ciTyEeqmvcN2WI4rvQ" source="_52y8ZCTyEeqmvcN2WI4rvQ" target="_52y8aiTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8cyTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_52y8dCTyEeqmvcN2WI4rvQ" source="_52y8aiTyEeqmvcN2WI4rvQ" target="_52y8bCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8dSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method/annotation"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_52y8diTyEeqmvcN2WI4rvQ" origin="_52y8VSTyEeqmvcN2WI4rvQ" image="_52y8ZCTyEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_52y8dyTyEeqmvcN2WI4rvQ" origin="_52y8VyTyEeqmvcN2WI4rvQ" image="_52y8ZiTyEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_52y8eCTyEeqmvcN2WI4rvQ" origin="_52y8WSTyEeqmvcN2WI4rvQ" image="_52y8aCTyEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_52y8eSTyEeqmvcN2WI4rvQ" origin="_52y8WyTyEeqmvcN2WI4rvQ" image="_52y8aiTyEeqmvcN2WI4rvQ"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_SrasgCTzEeqmvcN2WI4rvQ" name="delete1">
+ <annotations xmi:id="_SrasgSTzEeqmvcN2WI4rvQ" key="featureConstraint" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_SrasgiTzEeqmvcN2WI4rvQ" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_SrasgyTzEeqmvcN2WI4rvQ" key="features" value="M, F"/>
+ <lhs xmi:id="_SrashCTzEeqmvcN2WI4rvQ" name="Lhs">
+ <nodes xmi:id="_SrashSTzEeqmvcN2WI4rvQ" outgoing="_SrasjSTzEeqmvcN2WI4rvQ _SrasjyTzEeqmvcN2WI4rvQ _SraskSTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrashiTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_SrashyTzEeqmvcN2WI4rvQ" incoming="_SrasjSTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasiCTzEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_SrasiSTzEeqmvcN2WI4rvQ" incoming="_SrasjyTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasiiTzEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_SrasiyTzEeqmvcN2WI4rvQ" incoming="_SraskSTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasjCTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_SrasjSTzEeqmvcN2WI4rvQ" source="_SrashSTzEeqmvcN2WI4rvQ" target="_SrashyTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasjiTzEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_SrasjyTzEeqmvcN2WI4rvQ" source="_SrashSTzEeqmvcN2WI4rvQ" target="_SrasiSTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SraskCTzEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_SraskSTzEeqmvcN2WI4rvQ" source="_SrashSTzEeqmvcN2WI4rvQ" target="_SrasiyTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SraskiTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_SraskyTzEeqmvcN2WI4rvQ" name="Rhs">
+ <nodes xmi:id="_SraslCTzEeqmvcN2WI4rvQ" outgoing="_SrasnCTzEeqmvcN2WI4rvQ _SrasoCTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SraslSTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_SrasliTzEeqmvcN2WI4rvQ" incoming="_SrasnCTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SraslyTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_SrasmiTzEeqmvcN2WI4rvQ" incoming="_SrasoCTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasmyTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_SrasnCTzEeqmvcN2WI4rvQ" source="_SraslCTzEeqmvcN2WI4rvQ" target="_SrasliTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasnSTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_SrasoCTzEeqmvcN2WI4rvQ" source="_SraslCTzEeqmvcN2WI4rvQ" target="_SrasmiTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasoSTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_SrasoiTzEeqmvcN2WI4rvQ" origin="_SrashSTzEeqmvcN2WI4rvQ" image="_SraslCTzEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_SrasoyTzEeqmvcN2WI4rvQ" origin="_SrashyTzEeqmvcN2WI4rvQ" image="_SrasliTzEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_SraspSTzEeqmvcN2WI4rvQ" origin="_SrasiyTzEeqmvcN2WI4rvQ" image="_SrasmiTzEeqmvcN2WI4rvQ"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_Z6vIACT1EeqBU_anwUtFuQ" name="delete2">
+ <annotations xmi:id="_Z6vIAST1EeqBU_anwUtFuQ" key="featureConstraint" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_Z6vIAiT1EeqBU_anwUtFuQ" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_Z6vIAyT1EeqBU_anwUtFuQ" key="features" value="M, F"/>
+ <lhs xmi:id="_Z6vIBCT1EeqBU_anwUtFuQ" name="Lhs">
+ <nodes xmi:id="_Z6vIBST1EeqBU_anwUtFuQ" outgoing="_Z6vIDST1EeqBU_anwUtFuQ _Z6vIDyT1EeqBU_anwUtFuQ _Z6vIEST1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIBiT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Z6vIByT1EeqBU_anwUtFuQ" incoming="_Z6vIDST1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vICCT1EeqBU_anwUtFuQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_Z6vICST1EeqBU_anwUtFuQ" incoming="_Z6vIDyT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vICiT1EeqBU_anwUtFuQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_Z6vICyT1EeqBU_anwUtFuQ" incoming="_Z6vIEST1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIDCT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_Z6vIDST1EeqBU_anwUtFuQ" source="_Z6vIBST1EeqBU_anwUtFuQ" target="_Z6vIByT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIDiT1EeqBU_anwUtFuQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_Z6vIDyT1EeqBU_anwUtFuQ" source="_Z6vIBST1EeqBU_anwUtFuQ" target="_Z6vICST1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIECT1EeqBU_anwUtFuQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_Z6vIEST1EeqBU_anwUtFuQ" source="_Z6vIBST1EeqBU_anwUtFuQ" target="_Z6vICyT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIEiT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_Z6vIEyT1EeqBU_anwUtFuQ" name="Rhs">
+ <nodes xmi:id="_Z6vIFCT1EeqBU_anwUtFuQ" outgoing="_Z6vIGiT1EeqBU_anwUtFuQ _ggCBAyT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIFST1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Z6vIFiT1EeqBU_anwUtFuQ" incoming="_Z6vIGiT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIFyT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_ggCBACT1EeqBU_anwUtFuQ" incoming="_ggCBAyT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_ggCBAST1EeqBU_anwUtFuQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <edges xmi:id="_Z6vIGiT1EeqBU_anwUtFuQ" source="_Z6vIFCT1EeqBU_anwUtFuQ" target="_Z6vIFiT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIGyT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_ggCBAyT1EeqBU_anwUtFuQ" source="_Z6vIFCT1EeqBU_anwUtFuQ" target="_ggCBACT1EeqBU_anwUtFuQ">
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_Z6vIHiT1EeqBU_anwUtFuQ" origin="_Z6vIBST1EeqBU_anwUtFuQ" image="_Z6vIFCT1EeqBU_anwUtFuQ"/>
+ <mappings xmi:id="_Z6vIHyT1EeqBU_anwUtFuQ" origin="_Z6vIByT1EeqBU_anwUtFuQ" image="_Z6vIFiT1EeqBU_anwUtFuQ"/>
+ <mappings xmi:id="_ggCBAiT1EeqBU_anwUtFuQ" origin="_Z6vICST1EeqBU_anwUtFuQ" image="_ggCBACT1EeqBU_anwUtFuQ"/>
+ </units>
+</henshin:Module>
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/VariabilityAwareMatcher.java b/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/VariabilityAwareMatcher.java
index c6f5d15..a424baf 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/VariabilityAwareMatcher.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/VariabilityAwareMatcher.java
@@ -175,9 +175,9 @@
Set<VariabilityAwareMatch> matches = new HashSet<VariabilityAwareMatch>();
if (!baseMatches.isEmpty()) {
- mo.set(ruleInfo.getFeatureModel(), null, true);
+ mo.set(ruleInfo.getFeatureConstraint(), null, true);
findMatches(rule, mo, baseMatches, matches);
- mo.set(ruleInfo.getFeatureModel(), true, null);
+ mo.set(ruleInfo.getFeatureConstraint(), true, null);
}
return matches;
@@ -298,12 +298,12 @@
Map<String, Sentence> usedExpressions;
Map<Sentence, Set<GraphElement>> pc2elem;
Map<Node, Set<Mapping>> node2Mapping;
- Sentence featureModel;
+ Sentence featureConstraint;
Sentence injectiveMatching;
public RuleInfo(Rule rule) {
this.rule = VariabilityFactory.INSTANCE.createVariabilityRule(rule);
- this.featureModel = FeatureExpression.getExpr(this.rule.getFeatureModel());
+ this.featureConstraint = FeatureExpression.getExpr(this.rule.getFeatureConstraint());
String injective = this.rule.getInjectiveMatchingPresenceCondition();
if (injective == null)
injective = rule.isInjectiveMatching() + "";
@@ -314,7 +314,7 @@
public RuleInfo(VariabilityRule rule) {
this.rule = rule;
- this.featureModel = FeatureExpression.getExpr(this.rule.getFeatureModel());
+ this.featureConstraint = FeatureExpression.getExpr(this.rule.getFeatureConstraint());
String injective = this.rule.getInjectiveMatchingPresenceCondition();
if (injective == null)
injective = rule.isInjectiveMatching() + "";
@@ -331,8 +331,8 @@
return usedExpressions;
}
- public Sentence getFeatureModel() {
- return featureModel;
+ public Sentence getFeatureConstraint() {
+ return featureConstraint;
}
public void populateMaps() {
@@ -373,9 +373,9 @@
}
}
- if (featureModel != null && !featureModel.equals("")
- && !pc2elem.containsKey(featureModel)) {
- pc2elem.put(featureModel, new HashSet<GraphElement>());
+ if (featureConstraint != null && !featureConstraint.equals("")
+ && !pc2elem.containsKey(featureConstraint)) {
+ pc2elem.put(featureConstraint, new HashSet<GraphElement>());
}
}
@@ -407,7 +407,7 @@
for (Sentence expr : conditions) {
info.put(expr, null);
}
- assumedTrue.add(ruleInfo.getFeatureModel());
+ assumedTrue.add(ruleInfo.getFeatureConstraint());
initiallyTrue.forEach(f -> assumedTrue.add(FeatureExpression.getExpr(f)));
initiallyFalse.forEach(f -> assumedFalse.add(FeatureExpression.getExpr(f)));
neutrals.addAll(conditions);
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/util/RuleUtil.java b/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/util/RuleUtil.java
index 41bdd0e..aa6debf 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/util/RuleUtil.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/util/RuleUtil.java
@@ -55,7 +55,7 @@
public static boolean isVarRule(Unit unit) {
if (unit instanceof Rule) {
- if (VariabilityFactory.INSTANCE.createVariabilityRule((Rule) unit).getFeatureModel() != null) {
+ if (VariabilityFactory.INSTANCE.createVariabilityRule((Rule) unit).getFeatureConstraint() != null) {
return true;
}
}
@@ -70,7 +70,7 @@
List<String> features = varRule.getFeatures();
Stream<PropositionSymbol> fm = SymbolCollector
- .getSymbolsFrom(FeatureExpression.getExpr(varRule.getFeatureModel())).parallelStream();
+ .getSymbolsFrom(FeatureExpression.getExpr(varRule.getFeatureConstraint())).parallelStream();
Stream<PropositionSymbol> symbols = varRule.getAnnotations().parallelStream()
.filter(annot -> VariabilityConstants.PRESENCE_CONDITION.equals(annot.getKey()))
.flatMap(annot -> SymbolCollector.getSymbolsFrom(FeatureExpression.getExpr(annot.getValue()))
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/wrapper/VariabilityConstants.java b/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/wrapper/VariabilityConstants.java
index 993a41d..94f8c7b 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/wrapper/VariabilityConstants.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/wrapper/VariabilityConstants.java
@@ -8,7 +8,7 @@
*/
public interface VariabilityConstants {
public String PRESENCE_CONDITION = "presenceCondition";
- public String FEATURE_MODEL = "featureModel";
+ public String FEATURE_CONSTRAINT = "featureConstraint";
public String INJECTIVE_MATCHING_PC = "injectiveMatchingPresenceCondition";
public String FEATURES = "features";
}
diff --git a/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/wrapper/VariabilityRule.java b/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/wrapper/VariabilityRule.java
index 8332169..082b160 100644
--- a/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/wrapper/VariabilityRule.java
+++ b/plugins/variability/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/wrapper/VariabilityRule.java
@@ -50,7 +50,7 @@
*/
public class VariabilityRule extends EObjectImpl implements Rule {
final Rule rule;
- final Annotation featureModel;
+ final Annotation featureConstraint;
final Annotation injectiveMatchingPresenceCondition;
final Annotation features;
@@ -65,7 +65,7 @@
while (it.hasNext()) {
Annotation anno = it.next();
String key = anno.getKey();
- if (key.equals(VariabilityConstants.FEATURE_MODEL)) {
+ if (key.equals(VariabilityConstants.FEATURE_CONSTRAINT)) {
featModel = anno;
} else if (key.equals(VariabilityConstants.INJECTIVE_MATCHING_PC)) {
injMatPreCon = anno;
@@ -80,9 +80,9 @@
if(featModel != null) {
result[0] = featModel;
} else if (transactional) {
- result[0] = VariabilityTransactionHelper.addAnnotation(rule, VariabilityConstants.FEATURE_MODEL, "");
+ result[0] = VariabilityTransactionHelper.addAnnotation(rule, VariabilityConstants.FEATURE_CONSTRAINT, "");
} else {
- result[0] = VariabilityHelper.addAnnotation(rule, VariabilityConstants.FEATURE_MODEL, "");
+ result[0] = VariabilityHelper.addAnnotation(rule, VariabilityConstants.FEATURE_CONSTRAINT, "");
}
if(injMatPreCon != null) {
@@ -143,7 +143,7 @@
VariabilityRule(Rule rule, boolean transactional) {
this.rule = rule;
Annotation[] annos = addVariabilityToRule(rule, transactional);
- featureModel = annos[0];
+ featureConstraint = annos[0];
injectiveMatchingPresenceCondition = annos[1];
features = annos[2];
}
@@ -153,17 +153,17 @@
*
* @return the feature model of this Rule.
*/
- public String getFeatureModel() {
- return featureModel.getValue();
+ public String getFeatureConstraint() {
+ return featureConstraint.getValue();
}
/**
* Sets this Rule's feature model to the given model.
*
- * @param featureModelString the feature model to be set for this Rule.
+ * @param featureConstraintString the feature model to be set for this Rule.
*/
- public void setFeatureModel(String featureModelString) {
- featureModel.setValue(featureModelString);
+ public void setFeatureConstraint(String featureConstraintString) {
+ featureConstraint.setValue(featureConstraintString);
// TODO: Update list of features
}
@@ -258,7 +258,7 @@
features.setValue(String.join(",", featureList));
}
- String oldFeatureModel = "";
+ String oldFeatureConstraint = "";
String oldFeatures = "";
List<String> missingFeatures = new ArrayList<String>();;
@@ -273,8 +273,8 @@
}
private void calculateMissingFeatureNames() {
- String currentModel = getFeatureModel();
- if (!currentModel.trim().equals(oldFeatureModel) || !oldFeatures.equals(features.getValue())) {
+ String currentModel = getFeatureConstraint();
+ if (!currentModel.trim().equals(oldFeatureConstraint) || !oldFeatures.equals(features.getValue())) {
Sentence sentence = FeatureExpression.getExpr(currentModel);
missingFeatures.clear();
Set<PropositionSymbol> symbols = SymbolCollector.getSymbolsFrom(sentence);
@@ -285,7 +285,7 @@
missingFeatures.add(symbolName);
}
}
- oldFeatureModel = currentModel.trim();
+ oldFeatureConstraint = currentModel.trim();
oldFeatures = features.getValue();
}
}