From 8447afb9d0d641ac0dba5e7b2b2ed93d9ead509f Mon Sep 17 00:00:00 2001 From: Julia Pham Date: Mon, 6 Apr 2026 23:37:01 +0200 Subject: [PATCH 1/3] feat: implemented injectable factory method for UVLListener and UVLModelFactory --- src/main/java/de/vill/main/UVLListener.java | 10 +++++++++- .../java/de/vill/main/UVLModelFactory.java | 19 +++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/vill/main/UVLListener.java b/src/main/java/de/vill/main/UVLListener.java index b080884..9922c8d 100644 --- a/src/main/java/de/vill/main/UVLListener.java +++ b/src/main/java/de/vill/main/UVLListener.java @@ -49,7 +49,15 @@ import org.antlr.v4.runtime.Token; public class UVLListener extends UVLJavaParserBaseListener { - public FeatureModelBuilder fmBuilder = new FeatureModelBuilder(); + public FeatureModelBuilder fmBuilder; + + public UVLListener() { + this(new FeatureModelBuilder()); + } + + public UVLListener(FeatureModelBuilder fmBuilder) { + this.fmBuilder = fmBuilder; + } private Set importedLanguageLevels = new HashSet<>(Arrays.asList(LanguageLevel.BOOLEAN_LEVEL)); private Stack featureStack = new Stack<>(); private Stack groupStack = new Stack<>(); diff --git a/src/main/java/de/vill/main/UVLModelFactory.java b/src/main/java/de/vill/main/UVLModelFactory.java index c6dd819..4175b84 100644 --- a/src/main/java/de/vill/main/UVLModelFactory.java +++ b/src/main/java/de/vill/main/UVLModelFactory.java @@ -1,6 +1,8 @@ package de.vill.main; import de.vill.model.*; +import de.vill.model.building.AbstractUVLElementFactory; +import de.vill.model.building.FeatureModelBuilder; import de.vill.model.building.VariableReference; import de.vill.model.constraint.*; import de.vill.model.expression.*; @@ -43,10 +45,16 @@ public class UVLModelFactory { private final Map> conversionStrategiesDrop; private final Map> conversionStrategiesConvert; + private final AbstractUVLElementFactory elementFactory; private final List errorList = new LinkedList<>(); public UVLModelFactory() { + this(null); + } + + public UVLModelFactory(AbstractUVLElementFactory elementFactory) { + this.elementFactory = elementFactory; this.conversionStrategiesDrop = new HashMap<>(); this.conversionStrategiesDrop.put(LanguageLevel.GROUP_CARDINALITY, DropGroupCardinality.class); this.conversionStrategiesDrop.put(LanguageLevel.FEATURE_CARDINALITY, DropFeatureCardinality.class); @@ -124,7 +132,7 @@ public void syntaxError(Recognizer recognizer, Object offendingSymbol, int } }); - UVLListener uvlListener = new UVLListener(); + UVLListener uvlListener = createUVLListener(); ParseTreeWalker walker = new ParseTreeWalker(); walker.walk(uvlListener, UVLJavaParser.constraintLine()); @@ -272,6 +280,13 @@ private List getActualLanguageLevelsToRemoveInOrder(FeatureModel return completeOrderedLevelsToRemove; } + private UVLListener createUVLListener() { + if (elementFactory != null) { + return new UVLListener(new FeatureModelBuilder(elementFactory)); + } + return new UVLListener(); + } + private String getPath(String rootPath, Import referencedImport) { return rootPath + FileSystems.getDefault().getSeparator() + referencedImport.getNamespace().replace(".", FileSystems.getDefault().getSeparator()) + ".uvl"; } @@ -301,7 +316,7 @@ public void syntaxError(Recognizer recognizer, Object offendingSymbol, int }); - UVLListener uvlListener = new UVLListener(); + UVLListener uvlListener = createUVLListener(); ParseTreeWalker walker = new ParseTreeWalker(); walker.walk(uvlListener, UVLJavaParser.featureModel()); FeatureModel featureModel = null; From 30e86ac9cd5e095f4f13ed711705970e26a7b09b Mon Sep 17 00:00:00 2001 From: Julia Pham Date: Tue, 7 Apr 2026 13:46:32 +0200 Subject: [PATCH 2/3] fix: Use DefaultUVLElementFactory in constructor instead of null --- src/main/java/de/vill/main/UVLModelFactory.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/vill/main/UVLModelFactory.java b/src/main/java/de/vill/main/UVLModelFactory.java index 4175b84..25dd310 100644 --- a/src/main/java/de/vill/main/UVLModelFactory.java +++ b/src/main/java/de/vill/main/UVLModelFactory.java @@ -2,6 +2,7 @@ import de.vill.model.*; import de.vill.model.building.AbstractUVLElementFactory; +import de.vill.model.building.DefaultUVLElementFactory; import de.vill.model.building.FeatureModelBuilder; import de.vill.model.building.VariableReference; import de.vill.model.constraint.*; @@ -50,7 +51,7 @@ public class UVLModelFactory { private final List errorList = new LinkedList<>(); public UVLModelFactory() { - this(null); + this(new DefaultUVLElementFactory()); } public UVLModelFactory(AbstractUVLElementFactory elementFactory) { From f95d39486a55ae5dcbc1a2f6bb431c966584affd Mon Sep 17 00:00:00 2001 From: Julia Pham Date: Mon, 4 May 2026 22:25:44 +0200 Subject: [PATCH 3/3] fix: removed null check in createUVLListener --- src/main/java/de/vill/main/UVLModelFactory.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/de/vill/main/UVLModelFactory.java b/src/main/java/de/vill/main/UVLModelFactory.java index 25dd310..483e512 100644 --- a/src/main/java/de/vill/main/UVLModelFactory.java +++ b/src/main/java/de/vill/main/UVLModelFactory.java @@ -282,10 +282,7 @@ private List getActualLanguageLevelsToRemoveInOrder(FeatureModel } private UVLListener createUVLListener() { - if (elementFactory != null) { - return new UVLListener(new FeatureModelBuilder(elementFactory)); - } - return new UVLListener(); + return new UVLListener(new FeatureModelBuilder(elementFactory)); } private String getPath(String rootPath, Import referencedImport) {