Skip to content

Commit 2cbac22

Browse files
authored
Merge branch 'issue-32' into fix/long-constraint-stack-overflow
2 parents 7710f1e + 3dcb9c5 commit 2cbac22

2 files changed

Lines changed: 27 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: 18 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.*;
@@ -42,10 +45,16 @@ public class UVLModelFactory {
4245

4346
private final Map<LanguageLevel, Class<? extends IConversionStrategy>> conversionStrategiesDrop;
4447
private final Map<LanguageLevel, Class<? extends IConversionStrategy>> conversionStrategiesConvert;
48+
private final AbstractUVLElementFactory elementFactory;
4549

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

4852
public UVLModelFactory() {
53+
this(new DefaultUVLElementFactory());
54+
}
55+
56+
public UVLModelFactory(AbstractUVLElementFactory elementFactory) {
57+
this.elementFactory = elementFactory;
4958
this.conversionStrategiesDrop = new HashMap<>();
5059
this.conversionStrategiesDrop.put(LanguageLevel.GROUP_CARDINALITY, DropGroupCardinality.class);
5160
this.conversionStrategiesDrop.put(LanguageLevel.FEATURE_CARDINALITY, DropFeatureCardinality.class);
@@ -123,8 +132,9 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int
123132
}
124133
});
125134

126-
UVLListener uvlListener = new UVLListener();
135+
UVLListener uvlListener = createUVLListener();
127136
IterativeParseTreeWalker walker = new IterativeParseTreeWalker();
137+
128138
walker.walk(uvlListener, UVLJavaParser.constraintLine());
129139

130140
return uvlListener.getConstraint();
@@ -271,6 +281,10 @@ private List<LanguageLevel> getActualLanguageLevelsToRemoveInOrder(FeatureModel
271281
return completeOrderedLevelsToRemove;
272282
}
273283

284+
private UVLListener createUVLListener() {
285+
return new UVLListener(new FeatureModelBuilder(elementFactory));
286+
}
287+
274288
private String getPath(String rootPath, Import referencedImport) {
275289
return rootPath + FileSystems.getDefault().getSeparator() + referencedImport.getNamespace().replace(".", FileSystems.getDefault().getSeparator()) + ".uvl";
276290
}
@@ -300,8 +314,10 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int
300314
});
301315

302316

303-
UVLListener uvlListener = new UVLListener();
317+
318+
UVLListener uvlListener = createUVLListener();
304319
IterativeParseTreeWalker walker = new IterativeParseTreeWalker();
320+
305321
walker.walk(uvlListener, UVLJavaParser.featureModel());
306322
FeatureModel featureModel = null;
307323

0 commit comments

Comments
 (0)