Skip to content

Commit 2ee8841

Browse files
author
Kaleidox
committed
fix InteractionContext not having a parent (-> the calling adapter)
1 parent 8e80c32 commit 2ee8841

4 files changed

Lines changed: 29 additions & 8 deletions

File tree

src/main/java/org/comroid/api/map/MultiValueMap.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import java.util.AbstractMap;
88
import java.util.ArrayList;
99
import java.util.Collection;
10+
import java.util.Collections;
11+
import java.util.HashMap;
1012
import java.util.Map;
1113
import java.util.Optional;
1214
import java.util.Set;
@@ -26,6 +28,12 @@ public MultiValueMap(Map<K, Collection<V>> underlying) {
2628
this.underlying = underlying;
2729
}
2830

31+
public MultiValueMap<K, V> immutableCopy() {
32+
var map = new HashMap<K, Collection<V>>();
33+
for (var entry : underlying.entrySet()) map.put(entry.getKey(), Collections.unmodifiableCollection(entry.getValue()));
34+
return new MultiValueMap<>(Collections.unmodifiableMap(map));
35+
}
36+
2937
@Override
3038
public int size() {
3139
return underlying.values().stream().mapToInt(Collection::size).sum();

src/main/java/org/comroid/interaction/adapter/jda/JdaAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void onEvent(@NonNull GenericEvent generic) {
7171

7272
log.finer("Dispatching command interaction " + event);
7373

74-
var builder = InteractionContext.basic(core, event.getFullCommandName().split("\\s+"));
74+
var builder = InteractionContext.basic(core, event.getFullCommandName().split("\\s+")).parent(this);
7575

7676
try {
7777
initContextVariables(event, builder);

src/main/java/org/comroid/interaction/adapter/stdio/StreamAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void run() {
8080

8181
private InteractionContext createContext(String line) {
8282
var split = line.split("\\s+");
83-
var builder = InteractionContext.basic(core, split);
83+
var builder = InteractionContext.basic(core, split).parent(this);
8484
var node = builder.build().getNode();
8585
var endCall = Arrays.binarySearch(split, node.getInteraction().value());
8686
var args = Arrays.stream(split).skip(endCall + 1).iterator();

src/main/java/org/comroid/interaction/model/InteractionContext.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.comroid.interaction.model;
22

3-
import lombok.Builder;
43
import lombok.Singular;
54
import lombok.Value;
65
import lombok.extern.java.Log;
@@ -16,6 +15,7 @@
1615
import org.comroid.interaction.node.model.ParentNode;
1716

1817
import java.util.Arrays;
18+
import java.util.Collections;
1919
import java.util.HashSet;
2020
import java.util.Map;
2121
import java.util.Objects;
@@ -25,7 +25,6 @@
2525
@Log
2626
@Value
2727
@Child
28-
@Builder
2928
public class InteractionContext extends Component.Base {
3029
public static InteractionContext.Builder basic(InteractionCore core, String... fullCommand) {
3130
var context = builder().core(core);
@@ -63,12 +62,26 @@ public static InteractionContext.Builder basic(InteractionCore core, String... f
6362
return context.definitions(defs);
6463
}
6564

66-
InteractionCore core;
67-
MethodNode node;
68-
@Singular Map<String, Object> values;
69-
@Singular Map<ParameterNode, Object> parameters;
65+
InteractionCore core;
66+
MethodNode node;
67+
Map<String, Object> values;
68+
Map<ParameterNode, Object> parameters;
7069
MultiValueMap<String, Object> definitions;
7170

71+
@lombok.Builder
72+
public InteractionContext(
73+
Object parent, InteractionCore core, MethodNode node, @Singular Map<String, Object> values, @Singular Map<ParameterNode, Object> parameters,
74+
MultiValueMap<String, Object> definitions
75+
) {
76+
super(parent);
77+
78+
this.core = core;
79+
this.node = node;
80+
this.values = Collections.unmodifiableMap(values);
81+
this.parameters = Collections.unmodifiableMap(parameters);
82+
this.definitions = definitions.immutableCopy();
83+
}
84+
7285
@Override
7386
public boolean isSubComponent() {
7487
return true;

0 commit comments

Comments
 (0)