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