summaryrefslogtreecommitdiff
path: root/dicore3/command/src/main/java/io/dico/dicore/command/registration/reflect/ReflectiveCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'dicore3/command/src/main/java/io/dico/dicore/command/registration/reflect/ReflectiveCommand.java')
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/registration/reflect/ReflectiveCommand.java30
1 files changed, 19 insertions, 11 deletions
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/registration/reflect/ReflectiveCommand.java b/dicore3/command/src/main/java/io/dico/dicore/command/registration/reflect/ReflectiveCommand.java
index 591d824..ee90efe 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/registration/reflect/ReflectiveCommand.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/registration/reflect/ReflectiveCommand.java
@@ -15,6 +15,8 @@ public final class ReflectiveCommand extends Command {
private final Method method;
private final Object instance;
private String[] parameterOrder;
+
+ // hasContinuation | hasContext | hasSender | hasReceiver
private final int flags;
ReflectiveCommand(IParameterTypeSelector selector, Method method, Object instance) throws CommandParseException {
@@ -56,6 +58,8 @@ public final class ReflectiveCommand extends Command {
return instance;
}
+ public String getCmdName() { return cmdAnnotation.value(); }
+
void setParameterOrder(String[] parameterOrder) {
this.parameterOrder = parameterOrder;
}
@@ -86,18 +90,24 @@ public final class ReflectiveCommand extends Command {
Object[] args = new Object[parameterOrder.length + start];
int i = 0;
- if ((flags & 1) != 0) {
+
+ int mask = 1;
+ if ((flags & mask) != 0) {
try {
- args[i++] = ((ICommandReceiver.Factory) instance).getReceiver(context, method, cmdAnnotation.value());
+ args[i++] = ((ICommandInterceptor) instance).getReceiver(context, method, getCmdName());
} catch (Exception ex) {
handleException(ex);
return null; // unreachable
}
}
- if ((flags & 2) != 0) {
+
+ mask <<= 1;
+ if ((flags & mask) != 0) {
args[i++] = sender;
}
- if ((flags & 4) != 0) {
+
+ mask <<= 1;
+ if ((flags & mask) != 0) {
args[i++] = context;
}
@@ -105,11 +115,12 @@ public final class ReflectiveCommand extends Command {
args[i] = context.get(parameterOrder[i - start]);
}
- if (!isSuspendFunction()) {
- return callSynchronously(args);
+ mask <<= 1;
+ if ((flags & mask) != 0) {
+ return callAsCoroutine(context, args);
}
- return callAsCoroutine(context, args);
+ return callSynchronously(args);
}
private boolean isSuspendFunction() {
@@ -137,9 +148,6 @@ public final class ReflectiveCommand extends Command {
if (returned instanceof String) {
return (String) returned;
}
- if (returned instanceof CommandResult) {
- return ((CommandResult) returned).getMessage();
- }
return null;
}
@@ -160,7 +168,7 @@ public final class ReflectiveCommand extends Command {
}
private String callAsCoroutine(ExecutionContext context, Object[] args) {
- return KotlinReflectiveRegistrationKt.callAsCoroutine(this, (ICommandReceiver.Factory) instance, context, args);
+ return KotlinReflectiveRegistrationKt.callAsCoroutine(this, (ICommandInterceptor) instance, context, args);
}
}