aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query/src/main/java/tools/refinery/store/query/literal/AssignLiteral.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-query/src/main/java/tools/refinery/store/query/literal/AssignLiteral.java')
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/literal/AssignLiteral.java44
1 files changed, 44 insertions, 0 deletions
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/literal/AssignLiteral.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/literal/AssignLiteral.java
new file mode 100644
index 00000000..52ac42d7
--- /dev/null
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/literal/AssignLiteral.java
@@ -0,0 +1,44 @@
1package tools.refinery.store.query.literal;
2
3import tools.refinery.store.query.equality.LiteralEqualityHelper;
4import tools.refinery.store.query.substitution.Substitution;
5import tools.refinery.store.query.term.DataVariable;
6import tools.refinery.store.query.term.Term;
7import tools.refinery.store.query.term.Variable;
8
9import java.util.Set;
10
11public record AssignLiteral<T>(DataVariable<T> variable, Term<T> term) implements Literal {
12 public AssignLiteral {
13 if (!term.getType().equals(variable.getType())) {
14 throw new IllegalArgumentException("Term %s must be of type %s, got %s instead".formatted(
15 term, variable.getType().getName(), term.getType().getName()));
16 }
17 }
18
19 @Override
20 public Set<Variable> getBoundVariables() {
21 return Set.of(variable);
22 }
23
24 @Override
25 public Literal substitute(Substitution substitution) {
26 return new AssignLiteral<>(substitution.getTypeSafeSubstitute(variable), term.substitute(substitution));
27 }
28
29 @Override
30 public boolean equalsWithSubstitution(LiteralEqualityHelper helper, Literal other) {
31 if (other == null || getClass() != other.getClass()) {
32 return false;
33 }
34 var otherLetLiteral = (AssignLiteral<?>) other;
35 return helper.variableEqual(variable, otherLetLiteral.variable) && term.equalsWithSubstitution(helper,
36 otherLetLiteral.term);
37 }
38
39
40 @Override
41 public String toString() {
42 return "%s is (%s)".formatted(variable, term);
43 }
44}