diff options
author | Kristóf Marussy <marussy@mit.bme.hu> | 2023-11-19 14:58:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-19 14:58:55 +0100 |
commit | df0f7cbf05558ce8691759256caa64ab01dd5d9c (patch) | |
tree | 0a842960e27ad25d458c18f7bd9f8b4bf5b89b6c /subprojects/language-semantics/src | |
parent | build: prepare for Maven publication (diff) | |
parent | feat(langauge): validate exists and equals (diff) | |
download | refinery-df0f7cbf05558ce8691759256caa64ab01dd5d9c.tar.gz refinery-df0f7cbf05558ce8691759256caa64ab01dd5d9c.tar.zst refinery-df0f7cbf05558ce8691759256caa64ab01dd5d9c.zip |
Merge pull request #48 from kris7t/validator
Improve content assist and validator
Diffstat (limited to 'subprojects/language-semantics/src')
2 files changed, 8 insertions, 6 deletions
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java index b3c58366..ecaa7e0d 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java | |||
@@ -63,6 +63,8 @@ public class ModelInitializer { | |||
63 | 63 | ||
64 | private final Map<PartialRelation, RelationInfo> partialRelationInfoMap = new HashMap<>(); | 64 | private final Map<PartialRelation, RelationInfo> partialRelationInfoMap = new HashMap<>(); |
65 | 65 | ||
66 | private final Set<PartialRelation> targetTypes = new HashSet<>(); | ||
67 | |||
66 | private final MetamodelBuilder metamodelBuilder = Metamodel.builder(); | 68 | private final MetamodelBuilder metamodelBuilder = Metamodel.builder(); |
67 | 69 | ||
68 | private Metamodel metamodel; | 70 | private Metamodel metamodel; |
@@ -285,6 +287,7 @@ public class ModelInitializer { | |||
285 | var relation = getPartialRelation(referenceDeclaration); | 287 | var relation = getPartialRelation(referenceDeclaration); |
286 | var source = getPartialRelation(classDeclaration); | 288 | var source = getPartialRelation(classDeclaration); |
287 | var target = getPartialRelation(referenceDeclaration.getReferenceType()); | 289 | var target = getPartialRelation(referenceDeclaration.getReferenceType()); |
290 | targetTypes.add(target); | ||
288 | boolean containment = referenceDeclaration.getKind() == ReferenceKind.CONTAINMENT; | 291 | boolean containment = referenceDeclaration.getKind() == ReferenceKind.CONTAINMENT; |
289 | var opposite = referenceDeclaration.getOpposite(); | 292 | var opposite = referenceDeclaration.getOpposite(); |
290 | PartialRelation oppositeRelation = null; | 293 | PartialRelation oppositeRelation = null; |
@@ -473,17 +476,16 @@ public class ModelInitializer { | |||
473 | private void collectPredicateDefinition(PredicateDefinition predicateDefinition, ModelStoreBuilder storeBuilder) { | 476 | private void collectPredicateDefinition(PredicateDefinition predicateDefinition, ModelStoreBuilder storeBuilder) { |
474 | var partialRelation = getPartialRelation(predicateDefinition); | 477 | var partialRelation = getPartialRelation(predicateDefinition); |
475 | var query = toQuery(partialRelation.name(), predicateDefinition); | 478 | var query = toQuery(partialRelation.name(), predicateDefinition); |
476 | boolean mutable; | 479 | boolean mutable = targetTypes.contains(partialRelation); |
477 | TruthValue defaultValue; | 480 | TruthValue defaultValue; |
478 | if (predicateDefinition.isError()) { | 481 | if (predicateDefinition.isError()) { |
479 | mutable = false; | ||
480 | defaultValue = TruthValue.FALSE; | 482 | defaultValue = TruthValue.FALSE; |
481 | } else { | 483 | } else { |
482 | var seed = modelSeed.getSeed(partialRelation); | 484 | var seed = modelSeed.getSeed(partialRelation); |
483 | defaultValue = seed.reducedValue() == TruthValue.FALSE ? TruthValue.FALSE : TruthValue.UNKNOWN; | 485 | defaultValue = seed.reducedValue() == TruthValue.FALSE ? TruthValue.FALSE : TruthValue.UNKNOWN; |
484 | var cursor = seed.getCursor(defaultValue, problemTrace.getNodeTrace().size()); | 486 | var cursor = seed.getCursor(defaultValue, problemTrace.getNodeTrace().size()); |
485 | // The symbol should be mutable if there is at least one non-default entry in the seed. | 487 | // The symbol should be mutable if there is at least one non-default entry in the seed. |
486 | mutable = cursor.move(); | 488 | mutable = mutable || cursor.move(); |
487 | } | 489 | } |
488 | var translator = new PredicateTranslator(partialRelation, query, mutable, defaultValue); | 490 | var translator = new PredicateTranslator(partialRelation, query, mutable, defaultValue); |
489 | storeBuilder.with(translator); | 491 | storeBuilder.with(translator); |
diff --git a/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/ModelGenerationTest.java b/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/ModelGenerationTest.java index 899e3cb3..b4abce81 100644 --- a/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/ModelGenerationTest.java +++ b/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/ModelGenerationTest.java | |||
@@ -77,7 +77,7 @@ class ModelGenerationTest { | |||
77 | % Scope | 77 | % Scope |
78 | scope Post = 5, Person = 5. | 78 | scope Post = 5, Person = 5. |
79 | """); | 79 | """); |
80 | assertThat(parsedProblem.errors(), empty()); | 80 | assertThat(parsedProblem.getResourceErrors(), empty()); |
81 | var problem = parsedProblem.problem(); | 81 | var problem = parsedProblem.problem(); |
82 | 82 | ||
83 | var storeBuilder = ModelStore.builder() | 83 | var storeBuilder = ModelStore.builder() |
@@ -211,7 +211,7 @@ class ModelGenerationTest { | |||
211 | 211 | ||
212 | scope node = 200..210, Region = 10..*, Choice = 1..*, Statechart = 1. | 212 | scope node = 200..210, Region = 10..*, Choice = 1..*, Statechart = 1. |
213 | """); | 213 | """); |
214 | assertThat(parsedProblem.errors(), empty()); | 214 | assertThat(parsedProblem.getResourceErrors(), empty()); |
215 | var problem = parsedProblem.problem(); | 215 | var problem = parsedProblem.problem(); |
216 | 216 | ||
217 | var storeBuilder = ModelStore.builder() | 217 | var storeBuilder = ModelStore.builder() |
@@ -278,7 +278,7 @@ class ModelGenerationTest { | |||
278 | 278 | ||
279 | scope Filesystem += 0, Entry = 100. | 279 | scope Filesystem += 0, Entry = 100. |
280 | """); | 280 | """); |
281 | assertThat(parsedProblem.errors(), empty()); | 281 | assertThat(parsedProblem.getResourceErrors(), empty()); |
282 | var problem = parsedProblem.problem(); | 282 | var problem = parsedProblem.problem(); |
283 | 283 | ||
284 | var storeBuilder = ModelStore.builder() | 284 | var storeBuilder = ModelStore.builder() |