From 7e1f729fdae499e63f9bcd8c25bc69e2f72d0fc6 Mon Sep 17 00:00:00 2001
From: Andreas Bayha <bayha@fortiss.org>
Date: Tue, 25 Apr 2023 17:23:49 +0200
Subject: [PATCH] Variability: Refactored constraints for product-line analysis

Added a base class and several refactorings to pl constraints.

Issue-ref: 4240
Issue-URL: af3#4240

Signed-off-by: Andreas Bayha <bayha@fortiss.org>
---
 .../analysis/ProductLineBaseAnalysis.java         |  8 ++++----
 .../analysis/ProductLineBaseTranslation.java      | 15 ++++++++++-----
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/org.fortiss.variability/src/org/fortiss/variability/analysis/ProductLineBaseAnalysis.java b/org.fortiss.variability/src/org/fortiss/variability/analysis/ProductLineBaseAnalysis.java
index ef9785f44..3ccf3d52f 100644
--- a/org.fortiss.variability/src/org/fortiss/variability/analysis/ProductLineBaseAnalysis.java
+++ b/org.fortiss.variability/src/org/fortiss/variability/analysis/ProductLineBaseAnalysis.java
@@ -54,7 +54,7 @@ public class ProductLineBaseAnalysis {
 		this.model = model;
 
 		this.translation = translation;
-		ctx = translation.ctx;
+		ctx = translation.getContext();
 	}
 
 	/**
@@ -162,7 +162,7 @@ public class ProductLineBaseAnalysis {
 			}
 		}
 
-		translation.ctx.close();
+		translation.getContext().close();
 
 		return ret;
 	}
@@ -177,7 +177,7 @@ public class ProductLineBaseAnalysis {
 		if(rawConstraints.size() > 0) {
 			solver.add(rawConstraints.toArray(new BoolExpr[rawConstraints.size()]));
 
-			solver.add(translation.ctx
+			solver.add(translation.getContext()
 					.mkOr(constraintTrackers.toArray(new BoolExpr[constraintTrackers.size()])));
 		}
 		return solver;
@@ -196,7 +196,7 @@ public class ProductLineBaseAnalysis {
 		for(IProductLineConstraint constraint : plConstraints) {
 			Expr[] quantifierValiables = constraint.getQuantifierVariables();
 			EClass[] variableClasses = constraint.getVariablesClasses();
-			BoolExpr[] containmentExprs = constraint.getContainmentExpr();
+			BoolExpr[] containmentExprs = new BoolExpr[0];
 			BoolExpr body = constraint.getBody();
 
 			boolean isForAll = constraint.isForAll();
diff --git a/org.fortiss.variability/src/org/fortiss/variability/analysis/ProductLineBaseTranslation.java b/org.fortiss.variability/src/org/fortiss/variability/analysis/ProductLineBaseTranslation.java
index 56476d967..162c1fa17 100644
--- a/org.fortiss.variability/src/org/fortiss/variability/analysis/ProductLineBaseTranslation.java
+++ b/org.fortiss.variability/src/org/fortiss/variability/analysis/ProductLineBaseTranslation.java
@@ -189,12 +189,12 @@ public class ProductLineBaseTranslation {
 
 		for(EClass sprCls : superTypes) {
 			if(!sprCls.equals(EcorePackage.Literals.EOBJECT)) {
-				allObjects.append(sprCls, model);
-				allSubclasses.append(sprCls, eClass);
+				allObjects.add(sprCls, model);
+				allSubclasses.add(sprCls, eClass);
 			}
 		}
 
-		allObjects.append(eClass, model);
+		allObjects.add(eClass, model);
 
 		for(EObject c : model.eContents()) {
 			collectClassesAndObjectsRecrsively(c);
@@ -607,7 +607,7 @@ public class ProductLineBaseTranslation {
 				FuncDecl funDecl = ctx.mkFuncDecl(funId, eClass2Datatype.get(ec), rangeSort);
 
 				eAttribute2FunDecl.put(ea, ec, funDecl);
-				translatedAttributes.append(ec, ea);
+				translatedAttributes.add(ec, ea);
 				attRefNames2FuncDecl.put(ec, ea.getName(), funDecl);
 			}
 			for(EReference er : ec.getEAllReferences()) {
@@ -642,7 +642,7 @@ public class ProductLineBaseTranslation {
 
 				eReference2Sort.put(er, refSort);
 				eReference2FunDecl.put(er, ec, funDecl);
-				translatedReferences.append(ec, er);
+				translatedReferences.add(ec, er);
 				attRefNames2FuncDecl.put(ec, er.getName(), funDecl);
 			}
 		}
@@ -788,4 +788,9 @@ public class ProductLineBaseTranslation {
 	public void addExcludedClasses(Collection<EClass> clss) {
 		this.excludedClasses.addAll(clss);
 	}
+
+	/** Returns ctx. */
+	public Context getContext() {
+		return ctx;
+	}
 }
-- 
GitLab