From f142a3f2446212d18cd9d83e5fe762b28d499081 Mon Sep 17 00:00:00 2001 From: nathan Date: Wed, 4 Apr 2018 22:45:31 +0200 Subject: [PATCH] If the method return type is 'void', then we don't have to explicitly set 'transmitReturnValue' to false. If there are no checked exceptions thrown, then we don't have to explicitly set 'transmitExceptions' to false --- src/dorkbox/network/rmi/RmiProxyHandler.java | 25 ++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/dorkbox/network/rmi/RmiProxyHandler.java b/src/dorkbox/network/rmi/RmiProxyHandler.java index 3cc71c3a..3c764b88 100644 --- a/src/dorkbox/network/rmi/RmiProxyHandler.java +++ b/src/dorkbox/network/rmi/RmiProxyHandler.java @@ -56,7 +56,9 @@ import dorkbox.network.serialization.RmiSerializationManager; /** * Handles network communication when methods are invoked on a proxy. *

- * The only methods than can be invoked are INTERFACE methods and OBJECT methods + * If the method return type is 'void', then we don't have to explicitly set 'transmitReturnValue' to false + *

+ * If there are no checked exceptions thrown, then we don't have to explicitly set 'transmitExceptions' to false */ public class RmiProxyHandler implements InvocationHandler { @@ -80,7 +82,10 @@ class RmiProxyHandler implements InvocationHandler { private int timeoutMillis = 3000; private boolean isAsync = false; + // if the return type is 'void', then this has no meaning. private boolean transmitReturnValue = true; + + // if there are no checked exceptions thrown, then this has no meaning private boolean transmitExceptions = true; private boolean enableToString; @@ -248,10 +253,17 @@ class RmiProxyHandler implements InvocationHandler { byte responseID = (byte) 0; - // An invocation doesn't need a response is if it's - // ASYNC and no return values or exceptions are wanted back Class returnType = method.getReturnType(); - boolean ignoreResponse = this.isAsync && !(this.transmitReturnValue || this.transmitExceptions); + + // If the method return type is 'void', then we don't have to explicitly set 'transmitReturnValue' to false + boolean hasReturnValue = returnType != void.class && this.transmitReturnValue; + + // If there are no checked exceptions thrown, then we don't have to explicitly set 'transmitExceptions' to false + boolean shouldTransmitExceptions = (method.getExceptionTypes().length != 0 || method.getGenericExceptionTypes().length != 0) && this.transmitExceptions; + + // If we are async (but still have a return type or throw checked exceptions) then we ignore the response + // If we are 'void' return type and do not throw checked exceptions then we ignore the response + boolean ignoreResponse = (this.isAsync || returnType == void.class) && !(hasReturnValue || shouldTransmitExceptions); if (ignoreResponse) { invokeMethod.responseData = (byte) 0; // 0 means do not respond. } @@ -299,8 +311,7 @@ class RmiProxyHandler implements InvocationHandler { } // 0 means respond immediately because it's - // ASYNC and no return values or exceptions are wanted back - if (this.isAsync) { + if (ignoreResponse) { if (returnType.isPrimitive()) { if (returnType == int.class) { return 0; @@ -332,7 +343,7 @@ class RmiProxyHandler implements InvocationHandler { try { Object result = waitForResponse(this.lastResponseID); - if (result != null && result instanceof Exception) { + if (result instanceof Exception) { throw (Exception) result; } else {