aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-11-20 20:52:17 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-11-22 16:40:03 +0100
commit19d38b03de9af68e6234a2a07ac54c36d73edaa7 (patch)
treef6c402aa3610bdf66fb842e3b6206622eed8a2fd /subprojects/language
parentrefactor(test): WebSocket integ test robustness (diff)
downloadrefinery-19d38b03de9af68e6234a2a07ac54c36d73edaa7.tar.gz
refinery-19d38b03de9af68e6234a2a07ac54c36d73edaa7.tar.zst
refinery-19d38b03de9af68e6234a2a07ac54c36d73edaa7.zip
refactor(language): simplify syntax
Diffstat (limited to 'subprojects/language')
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/Problem.xtext48
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java43
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java8
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/utils/SymbolCollector.java2
-rw-r--r--subprojects/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.java18
-rw-r--r--subprojects/language/src/test/java/tools/refinery/language/tests/formatting2/ProblemFormatterTest.java2
-rw-r--r--subprojects/language/src/test/java/tools/refinery/language/tests/parser/antlr/TransitiveClosureParserTest.java4
-rw-r--r--subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java4
-rw-r--r--subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java6
-rw-r--r--subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java2
10 files changed, 64 insertions, 73 deletions
diff --git a/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext b/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext
index 8b13a693..95a64737 100644
--- a/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext
+++ b/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext
@@ -33,7 +33,8 @@ enum ReferenceKind:
33 REFERENCE="refers" | CONTAINMENT="contains" | CONTAINER="container"; 33 REFERENCE="refers" | CONTAINMENT="contains" | CONTAINER="container";
34 34
35ReferenceDeclaration: 35ReferenceDeclaration:
36 kind=ReferenceKind referenceType=[Relation|QualifiedName] 36 (referenceType=[Relation|NonContainmentQualifiedName] |
37 kind=ReferenceKind referenceType=[Relation|QualifiedName])
37 ("[" multiplicity=Multiplicity "]")? 38 ("[" multiplicity=Multiplicity "]")?
38 name=Identifier 39 name=Identifier
39 ("opposite" opposite=[ReferenceDeclaration|QualifiedName])?; 40 ("opposite" opposite=[ReferenceDeclaration|QualifiedName])?;
@@ -64,7 +65,7 @@ Conjunction:
64 literals+=Expr ("," literals+=Expr)*; 65 literals+=Expr ("," literals+=Expr)*;
65 66
66FunctionDefinition: 67FunctionDefinition:
67 functionType=PrimitiveType name=Identifier 68 "fn" functionType=PrimitiveType name=Identifier
68 "(" (parameters+=Parameter ("," parameters+=Parameter)*)? ")" 69 "(" (parameters+=Parameter ("," parameters+=Parameter)*)? ")"
69 ("=" cases+=Case (";" cases+=Case)*)? 70 ("=" cases+=Case (";" cases+=Case)*)?
70 "."; 71 ".";
@@ -106,7 +107,8 @@ Expr:
106 ComparisonExpr; 107 ComparisonExpr;
107 108
108enum ComparisonOp: 109enum ComparisonOp:
109 LESS="<" | LESS_EQ="<=" | GREATER=">" | GREATER_EQ=">=" | EQ="==" | NOT_EQ="!=" | IN="in"; 110 LESS="<" | LESS_EQ="<=" | GREATER=">" | GREATER_EQ=">=" | EQ="==" | NOT_EQ="!=" |
111 IN="in" | SUBSUMES=":>" | SUBSUMED_BY="<:" | ABS_EQ="===" | ABS_NOT_EQ="!==";
110 112
111ComparisonExpr returns Expr: 113ComparisonExpr returns Expr:
112 LatticeExpr ({ComparisonExpr.left=current} 114 LatticeExpr ({ComparisonExpr.left=current}
@@ -163,7 +165,7 @@ NegationExpr:
163 "!" body=UnaryExpr; 165 "!" body=UnaryExpr;
164 166
165CountExpr: 167CountExpr:
166 "#" body=UnaryExpr; 168 "count" body=UnaryExpr;
167 169
168enum AggregationOp: 170enum AggregationOp:
169 SUM="sum" | PROD="prod" | MIN="min" | MAX="max"; 171 SUM="sum" | PROD="prod" | MIN="min" | MAX="max";
@@ -180,7 +182,7 @@ VariableOrNodeExpr:
180 variableOrNode=[VariableOrNode|QualifiedName]; 182 variableOrNode=[VariableOrNode|QualifiedName];
181 183
182Constant: 184Constant:
183 RealConstant | IntConstant | InfConstant | StringConstant; 185 RealConstant | IntConstant | InfConstant | StringConstant | LogicConstant;
184 186
185IntConstant: 187IntConstant:
186 intValue=INT; 188 intValue=INT;
@@ -194,12 +196,18 @@ InfConstant:
194StringConstant: 196StringConstant:
195 stringValue=STRING; 197 stringValue=STRING;
196 198
199enum LogicValue:
200 TRUE="true" | FALSE="false" | UNKNOWN="unknown" | ERROR="error";
201
202LogicConstant:
203 logicValue=LogicValue;
204
197Assertion: 205Assertion:
198 default?="default"? 206 default?="default"?
199 (relation=[Relation|QualifiedName] 207 (relation=[Relation|QualifiedName]
200 "(" (arguments+=AssertionArgument ("," arguments+=AssertionArgument)*)? ")" 208 "(" (arguments+=AssertionArgument ("," arguments+=AssertionArgument)*)? ")"
201 value=AssertionValue | 209 ":" value=Expr |
202 value=ShortLogicAssertionValue 210 value=ShortLogicConstant
203 relation=[Relation|QualifiedName] 211 relation=[Relation|QualifiedName]
204 "(" (arguments+=AssertionArgument ("," arguments+=AssertionArgument)*)? ")") 212 "(" (arguments+=AssertionArgument ("," arguments+=AssertionArgument)*)? ")")
205 "."; 213 ".";
@@ -213,23 +221,11 @@ NodeAssertionArgument:
213WildcardAssertionArgument: 221WildcardAssertionArgument:
214 {WildcardAssertionArgument} "*"; 222 {WildcardAssertionArgument} "*";
215 223
216AssertionValue:
217 LogicAssertionValue | ExprAssertionValue;
218
219enum LogicValue:
220 TRUE="true" | FALSE="false" | UNKNOWN="unknown" | ERROR="error";
221
222LogicAssertionValue:
223 ":" logicValue=LogicValue;
224
225ExprAssertionValue:
226 (range?="in" | "=") body=Expr;
227
228enum ShortLogicValue returns LogicValue: 224enum ShortLogicValue returns LogicValue:
229 FALSE="!" | UNKNOWN="?"; 225 FALSE="!" | UNKNOWN="?";
230 226
231ShortLogicAssertionValue returns LogicAssertionValue: 227ShortLogicConstant returns LogicConstant:
232 {LogicAssertionValue} logicValue=ShortLogicValue?; 228 {LogicConstant} logicValue=ShortLogicValue?;
233 229
234ScopeDeclaration: 230ScopeDeclaration:
235 "scope" typeScopes+=TypeScope ("," typeScopes+=TypeScope)* "."; 231 "scope" typeScopes+=TypeScope ("," typeScopes+=TypeScope)* ".";
@@ -255,7 +251,7 @@ ExactMultiplicity:
255 exactValue=INT; 251 exactValue=INT;
256 252
257IndividualDeclaration: 253IndividualDeclaration:
258 "individual" nodes+=EnumLiteral ("," nodes+=EnumLiteral)* "."; 254 "indiv" nodes+=EnumLiteral ("," nodes+=EnumLiteral)* ".";
259 255
260UpperBound returns ecore::EInt: 256UpperBound returns ecore::EInt:
261 INT | "*"; 257 INT | "*";
@@ -263,8 +259,14 @@ UpperBound returns ecore::EInt:
263QualifiedName hidden(): 259QualifiedName hidden():
264 Identifier ("::" Identifier)*; 260 Identifier ("::" Identifier)*;
265 261
262NonContainmentQualifiedName hidden():
263 NonContainmentIdentifier ("::" Identifier)*;
264
266Identifier: 265Identifier:
267 ID | "contains" | "contained" | "sum" | "prod" | "min" | "max"; 266 NonContainmentIdentifier | "contains";
267
268NonContainmentIdentifier:
269 ID | "contained" | "sum" | "prod" | "min" | "max";
268 270
269Real returns ecore::EDouble: 271Real returns ecore::EDouble:
270 EXPONENTIAL | INT "." (INT | EXPONENTIAL); 272 EXPONENTIAL | INT "." (INT | EXPONENTIAL);
diff --git a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java
index 46870edb..797535ea 100644
--- a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java
+++ b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java
@@ -3,7 +3,6 @@
3 */ 3 */
4package tools.refinery.language.formatting2; 4package tools.refinery.language.formatting2;
5 5
6import com.google.inject.Inject;
7import org.eclipse.emf.ecore.EObject; 6import org.eclipse.emf.ecore.EObject;
8import org.eclipse.xtext.formatting2.AbstractJavaFormatter; 7import org.eclipse.xtext.formatting2.AbstractJavaFormatter;
9import org.eclipse.xtext.formatting2.IFormattableDocument; 8import org.eclipse.xtext.formatting2.IFormattableDocument;
@@ -11,15 +10,10 @@ import org.eclipse.xtext.formatting2.IHiddenRegionFormatter;
11import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegionsFinder; 10import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegionsFinder;
12import org.eclipse.xtext.formatting2.regionaccess.ISequentialRegion; 11import org.eclipse.xtext.formatting2.regionaccess.ISequentialRegion;
13import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; 12import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
14
15import tools.refinery.language.model.problem.*; 13import tools.refinery.language.model.problem.*;
16import tools.refinery.language.services.ProblemGrammarAccess;
17 14
18@SuppressWarnings("UnstableApiUsage") 15@SuppressWarnings("UnstableApiUsage")
19public class ProblemFormatter extends AbstractJavaFormatter { 16public class ProblemFormatter extends AbstractJavaFormatter {
20 @Inject
21 private ProblemGrammarAccess problemGrammarAccess;
22
23 protected void format(Problem problem, IFormattableDocument doc) { 17 protected void format(Problem problem, IFormattableDocument doc) {
24 doc.prepend(problem, this::noSpace); 18 doc.prepend(problem, this::noSpace);
25 var region = regionFor(problem); 19 var region = regionFor(problem);
@@ -37,31 +31,26 @@ public class ProblemFormatter extends AbstractJavaFormatter {
37 doc.append(region.feature(ProblemPackage.Literals.ASSERTION__DEFAULT), this::oneSpace); 31 doc.append(region.feature(ProblemPackage.Literals.ASSERTION__DEFAULT), this::oneSpace);
38 doc.append(region.feature(ProblemPackage.Literals.ASSERTION__RELATION), this::noSpace); 32 doc.append(region.feature(ProblemPackage.Literals.ASSERTION__RELATION), this::noSpace);
39 formatParenthesizedList(region, doc); 33 formatParenthesizedList(region, doc);
34 for (var argument : assertion.getArguments()) {
35 doc.format(argument);
36 }
37 var colon = region.keyword(":");
38 boolean abbreviated = colon == null;
39 if (!abbreviated) {
40 doc.prepend(colon, this::noSpace);
41 doc.append(colon, this::oneSpace);
42 }
40 var value = assertion.getValue(); 43 var value = assertion.getValue();
41 if (value != null) { 44 if (value != null) {
42 doc.append(value, this::noSpace); 45 var valueRegion = regionForEObject(value);
46 // Avoid clash between noSpace after ASSERTION_DEFAULT and noSpace after the 0-length region
47 // for a true LogicAssertionValue if the abbreviated form of assertion (no : operator) is used.
48 if (abbreviated && valueRegion != null && valueRegion.getLength() > 0) {
49 doc.append(value, this::noSpace);
50 }
43 doc.format(value); 51 doc.format(value);
44 } 52 }
45 doc.prepend(region.keyword("."), this::noSpace); 53 doc.prepend(region.keyword("."), this::noSpace);
46 for (var argument : assertion.getArguments()) {
47 doc.format(argument);
48 }
49 }
50
51 protected void format(LogicAssertionValue assertionValue, IFormattableDocument doc) {
52 var region = regionFor(assertionValue);
53 doc.prepend(region.keyword(":"), this::noSpace);
54 doc.append(region.keyword(":"), this::oneSpace);
55 }
56
57 protected void format(ExprAssertionValue assertionValue, IFormattableDocument doc) {
58 var region = regionFor(assertionValue);
59 doc.surround(region.keyword("="), this::oneSpace);
60 doc.surround(region.keyword("in"), this::oneSpace);
61 var body = assertionValue.getBody();
62 if (body != null) {
63 doc.format(body);
64 }
65 } 54 }
66 55
67 protected void format(ClassDeclaration classDeclaration, IFormattableDocument doc) { 56 protected void format(ClassDeclaration classDeclaration, IFormattableDocument doc) {
@@ -128,7 +117,7 @@ public class ProblemFormatter extends AbstractJavaFormatter {
128 protected void format(IndividualDeclaration individualDeclaration, IFormattableDocument doc) { 117 protected void format(IndividualDeclaration individualDeclaration, IFormattableDocument doc) {
129 surroundNewLines(doc, individualDeclaration, this::singleNewLine); 118 surroundNewLines(doc, individualDeclaration, this::singleNewLine);
130 var region = regionFor(individualDeclaration); 119 var region = regionFor(individualDeclaration);
131 doc.append(region.keyword("individual"), this::oneSpace); 120 doc.append(region.keyword("indiv"), this::oneSpace);
132 formatList(region, ",", doc); 121 formatList(region, ",", doc);
133 doc.prepend(region.keyword("."), this::noSpace); 122 doc.prepend(region.keyword("."), this::noSpace);
134 } 123 }
diff --git a/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java b/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java
index c51a5e28..27ce1521 100644
--- a/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java
+++ b/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java
@@ -5,7 +5,7 @@ import org.eclipse.xtext.serializer.ISerializationContext;
5import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ListTransient; 5import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ListTransient;
6import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient; 6import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient;
7import tools.refinery.language.model.problem.Assertion; 7import tools.refinery.language.model.problem.Assertion;
8import tools.refinery.language.model.problem.LogicAssertionValue; 8import tools.refinery.language.model.problem.LogicConstant;
9import tools.refinery.language.model.problem.LogicValue; 9import tools.refinery.language.model.problem.LogicValue;
10import tools.refinery.language.model.problem.ProblemPackage; 10import tools.refinery.language.model.problem.ProblemPackage;
11import tools.refinery.language.services.ProblemGrammarAccess; 11import tools.refinery.language.services.ProblemGrammarAccess;
@@ -17,8 +17,8 @@ public class PreferShortAssertionsProblemSemanticSequencer extends ProblemSemant
17 @Override 17 @Override
18 protected void sequence_Assertion(ISerializationContext context, Assertion semanticObject) { 18 protected void sequence_Assertion(ISerializationContext context, Assertion semanticObject) {
19 if (semanticObject.isDefault() || 19 if (semanticObject.isDefault() ||
20 !(semanticObject.getValue() instanceof LogicAssertionValue logicAssertionValue) || 20 !(semanticObject.getValue() instanceof LogicConstant logicConstant) ||
21 logicAssertionValue.getLogicValue() == LogicValue.ERROR) { 21 logicConstant.getLogicValue() == LogicValue.ERROR) {
22 super.sequence_Assertion(context, semanticObject); 22 super.sequence_Assertion(context, semanticObject);
23 return; 23 return;
24 } 24 }
@@ -34,7 +34,7 @@ public class PreferShortAssertionsProblemSemanticSequencer extends ProblemSemant
34 } 34 }
35 var feeder = createSequencerFeeder(context, semanticObject); 35 var feeder = createSequencerFeeder(context, semanticObject);
36 var access = grammarAccess.getAssertionAccess(); 36 var access = grammarAccess.getAssertionAccess();
37 feeder.accept(access.getValueShortLogicAssertionValueParserRuleCall_1_1_0_0(), logicAssertionValue); 37 feeder.accept(access.getValueShortLogicConstantParserRuleCall_1_1_0_0(), logicConstant);
38 feeder.accept(access.getRelationRelationQualifiedNameParserRuleCall_1_1_1_0_1(), semanticObject.getRelation()); 38 feeder.accept(access.getRelationRelationQualifiedNameParserRuleCall_1_1_1_0_1(), semanticObject.getRelation());
39 var iterator = semanticObject.getArguments().iterator(); 39 var iterator = semanticObject.getArguments().iterator();
40 if (iterator.hasNext()) { 40 if (iterator.hasNext()) {
diff --git a/subprojects/language/src/main/java/tools/refinery/language/utils/SymbolCollector.java b/subprojects/language/src/main/java/tools/refinery/language/utils/SymbolCollector.java
index 5412f620..65167ed6 100644
--- a/subprojects/language/src/main/java/tools/refinery/language/utils/SymbolCollector.java
+++ b/subprojects/language/src/main/java/tools/refinery/language/utils/SymbolCollector.java
@@ -242,7 +242,7 @@ class SymbolCollector {
242 } 242 }
243 assertion.getArguments().add(argument); 243 assertion.getArguments().add(argument);
244 } 244 }
245 var value = ProblemFactory.eINSTANCE.createLogicAssertionValue(); 245 var value = ProblemFactory.eINSTANCE.createLogicConstant();
246 value.setLogicValue(logicValue); 246 value.setLogicValue(logicValue);
247 assertion.setValue(value); 247 assertion.setValue(value);
248 collectAssertion(assertion); 248 collectAssertion(assertion);
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.java
index e0dee496..58daa365 100644
--- a/subprojects/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.java
+++ b/subprojects/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.java
@@ -24,30 +24,30 @@ class ProblemParsingTest {
24 } 24 }
25 25
26 class Person { 26 class Person {
27 refers Person[0..*] children opposite parent 27 Person[0..*] children opposite parent
28 refers Person[0..1] parent opposite children 28 Person[0..1] parent opposite children
29 int age 29 int age
30 refers TaxStatus taxStatus 30 TaxStatus taxStatus
31 } 31 }
32 32
33 enum TaxStatus { 33 enum TaxStatus {
34 child, student, adult, retired 34 CHILD, STUDENT, ADULT, RETIRED
35 } 35 }
36 36
37 % A child cannot have any dependents. 37 % A child cannot have any dependents.
38 error invalidTaxStatus(Person p) <-> 38 error invalidTaxStatus(Person p) <->
39 taxStatus(p, child), children(p, _q). 39 taxStatus(p, CHILD), children(p, _q).
40 40
41 individual family. 41 indiv family.
42 Family(family). 42 Family(family).
43 members(family, anne): true. 43 members(family, anne): true.
44 members(family, bob). 44 members(family, bob).
45 members(family, ciri). 45 members(family, ciri).
46 children(anne, ciri). 46 children(anne, ciri).
47 ?children(bob, ciri). 47 ?children(bob, ciri).
48 taxStatus(anne, adult). 48 taxStatus(anne, ADULT).
49 age(bob) in 21..35. 49 age(bob): 21..35.
50 age(ciri) = 10. 50 age(ciri): 10.
51 """); 51 """);
52 assertThat(problem.errors(), empty()); 52 assertThat(problem.errors(), empty());
53 } 53 }
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/formatting2/ProblemFormatterTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/formatting2/ProblemFormatterTest.java
index a6e38130..6e0802ca 100644
--- a/subprojects/language/src/test/java/tools/refinery/language/tests/formatting2/ProblemFormatterTest.java
+++ b/subprojects/language/src/test/java/tools/refinery/language/tests/formatting2/ProblemFormatterTest.java
@@ -179,7 +179,7 @@ class ProblemFormatterTest {
179 179
180 @Test 180 @Test
181 void individualDeclarationTest() { 181 void individualDeclarationTest() {
182 testFormatter(" individual a , b . ", "individual a, b.\n"); 182 testFormatter(" indiv a , b . ", "indiv a, b.\n");
183 } 183 }
184 184
185 @Test 185 @Test
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/parser/antlr/TransitiveClosureParserTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/parser/antlr/TransitiveClosureParserTest.java
index 6e702720..65ceb45f 100644
--- a/subprojects/language/src/test/java/tools/refinery/language/tests/parser/antlr/TransitiveClosureParserTest.java
+++ b/subprojects/language/src/test/java/tools/refinery/language/tests/parser/antlr/TransitiveClosureParserTest.java
@@ -24,8 +24,8 @@ class TransitiveClosureParserTest {
24 @Test 24 @Test
25 void binaryAddOperatorTest() { 25 void binaryAddOperatorTest() {
26 var problem = parseHelper.parse(""" 26 var problem = parseHelper.parse("""
27 int a(). 27 fn int a().
28 int b(). 28 fn int b().
29 pred foo() <-> a() + (b()) > 10. 29 pred foo() <-> a() + (b()) > 10.
30 """); 30 """);
31 assertThat(problem.errors(), empty()); 31 assertThat(problem.errors(), empty());
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java
index 2fd647e5..fa462691 100644
--- a/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java
+++ b/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java
@@ -67,7 +67,7 @@ class NodeScopingTest {
67 @MethodSource("individualNodeReferenceSource") 67 @MethodSource("individualNodeReferenceSource")
68 void individualNodeInAssertionTest(String qualifiedNamePrefix, boolean namedProblem) { 68 void individualNodeInAssertionTest(String qualifiedNamePrefix, boolean namedProblem) {
69 var problem = parse(""" 69 var problem = parse("""
70 individual a, b. 70 indiv a, b.
71 pred predicate(node x, node y) <-> node(x). 71 pred predicate(node x, node y) <-> node(x).
72 predicate({PARAM}a, {PARAM}a). 72 predicate({PARAM}a, {PARAM}a).
73 ?predicate({PARAM}a, {PARAM}b). 73 ?predicate({PARAM}a, {PARAM}b).
@@ -84,7 +84,7 @@ class NodeScopingTest {
84 @MethodSource("individualNodeReferenceSource") 84 @MethodSource("individualNodeReferenceSource")
85 void individualNodeInPredicateTest(String qualifiedNamePrefix, boolean namedProblem) { 85 void individualNodeInPredicateTest(String qualifiedNamePrefix, boolean namedProblem) {
86 var problem = parse(""" 86 var problem = parse("""
87 individual b. 87 indiv b.
88 pred predicate(node a) <-> node({PARAM}b). 88 pred predicate(node a) <-> node({PARAM}b).
89 """); 89 """);
90 assertThat(problem.errors(), empty()); 90 assertThat(problem.errors(), empty());
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java
index 5024fb45..4a18704a 100644
--- a/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java
+++ b/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java
@@ -59,7 +59,7 @@ class ProblemSerializerTest {
59 assertSerializedResult(""" 59 assertSerializedResult("""
60 pred foo(node p). 60 pred foo(node p).
61 61
62 individual a. 62 indiv a.
63 """ + serializedAssertion + "\n"); 63 """ + serializedAssertion + "\n");
64 } 64 }
65 65
@@ -82,7 +82,7 @@ class ProblemSerializerTest {
82 assertSerializedResult(""" 82 assertSerializedResult("""
83 pred foo(node p). 83 pred foo(node p).
84 84
85 individual a. 85 indiv a.
86 default foo(a):\040""" + valueAsString + ".\n"); 86 default foo(a):\040""" + valueAsString + ".\n");
87 } 87 }
88 88
@@ -149,7 +149,7 @@ class ProblemSerializerTest {
149 var argument = ProblemFactory.eINSTANCE.createNodeAssertionArgument(); 149 var argument = ProblemFactory.eINSTANCE.createNodeAssertionArgument();
150 argument.setNode(node); 150 argument.setNode(node);
151 assertion.getArguments().add(argument); 151 assertion.getArguments().add(argument);
152 var value = ProblemFactory.eINSTANCE.createLogicAssertionValue(); 152 var value = ProblemFactory.eINSTANCE.createLogicConstant();
153 value.setLogicValue(logicValue); 153 value.setLogicValue(logicValue);
154 assertion.setValue(value); 154 assertion.setValue(value);
155 assertion.setDefault(isDefault); 155 assertion.setDefault(isDefault);
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java
index 66b7f1ab..af6de37f 100644
--- a/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java
+++ b/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java
@@ -45,7 +45,7 @@ class SymbolCollectorTest {
45 @Test 45 @Test
46 void individualNodeTest() { 46 void individualNodeTest() {
47 var problem = parseHelper.parse(""" 47 var problem = parseHelper.parse("""
48 individual a. 48 indiv a.
49 """); 49 """);
50 var collectedSymbols = desugarer.collectSymbols(problem.get()); 50 var collectedSymbols = desugarer.collectSymbols(problem.get());
51 var node = problem.individualNode("a"); 51 var node = problem.individualNode("a");