From ecafd10e6f1b2cb8ed2e8f0227fe17983f3eef9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 3 Aug 2021 00:40:20 +0200 Subject: [PATCH] Allow special case `@Callback`, accepting exactly one JsonArray parameter. In this case we pass on the parameters as-is for manual processing. --- .../java/li/cil/oc2/common/bus/RPCDeviceBusAdapter.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/li/cil/oc2/common/bus/RPCDeviceBusAdapter.java b/src/main/java/li/cil/oc2/common/bus/RPCDeviceBusAdapter.java index e7d9ede9..ca135cd3 100644 --- a/src/main/java/li/cil/oc2/common/bus/RPCDeviceBusAdapter.java +++ b/src/main/java/li/cil/oc2/common/bus/RPCDeviceBusAdapter.java @@ -296,6 +296,14 @@ public final class RPCDeviceBusAdapter implements Steppable { } final RPCParameter[] parametersSpec = method.getParameters(); + + // Special case: if a method takes as exactly one parameter a JsonArray, we pass + // on the parameters as-is, without automatically trying to deserialize them. + if (parametersSpec.length == 1 && parametersSpec[0].getType() == JsonArray.class) { + invokeMethod(methodInvocation, isMainThread, method, new Object[]{methodInvocation.parameters}); + return; + } + if (methodInvocation.parameters.size() != parametersSpec.length) { if (canTrailingParametersBeImplicitlyNull(methodInvocation.parameters, parametersSpec)) { fallbacks.add(method);