aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-semantics/src
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2023-11-19 14:58:55 +0100
committerLibravatar GitHub <noreply@github.com>2023-11-19 14:58:55 +0100
commitdf0f7cbf05558ce8691759256caa64ab01dd5d9c (patch)
tree0a842960e27ad25d458c18f7bd9f8b4bf5b89b6c /subprojects/language-semantics/src
parentbuild: prepare for Maven publication (diff)
parentfeat(langauge): validate exists and equals (diff)
downloadrefinery-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')
-rw-r--r--subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java8
-rw-r--r--subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/ModelGenerationTest.java6
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()