Skip to content

Commit 68c519f

Browse files
committed
VariableMap - fix overlapping list/non-list vars
1 parent f178d6f commit 68c519f

1 file changed

Lines changed: 11 additions & 17 deletions

File tree

src/main/java/io/github/syst3ms/skriptparser/variables/VariableMap.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ public class VariableMap {
1616
*/
1717
private static final Comparator<String> NUMERIC_INDEX_COMPARATOR = Comparator.comparingInt(Integer::parseInt);
1818

19-
private final Map<String, Object> map = new HashMap<>(); // Ordering is not important right now
19+
private final Map<String, Object> hashMap = new HashMap<>(); // Ordering is not important right now
20+
private final Map<String, Object> treeMap = new TreeMap<>();
2021

2122
public Map<String, Object> getMap() {
22-
return this.map;
23+
return this.hashMap;
2324
}
2425

2526
private static String[] splitList(String name) {
@@ -37,22 +38,15 @@ private static String[] splitList(String name) {
3738
@SuppressWarnings("unchecked")
3839
public Optional<Object> getVariable(String name) {
3940
if (!name.endsWith("*")) {
40-
return Optional.ofNullable(map.get(name));
41+
return Optional.ofNullable(hashMap.get(name));
4142
} else {
4243
var split = splitList(name);
43-
var current = map;
44+
var current = treeMap;
4445
for (var i = 0; i < split.length; i++) {
4546
var n = split[i];
4647
if (n.equals("*")) {
4748
assert i == split.length - 1;
48-
49-
// We sort the indexes as best as we can
50-
boolean numerical = current.keySet().stream()
51-
.allMatch(val -> val.matches("[1-9][0-9]*"));
52-
var treeMap = new TreeMap<>(numerical ? NUMERIC_INDEX_COMPARATOR : Comparator.<String>naturalOrder());
53-
treeMap.putAll(current);
54-
55-
return Optional.of(treeMap);
49+
return Optional.of(current);
5650
}
5751
var o = current.get(n);
5852
if (o == null) {
@@ -79,13 +73,13 @@ public Optional<Object> getVariable(String name) {
7973
public void setVariable(String name, @Nullable Object value) {
8074
if (!name.endsWith("*")) {
8175
if (value == null) {
82-
map.remove(name);
76+
hashMap.remove(name);
8377
} else {
84-
map.put(name, value);
78+
hashMap.put(name, value);
8579
}
8680
}
8781
var split = splitList(name);
88-
var parent = map;
82+
var parent = treeMap;
8983
for (var i = 0; i < split.length; i++) {
9084
var n = split[i];
9185
var current = parent.get(n);
@@ -147,7 +141,7 @@ public void setVariable(String name, @Nullable Object value) {
147141
* Clears all variables
148142
*/
149143
public void clearVariables() {
150-
map.clear();
144+
hashMap.clear();
151145
}
152146

153147
@SuppressWarnings("unchecked")
@@ -156,7 +150,7 @@ private void deleteFromHashMap(String parent, Map<String, Object> current) {
156150
if (e.getKey() == null) {
157151
continue;
158152
}
159-
map.remove(parent + Variables.LIST_SEPARATOR + e.getKey());
153+
hashMap.remove(parent + Variables.LIST_SEPARATOR + e.getKey());
160154
var val = e.getValue();
161155
if (val instanceof Map) {
162156
deleteFromHashMap(parent + Variables.LIST_SEPARATOR + e.getKey(), (Map<String, Object>) val);

0 commit comments

Comments
 (0)