diff options
Diffstat (limited to 'subprojects/store-query/src/main/java/tools/refinery/store/query/term/UnaryTerm.java')
-rw-r--r-- | subprojects/store-query/src/main/java/tools/refinery/store/query/term/UnaryTerm.java | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/term/UnaryTerm.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/term/UnaryTerm.java index a46ebe31..a464ece5 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/term/UnaryTerm.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/term/UnaryTerm.java | |||
@@ -5,13 +5,17 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.query.term; | 6 | package tools.refinery.store.query.term; |
7 | 7 | ||
8 | import tools.refinery.store.query.InvalidQueryException; | ||
8 | import tools.refinery.store.query.equality.LiteralEqualityHelper; | 9 | import tools.refinery.store.query.equality.LiteralEqualityHelper; |
10 | import tools.refinery.store.query.equality.LiteralHashCodeHelper; | ||
9 | import tools.refinery.store.query.substitution.Substitution; | 11 | import tools.refinery.store.query.substitution.Substitution; |
10 | import tools.refinery.store.query.valuation.Valuation; | 12 | import tools.refinery.store.query.valuation.Valuation; |
11 | 13 | ||
12 | import java.util.Objects; | 14 | import java.util.Objects; |
13 | import java.util.Set; | 15 | import java.util.Set; |
14 | 16 | ||
17 | // {@link Object#equals(Object)} is implemented by {@link AbstractTerm}. | ||
18 | @SuppressWarnings("squid:S2160") | ||
15 | public abstract class UnaryTerm<R, T> extends AbstractTerm<R> { | 19 | public abstract class UnaryTerm<R, T> extends AbstractTerm<R> { |
16 | private final Class<T> bodyType; | 20 | private final Class<T> bodyType; |
17 | private final Term<T> body; | 21 | private final Term<T> body; |
@@ -19,7 +23,7 @@ public abstract class UnaryTerm<R, T> extends AbstractTerm<R> { | |||
19 | protected UnaryTerm(Class<R> type, Class<T> bodyType, Term<T> body) { | 23 | protected UnaryTerm(Class<R> type, Class<T> bodyType, Term<T> body) { |
20 | super(type); | 24 | super(type); |
21 | if (!body.getType().equals(bodyType)) { | 25 | if (!body.getType().equals(bodyType)) { |
22 | throw new IllegalArgumentException("Expected body %s to be of type %s, got %s instead".formatted(body, | 26 | throw new InvalidQueryException("Expected body %s to be of type %s, got %s instead".formatted(body, |
23 | bodyType.getName(), body.getType().getName())); | 27 | bodyType.getName(), body.getType().getName())); |
24 | } | 28 | } |
25 | this.bodyType = bodyType; | 29 | this.bodyType = bodyType; |
@@ -52,6 +56,11 @@ public abstract class UnaryTerm<R, T> extends AbstractTerm<R> { | |||
52 | } | 56 | } |
53 | 57 | ||
54 | @Override | 58 | @Override |
59 | public int hashCodeWithSubstitution(LiteralHashCodeHelper helper) { | ||
60 | return Objects.hash(super.hashCodeWithSubstitution(helper), bodyType, body.hashCodeWithSubstitution(helper)); | ||
61 | } | ||
62 | |||
63 | @Override | ||
55 | public Term<R> substitute(Substitution substitution) { | 64 | public Term<R> substitute(Substitution substitution) { |
56 | return doSubstitute(substitution, body.substitute(substitution)); | 65 | return doSubstitute(substitution, body.substitute(substitution)); |
57 | } | 66 | } |
@@ -62,18 +71,4 @@ public abstract class UnaryTerm<R, T> extends AbstractTerm<R> { | |||
62 | public Set<AnyDataVariable> getInputVariables() { | 71 | public Set<AnyDataVariable> getInputVariables() { |
63 | return body.getInputVariables(); | 72 | return body.getInputVariables(); |
64 | } | 73 | } |
65 | |||
66 | @Override | ||
67 | public boolean equals(Object o) { | ||
68 | if (this == o) return true; | ||
69 | if (o == null || getClass() != o.getClass()) return false; | ||
70 | if (!super.equals(o)) return false; | ||
71 | UnaryTerm<?, ?> unaryTerm = (UnaryTerm<?, ?>) o; | ||
72 | return Objects.equals(bodyType, unaryTerm.bodyType) && Objects.equals(body, unaryTerm.body); | ||
73 | } | ||
74 | |||
75 | @Override | ||
76 | public int hashCode() { | ||
77 | return Objects.hash(super.hashCode(), bodyType, body); | ||
78 | } | ||
79 | } | 74 | } |