Skip to content

Commit 3dcb9c5

Browse files
JuliaCooliaJulia Pham
andauthored
Fixes #9 (#30)
* feat: implemented injectable factory method for UVLListener and UVLModelFactory * fix: Use DefaultUVLElementFactory in constructor instead of null * fix: removed null check in createUVLListener --------- Co-authored-by: Julia Pham <j.pham@tu-braunschweig.de>
1 parent 91c5fc0 commit 3dcb9c5

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

src/main/java/de/vill/main/UVLListener.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,15 @@
4949
import org.antlr.v4.runtime.Token;
5050

5151
public class UVLListener extends UVLJavaParserBaseListener {
52-
public FeatureModelBuilder fmBuilder = new FeatureModelBuilder();
52+
public FeatureModelBuilder fmBuilder;
53+
54+
public UVLListener() {
55+
this(new FeatureModelBuilder());
56+
}
57+
58+
public UVLListener(FeatureModelBuilder fmBuilder) {
59+
this.fmBuilder = fmBuilder;
60+
}
5361
private Set<LanguageLevel> importedLanguageLevels = new HashSet<>(Arrays.asList(LanguageLevel.BOOLEAN_LEVEL));
5462
private Stack<Feature> featureStack = new Stack<>();
5563
private Stack<Group> groupStack = new Stack<>();

src/main/java/de/vill/main/UVLModelFactory.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package de.vill.main;
22

33
import de.vill.model.*;
4+
import de.vill.model.building.AbstractUVLElementFactory;
5+
import de.vill.model.building.DefaultUVLElementFactory;
6+
import de.vill.model.building.FeatureModelBuilder;
47
import de.vill.model.building.VariableReference;
58
import de.vill.model.constraint.*;
69
import de.vill.model.expression.*;
@@ -43,10 +46,16 @@ public class UVLModelFactory {
4346

4447
private final Map<LanguageLevel, Class<? extends IConversionStrategy>> conversionStrategiesDrop;
4548
private final Map<LanguageLevel, Class<? extends IConversionStrategy>> conversionStrategiesConvert;
49+
private final AbstractUVLElementFactory elementFactory;
4650

4751
private final List<ParseError> errorList = new LinkedList<>();
4852

4953
public UVLModelFactory() {
54+
this(new DefaultUVLElementFactory());
55+
}
56+
57+
public UVLModelFactory(AbstractUVLElementFactory elementFactory) {
58+
this.elementFactory = elementFactory;
5059
this.conversionStrategiesDrop = new HashMap<>();
5160
this.conversionStrategiesDrop.put(LanguageLevel.GROUP_CARDINALITY, DropGroupCardinality.class);
5261
this.conversionStrategiesDrop.put(LanguageLevel.FEATURE_CARDINALITY, DropFeatureCardinality.class);
@@ -124,7 +133,7 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int
124133
}
125134
});
126135

127-
UVLListener uvlListener = new UVLListener();
136+
UVLListener uvlListener = createUVLListener();
128137
ParseTreeWalker walker = new ParseTreeWalker();
129138
walker.walk(uvlListener, UVLJavaParser.constraintLine());
130139

@@ -272,6 +281,10 @@ private List<LanguageLevel> getActualLanguageLevelsToRemoveInOrder(FeatureModel
272281
return completeOrderedLevelsToRemove;
273282
}
274283

284+
private UVLListener createUVLListener() {
285+
return new UVLListener(new FeatureModelBuilder(elementFactory));
286+
}
287+
275288
private String getPath(String rootPath, Import referencedImport) {
276289
return rootPath + FileSystems.getDefault().getSeparator() + referencedImport.getNamespace().replace(".", FileSystems.getDefault().getSeparator()) + ".uvl";
277290
}
@@ -301,7 +314,7 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int
301314
});
302315

303316

304-
UVLListener uvlListener = new UVLListener();
317+
UVLListener uvlListener = createUVLListener();
305318
ParseTreeWalker walker = new ParseTreeWalker();
306319
walker.walk(uvlListener, UVLJavaParser.featureModel());
307320
FeatureModel featureModel = null;

0 commit comments

Comments
 (0)