diff options
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.java | 44 |
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 @@ | |||
1 | package tools.refinery.store.query.literal; | ||
2 | |||
3 | import tools.refinery.store.query.equality.LiteralEqualityHelper; | ||
4 | import tools.refinery.store.query.substitution.Substitution; | ||
5 | import tools.refinery.store.query.term.DataVariable; | ||
6 | import tools.refinery.store.query.term.Term; | ||
7 | import tools.refinery.store.query.term.Variable; | ||
8 | |||
9 | import java.util.Set; | ||
10 | |||
11 | public 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 | } | ||