Skip to content

Commit 8447afb

Browse files
author
Julia Pham
committed
feat: implemented injectable factory method for UVLListener and UVLModelFactory
1 parent ac5f558 commit 8447afb

2 files changed

Lines changed: 26 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: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package de.vill.main;
22

33
import de.vill.model.*;
4+
import de.vill.model.building.AbstractUVLElementFactory;
5+
import de.vill.model.building.FeatureModelBuilder;
46
import de.vill.model.building.VariableReference;
57
import de.vill.model.constraint.*;
68
import de.vill.model.expression.*;
@@ -43,10 +45,16 @@ public class UVLModelFactory {
4345

4446
private final Map<LanguageLevel, Class<? extends IConversionStrategy>> conversionStrategiesDrop;
4547
private final Map<LanguageLevel, Class<? extends IConversionStrategy>> conversionStrategiesConvert;
48+
private final AbstractUVLElementFactory elementFactory;
4649

4750
private final List<ParseError> errorList = new LinkedList<>();
4851

4952
public UVLModelFactory() {
53+
this(null);
54+
}
55+
56+
public UVLModelFactory(AbstractUVLElementFactory elementFactory) {
57+
this.elementFactory = elementFactory;
5058
this.conversionStrategiesDrop = new HashMap<>();
5159
this.conversionStrategiesDrop.put(LanguageLevel.GROUP_CARDINALITY, DropGroupCardinality.class);
5260
this.conversionStrategiesDrop.put(LanguageLevel.FEATURE_CARDINALITY, DropFeatureCardinality.class);
@@ -124,7 +132,7 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int
124132
}
125133
});
126134

127-
UVLListener uvlListener = new UVLListener();
135+
UVLListener uvlListener = createUVLListener();
128136
ParseTreeWalker walker = new ParseTreeWalker();
129137
walker.walk(uvlListener, UVLJavaParser.constraintLine());
130138

@@ -272,6 +280,13 @@ private List<LanguageLevel> getActualLanguageLevelsToRemoveInOrder(FeatureModel
272280
return completeOrderedLevelsToRemove;
273281
}
274282

283+
private UVLListener createUVLListener() {
284+
if (elementFactory != null) {
285+
return new UVLListener(new FeatureModelBuilder(elementFactory));
286+
}
287+
return new UVLListener();
288+
}
289+
275290
private String getPath(String rootPath, Import referencedImport) {
276291
return rootPath + FileSystems.getDefault().getSeparator() + referencedImport.getNamespace().replace(".", FileSystems.getDefault().getSeparator()) + ".uvl";
277292
}
@@ -301,7 +316,7 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int
301316
});
302317

303318

304-
UVLListener uvlListener = new UVLListener();
319+
UVLListener uvlListener = createUVLListener();
305320
ParseTreeWalker walker = new ParseTreeWalker();
306321
walker.walk(uvlListener, UVLJavaParser.featureModel());
307322
FeatureModel featureModel = null;

0 commit comments

Comments
 (0)