|
1 | 1 | package de.vill.main; |
2 | 2 |
|
3 | 3 | import de.vill.model.*; |
| 4 | +import de.vill.model.building.AbstractUVLElementFactory; |
| 5 | +import de.vill.model.building.FeatureModelBuilder; |
4 | 6 | import de.vill.model.building.VariableReference; |
5 | 7 | import de.vill.model.constraint.*; |
6 | 8 | import de.vill.model.expression.*; |
@@ -43,10 +45,16 @@ public class UVLModelFactory { |
43 | 45 |
|
44 | 46 | private final Map<LanguageLevel, Class<? extends IConversionStrategy>> conversionStrategiesDrop; |
45 | 47 | private final Map<LanguageLevel, Class<? extends IConversionStrategy>> conversionStrategiesConvert; |
| 48 | + private final AbstractUVLElementFactory elementFactory; |
46 | 49 |
|
47 | 50 | private final List<ParseError> errorList = new LinkedList<>(); |
48 | 51 |
|
49 | 52 | public UVLModelFactory() { |
| 53 | + this(null); |
| 54 | + } |
| 55 | + |
| 56 | + public UVLModelFactory(AbstractUVLElementFactory elementFactory) { |
| 57 | + this.elementFactory = elementFactory; |
50 | 58 | this.conversionStrategiesDrop = new HashMap<>(); |
51 | 59 | this.conversionStrategiesDrop.put(LanguageLevel.GROUP_CARDINALITY, DropGroupCardinality.class); |
52 | 60 | this.conversionStrategiesDrop.put(LanguageLevel.FEATURE_CARDINALITY, DropFeatureCardinality.class); |
@@ -124,7 +132,7 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int |
124 | 132 | } |
125 | 133 | }); |
126 | 134 |
|
127 | | - UVLListener uvlListener = new UVLListener(); |
| 135 | + UVLListener uvlListener = createUVLListener(); |
128 | 136 | ParseTreeWalker walker = new ParseTreeWalker(); |
129 | 137 | walker.walk(uvlListener, UVLJavaParser.constraintLine()); |
130 | 138 |
|
@@ -272,6 +280,13 @@ private List<LanguageLevel> getActualLanguageLevelsToRemoveInOrder(FeatureModel |
272 | 280 | return completeOrderedLevelsToRemove; |
273 | 281 | } |
274 | 282 |
|
| 283 | + private UVLListener createUVLListener() { |
| 284 | + if (elementFactory != null) { |
| 285 | + return new UVLListener(new FeatureModelBuilder(elementFactory)); |
| 286 | + } |
| 287 | + return new UVLListener(); |
| 288 | + } |
| 289 | + |
275 | 290 | private String getPath(String rootPath, Import referencedImport) { |
276 | 291 | return rootPath + FileSystems.getDefault().getSeparator() + referencedImport.getNamespace().replace(".", FileSystems.getDefault().getSeparator()) + ".uvl"; |
277 | 292 | } |
@@ -301,7 +316,7 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int |
301 | 316 | }); |
302 | 317 |
|
303 | 318 |
|
304 | | - UVLListener uvlListener = new UVLListener(); |
| 319 | + UVLListener uvlListener = createUVLListener(); |
305 | 320 | ParseTreeWalker walker = new ParseTreeWalker(); |
306 | 321 | walker.walk(uvlListener, UVLJavaParser.featureModel()); |
307 | 322 | FeatureModel featureModel = null; |
|
0 commit comments