|
10 | 10 | import org.comroid.api.Polyfill; |
11 | 11 | import org.comroid.api.attr.Aliased; |
12 | 12 | import org.comroid.api.data.seri.adp.JSON; |
13 | | -import org.comroid.api.data.seri.type.ValueType; |
14 | 13 | import org.comroid.api.func.util.Invocable; |
15 | 14 | import org.comroid.api.java.Activator; |
16 | 15 | import org.comroid.api.java.ReflectionHelper; |
|
37 | 36 | import java.util.ArrayList; |
38 | 37 | import java.util.Arrays; |
39 | 38 | import java.util.Collection; |
40 | | -import java.util.Comparator; |
41 | 39 | import java.util.HashSet; |
42 | 40 | import java.util.Map; |
43 | | -import java.util.Objects; |
44 | 41 | import java.util.Optional; |
45 | 42 | import java.util.Set; |
46 | 43 | import java.util.UUID; |
47 | | -import java.util.function.Function; |
48 | 44 | import java.util.stream.Collectors; |
49 | 45 | import java.util.stream.Stream; |
50 | 46 |
|
@@ -188,28 +184,26 @@ public final Stream<AutoFillOption> autoComplete( |
188 | 184 |
|
189 | 185 | validatePermitted(usage, call); |
190 | 186 |
|
191 | | - // sort arguments |
192 | | - var parameters = call.getParameters(); |
193 | | - var paramIndex = new int[]{ 0 }; |
194 | | - |
195 | | - // decide arg handling type |
196 | | - var argStringSource = (hasCapability(CommandCapability.NAMED_ARGS) |
197 | | - ? (Function<String, Stream<org.comroid.commands.node.Parameter>>) key -> parameters.stream() |
198 | | - .filter(p -> p.getName().equals(key)) |
199 | | - : (Function<String, Stream<org.comroid.commands.node.Parameter>>) $ -> parameters.stream() |
200 | | - .sorted(Comparator.comparingInt(org.comroid.commands.node.Parameter::getIndex)) |
201 | | - .skip(paramIndex[0])).andThen(src -> src.map(usage.getArgumentStrings()::get)); |
202 | | - |
203 | | - // parse args |
204 | | - var useArgs = parameters.stream().map(param -> { |
205 | | - var vt = ValueType.of(param.getParam().getType()); |
206 | | - return argStringSource.apply(param.getName()) |
207 | | - .filter(Objects::nonNull) |
208 | | - .findAny() |
209 | | - .map(vt::parse) |
210 | | - .or(() -> usage.getContext().stream().filter(vt.getTargetClass()::isInstance).findAny()) |
211 | | - .orElse(null); |
212 | | - }).toArray(); |
| 187 | + var adapters = call.adaptParameters(); |
| 188 | + var useArgs = new Object[adapters.length]; |
| 189 | + |
| 190 | + for (var i = 0; i < adapters.length; i++) { |
| 191 | + var adapter = adapters[i]; |
| 192 | + var commandParameter = adapter.commandParameter(); |
| 193 | + |
| 194 | + if (commandParameter != null) { |
| 195 | + // parse user argument |
| 196 | + var str = usage.getArgumentStrings().get(commandParameter); |
| 197 | + useArgs[i] = adapter.type().parse(str); |
| 198 | + } else { |
| 199 | + // find contextual argument |
| 200 | + useArgs[i] = usage.getContext() |
| 201 | + .stream() |
| 202 | + .filter(adapter.type().getTargetClass()::isInstance) |
| 203 | + .findAny() |
| 204 | + .orElse(null); |
| 205 | + } |
| 206 | + } |
213 | 207 |
|
214 | 208 | // execute method |
215 | 209 | result = response = call.getCallable().invoke(call.getTarget(), useArgs); |
|
0 commit comments