From 8aea3977b3db58017bd994a30fb5878dfda9191e Mon Sep 17 00:00:00 2001 From: Andreas Bayha <bayha@fortiss.org> Date: Wed, 2 Aug 2023 10:12:10 +0200 Subject: [PATCH] Variability: Fixed issue optimized EMF translation Fixed issue with presence conditions (pc) which were not copied before being used in new pc. Issue-ref: 4240 Issue-URL: https://git.fortiss.org/af3/af3/-/issues/4240 Signed-off-by: Andreas Bayha <bayha@fortiss.org> --- .../analysis/EMFProductLineTranslation.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/org.fortiss.variability/src/org/fortiss/variability/analysis/EMFProductLineTranslation.java b/org.fortiss.variability/src/org/fortiss/variability/analysis/EMFProductLineTranslation.java index 5b055e779..bf2fd8475 100644 --- a/org.fortiss.variability/src/org/fortiss/variability/analysis/EMFProductLineTranslation.java +++ b/org.fortiss.variability/src/org/fortiss/variability/analysis/EMFProductLineTranslation.java @@ -1,6 +1,7 @@ package org.fortiss.variability.analysis; import static java.util.stream.Collectors.toList; +import static org.eclipse.emf.ecore.util.EcoreUtil.copy; import static org.fortiss.variability.model.VariabilityModelElementFactory.createAndPC; import static org.fortiss.variability.util.VariabilityUtilsInternal.getChildrenWithType; @@ -21,6 +22,7 @@ import org.eclipse.emf.ecore.EEnumLiteral; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EcorePackage; +import org.fortiss.tooling.kernel.model.IIdLabeled; import org.fortiss.variability.model.IAlternative; import org.fortiss.variability.model.IOptionalVariationPoint; import org.fortiss.variability.model.features.AbstractAlternativeFeature; @@ -209,18 +211,18 @@ public class EMFProductLineTranslation implements IProductLineTranslation { PresenceConditionTerm pc = getLocalPresenceCondition(model); if(pc == null) { - pc = parentCondition; + pc = copy(parentCondition); } else { if(parentCondition != null) - pc = createAndPC(pc, parentCondition, ""); + pc = createAndPC(copy(pc), copy(parentCondition), ""); } for(EClass cls : translatedClasses) { if(cls.isSuperTypeOf(modelClass)) { - // Only optional objects are translated. - if(pc != null) { - collectEObject(model, cls, pc); - } + // // Only optional objects are translated. + // if(pc != null) { + collectEObject(model, cls, pc); + // } } } @@ -278,7 +280,7 @@ public class EMFProductLineTranslation implements IProductLineTranslation { private void collectEObject(EObject eo, EClass cls, PresenceConditionTerm pc) { class2TranslatedEObjects.add(cls, eo); - collectTranslatedReferences(eo); + // collectTranslatedReferences(eo); object2presenceCondition.put(eo, pc); } -- GitLab