@@ -105,9 +105,8 @@ public final void initialize() {
105105 }
106106
107107 public final Stream <AutoFillOption > autoComplete (
108- CommandResponseHandler source ,
109- @ Doc ("Do not include currentValue" ) String [] fullCommand ,
110- String argName , @ Nullable String currentValue , Object ... extraArgs
108+ CommandResponseHandler source , @ Doc ("Do not include currentValue" ) String [] fullCommand , String argName ,
109+ @ Nullable String currentValue , Object ... extraArgs
111110 ) {
112111 var usage = createUsageBase (source , fullCommand , extraArgs );
113112 return autoComplete (usage , argName , currentValue );
@@ -130,14 +129,11 @@ public final CommandUsage createUsageBase(CommandResponseHandler source, String[
130129 of (this , source ).flatMap (cast (CommandContextProvider .class ))).collect (Collectors .toUnmodifiableSet ());
131130 var expand = expand (it -> contextProviders .stream ().flatMap (ccp -> ccp .expandContext (it )));
132131 of (this , source ).flatMap (expand ).distinct ().forEach (builder ::context );
133- concat (streamChildren (Object .class ), Arrays .stream (context )).flatMap (expand )
134- .distinct ()
135- .forEach (builder ::context );
132+ concat (streamChildren (Object .class ), Arrays .stream (context )).flatMap (expand ).distinct ().forEach (builder ::context );
136133 return builder .build ();
137134 }
138135
139- public final Stream <AutoFillOption > autoComplete (
140- CommandUsage usage , String argName , @ Nullable String currentValue ) {
136+ public final Stream <AutoFillOption > autoComplete (CommandUsage usage , String argName , @ Nullable String currentValue ) {
141137 try {
142138 // initialize usage
143139 usage .advanceFull ();
@@ -162,9 +158,7 @@ public final Stream<AutoFillOption> autoComplete(
162158 return currentCallFirstParam .orElseGet (paramTrace ::peek )
163159 .autoFill (usage , argName , currentValue )
164160 .filter (IAutoFillProvider .stringCheck (currentValue ))
165- .map (seq -> seq instanceof AutoFillOption afo
166- ? afo
167- : new AutoFillOption (seq .toString (), seq .toString ()));
161+ .map (seq -> seq instanceof AutoFillOption afo ? afo : new AutoFillOption (seq .toString (), seq .toString ()));
168162 // else try sub-callables
169163 else return Stream .of (stackTrace .peek ())
170164 .filter (callable -> isPermitted (usage , callable ))
@@ -177,10 +171,7 @@ public final Stream<AutoFillOption> autoComplete(
177171 }
178172 }
179173
180- public final @ Nullable Object execute (
181- CommandResponseHandler source , String [] fullCommand ,
182- @ Nullable Map <String , Object > namedArgs , Object ... extraArgs
183- ) {
174+ public final @ Nullable Object execute (CommandResponseHandler source , String [] fullCommand , @ Nullable Map <String , Object > namedArgs , Object ... extraArgs ) {
184175 var usage = createUsageBase (source , fullCommand , extraArgs );
185176 return execute (usage , namedArgs );
186177 }
@@ -192,7 +183,7 @@ public final Stream<AutoFillOption> autoComplete(
192183 usage .advanceFull ();
193184
194185 Call call = usage .getStackTrace ().peek ().asCall ();
195- if (call == null ) throw new CommandError ("No such command" );
186+ if (call == null ) throw new CommandError ("No such command: " + String . join ( " " , usage . getFullCommand ()) );
196187
197188 validatePermitted (usage , call );
198189
@@ -215,19 +206,14 @@ public final Stream<AutoFillOption> autoComplete(
215206 }
216207 } else {
217208 // find contextual argument
218- useArgs [i ] = usage .getContext ()
219- .stream ()
220- .filter (type .getTargetClass ()::isInstance )
221- .findAny ()
222- .orElse (null );
209+ useArgs [i ] = usage .getContext ().stream ().filter (type .getTargetClass ()::isInstance ).findAny ().orElse (null );
223210 }
224211 }
225212
226213 // execute method
227214 result = response = call .getCallable ().invoke (call .getTarget (), useArgs );
228215 } catch (InvocationTargetException itex ) {
229- if (itex .getCause () instanceof CommandError err )
230- response = err .getResponse () == null ? tryHandleThrowable (usage , err ) : err .getResponse ();
216+ if (itex .getCause () instanceof CommandError err ) response = err .getResponse () == null ? tryHandleThrowable (usage , err ) : err .getResponse ();
231217 else throw itex ;
232218 } catch (CommandError err ) {
233219 response = err .getResponse () == null ? tryHandleThrowable (usage , err ) : err .getResponse ();
@@ -254,8 +240,8 @@ protected Optional<AbstractCommandAdapter> adapter() {
254240 }
255241
256242 private String tryHandleThrowable (CommandUsage usage , Throwable t ) {
257- return Stream .concat (children (CommandErrorHandler .class ).sorted (Comparator .comparing (Object ::getClass ,
258- Order . COMPARATOR )), of ((CommandErrorHandler ) usage .getSource ()))
243+ return Stream .concat (children (CommandErrorHandler .class ).sorted (Comparator .comparing (Object ::getClass , Order . COMPARATOR )),
244+ of ((CommandErrorHandler ) usage .getSource ()))
259245 .sorted (Comparator .comparingInt (handler -> handler instanceof CommandResponseHandler ? 1 : 0 ))
260246 .flatMap (handler -> handler .handleThrowable (usage , t ).stream ())
261247 .findFirst ()
@@ -285,9 +271,7 @@ private boolean isPermitted(CommandUsage usage, Callable callable) {
285271 }
286272
287273 private void validatePermitted (CommandUsage usage , Callable callable ) {
288- if (!isPermitted (usage , callable ))
289- throw PermissionChecker .insufficientPermissions ("missing permission '" + callable .getAttribute ()
290- .permission () + "'" );
274+ if (!isPermitted (usage , callable )) throw PermissionChecker .insufficientPermissions ("missing permission '" + callable .getAttribute ().permission () + "'" );
291275 }
292276
293277 private Group createGroupNode (@ Nullable Object target , Class <?> source ) {
@@ -339,10 +323,7 @@ private void registerGroups(@Nullable Object target, Collection<? super Group> n
339323 }
340324
341325 private org .comroid .commands .node .Parameter createParameterNode (int index , Parameter source ) {
342- var attribute = Annotations .findAnnotations (Command .Arg .class , source )
343- .findFirst ()
344- .orElseThrow ()
345- .getAnnotation ();
326+ var attribute = Annotations .findAnnotations (Command .Arg .class , source ).findFirst ().orElseThrow ().getAnnotation ();
346327 // construct parameter node
347328 var builder = org .comroid .commands .node .Parameter .builder ()
348329 .name (Optional .ofNullable (attribute .value ())
@@ -356,8 +337,7 @@ private org.comroid.commands.node.Parameter createParameterNode(int index, Param
356337 .index (index );
357338
358339 // init special types
359- if (source .getType ().isEnum ()) builder .autoFillProvider (new EnumBasedAutoFillProvider <>(Polyfill .uncheckedCast (
360- source .getType ())));
340+ if (source .getType ().isEnum ()) builder .autoFillProvider (new EnumBasedAutoFillProvider <>(Polyfill .uncheckedCast (source .getType ())));
361341 else if (attribute .autoFill ().length > 0 ) builder .autoFillProvider (new ArrayBasedAutoFillProvider (attribute .autoFill ()));
362342
363343 // init custom autofill providers
0 commit comments