aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-02-03 14:11:27 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-02-03 14:11:27 +0100
commit5eab6e9e299f84da9898167568d76394657dee70 (patch)
treef84997f8a488fb5ade22c5decb38c53b943b9edd
parentfix: missing NoSuchElementException (diff)
downloadrefinery-5eab6e9e299f84da9898167568d76394657dee70.tar.gz
refinery-5eab6e9e299f84da9898167568d76394657dee70.tar.zst
refinery-5eab6e9e299f84da9898167568d76394657dee70.zip
refactor: Symbol as record
Makes the intent of the code clearer by explicitly overriding equals and hashCode for by-reference comparison. Also fixes Sonar warning.
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/representation/Symbol.java36
1 files changed, 8 insertions, 28 deletions
diff --git a/subprojects/store/src/main/java/tools/refinery/store/representation/Symbol.java b/subprojects/store/src/main/java/tools/refinery/store/representation/Symbol.java
index 77fae5f4..85ea15f4 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/representation/Symbol.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/representation/Symbol.java
@@ -2,40 +2,20 @@ package tools.refinery.store.representation;
2 2
3import java.util.Objects; 3import java.util.Objects;
4 4
5public final class Symbol<T> implements AnySymbol { 5public record Symbol<T>(String name, int arity, Class<T> valueType, T defaultValue) implements AnySymbol {
6 private final String name; 6 public boolean isDefaultValue(T value) {
7 private final int arity; 7 return Objects.equals(defaultValue, value);
8 private final Class<T> valueType;
9 private final T defaultValue;
10
11 public Symbol(String name, int arity, Class<T> valueType, T defaultValue) {
12 this.name = name;
13 this.arity = arity;
14 this.valueType = valueType;
15 this.defaultValue = defaultValue;
16 }
17
18 @Override
19 public String name() {
20 return name;
21 } 8 }
22 9
23 @Override 10 @Override
24 public int arity() { 11 public boolean equals(Object o) {
25 return arity; 12 return this == o;
26 } 13 }
27 14
28 @Override 15 @Override
29 public Class<T> valueType() { 16 public int hashCode() {
30 return valueType; 17 // Compare by identity to make hash table lookups more efficient.
31 } 18 return System.identityHashCode(this);
32
33 public T defaultValue() {
34 return defaultValue;
35 }
36
37 public boolean isDefaultValue(T value) {
38 return Objects.equals(defaultValue, value);
39 } 19 }
40 20
41 @Override 21 @Override