aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language/src/main
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2024-02-29 16:33:59 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2024-04-07 14:55:46 +0200
commit23b0925f419894cf3f4699fa49dd91fb2ee4f4a5 (patch)
tree0fc5513b8e47b36a4aa822ee6b162a56f861ba1e /subprojects/language/src/main
parentrefactor(language): assignment and cast expression (diff)
downloadrefinery-23b0925f419894cf3f4699fa49dd91fb2ee4f4a5.tar.gz
refinery-23b0925f419894cf3f4699fa49dd91fb2ee4f4a5.tar.zst
refinery-23b0925f419894cf3f4699fa49dd91fb2ee4f4a5.zip
feat(language): validate assignment expressions
Diffstat (limited to 'subprojects/language/src/main')
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java b/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java
index 560f612a..7f45bc20 100644
--- a/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java
+++ b/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java
@@ -63,6 +63,8 @@ public class ProblemValidator extends AbstractProblemValidator {
63 63
64 public static final String UNSUPPORTED_ASSERTION_ISSUE = ISSUE_PREFIX + "UNSUPPORTED_ASSERTION"; 64 public static final String UNSUPPORTED_ASSERTION_ISSUE = ISSUE_PREFIX + "UNSUPPORTED_ASSERTION";
65 65
66 public static final String INVALID_ASSIGNMENT_ISSUE = ISSUE_PREFIX + "INVALID_ASSIGNMENT";
67
66 @Inject 68 @Inject
67 private ReferenceCounter referenceCounter; 69 private ReferenceCounter referenceCounter;
68 70
@@ -493,4 +495,34 @@ public class ProblemValidator extends AbstractProblemValidator {
493 } 495 }
494 } 496 }
495 } 497 }
498
499 @Check
500 private void checkAssignmentExpr(AssignmentExpr assignmentExpr) {
501 var left = assignmentExpr.getLeft();
502 if (left == null) {
503 // Syntactically invalid, so we already emit an error.
504 return;
505 }
506 if (!(left instanceof VariableOrNodeExpr variableOrNodeExpr)) {
507 var message = "Left side of an assignment must be variable.";
508 acceptError(message, assignmentExpr, ProblemPackage.Literals.BINARY_EXPR__LEFT,
509 0, INVALID_ASSIGNMENT_ISSUE);
510 return;
511 }
512 var target = variableOrNodeExpr.getVariableOrNode();
513 if (target == null) {
514 // Syntactically invalid, so we already emit an error.
515 return;
516 }
517 if (target instanceof Parameter) {
518 var message = "Parameters cannot be assigned.";
519 acceptError(message, variableOrNodeExpr, ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE,
520 0, INVALID_ASSIGNMENT_ISSUE);
521 }
522 if (target instanceof Node) {
523 var message = "Nodes cannot be assigned.";
524 acceptError(message, variableOrNodeExpr, ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE,
525 0, INVALID_ASSIGNMENT_ISSUE);
526 }
527 }
496} 528}