This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 8e4ef09  RpcInvocation adds returnType assignment in initParameterDesc 
(#7746)
8e4ef09 is described below

commit 8e4ef09c78788ff2d44a474cb09a5ca5ca6c0809
Author: xiaoheng1 <[email protected]>
AuthorDate: Sat May 15 01:09:08 2021 +0800

    RpcInvocation adds returnType assignment in initParameterDesc (#7746)
    
    * fix #7745 RpcInvocation adds returnType assignment in initParameterDesc
    
    * Code optimization
---
 .../java/org/apache/dubbo/rpc/RpcInvocation.java     |  9 ++++++++-
 .../org/apache/dubbo/rpc/support/RpcUtilsTest.java   | 20 ++++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
index abda39e..bbe5d60 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
@@ -125,7 +125,6 @@ public class RpcInvocation implements Invocation, 
Serializable {
 
     public RpcInvocation(Method method, String serviceName, String 
protocolServiceKey, Object[] arguments, Map<String, Object> attachment, 
Map<Object, Object> attributes) {
         this(method.getName(), serviceName, protocolServiceKey, 
method.getParameterTypes(), arguments, attachment, null, attributes);
-        this.returnType = method.getReturnType();
     }
 
     public RpcInvocation(String methodName, String serviceName, String 
protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments) {
@@ -159,6 +158,7 @@ public class RpcInvocation implements Invocation, 
Serializable {
                     this.parameterTypesDesc = methodDescriptor.getParamDesc();
                     this.compatibleParamSignatures = 
methodDescriptor.getCompatibleParamSignatures();
                     this.returnTypes = methodDescriptor.getReturnTypes();
+                    this.returnType = methodDescriptor.getReturnClass();
                 }
             }
         }
@@ -167,6 +167,7 @@ public class RpcInvocation implements Invocation, 
Serializable {
             this.parameterTypesDesc = 
ReflectUtils.getDesc(this.getParameterTypes());
             this.compatibleParamSignatures = 
Stream.of(this.parameterTypes).map(Class::getName).toArray(String[]::new);
             this.returnTypes = RpcUtils.getReturnTypes(this);
+            this.returnType = RpcUtils.getReturnType(this);
         }
     }
 
@@ -179,10 +180,12 @@ public class RpcInvocation implements Invocation, 
Serializable {
         this.invoker = invoker;
     }
 
+    @Override
     public Object put(Object key, Object value) {
         return attributes.put(key, value);
     }
 
+    @Override
     public Object get(Object key) {
         return attributes.get(key);
     }
@@ -241,6 +244,7 @@ public class RpcInvocation implements Invocation, 
Serializable {
         this.parameterTypesDesc = parameterTypesDesc;
     }
 
+    @Override
     public String[] getCompatibleParamSignatures() {
         return compatibleParamSignatures;
     }
@@ -285,6 +289,7 @@ public class RpcInvocation implements Invocation, 
Serializable {
         this.attachments = attachments == null ? new HashMap<>() : attachments;
     }
 
+    @Override
     public void setAttachment(String key, Object value) {
        setObjectAttachment(key, value);
     }
@@ -302,6 +307,7 @@ public class RpcInvocation implements Invocation, 
Serializable {
         setObjectAttachmentIfAbsent(key, value);
     }
 
+    @Override
     public void setAttachmentIfAbsent(String key, Object value) {
         setObjectAttachmentIfAbsent(key, value);
     }
@@ -396,6 +402,7 @@ public class RpcInvocation implements Invocation, 
Serializable {
     }
 
     @Deprecated
+    @Override
     public Object getObjectAttachment(String key, Object defaultValue) {
         if (attachments == null) {
             return defaultValue;
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/RpcUtilsTest.java
 
b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/RpcUtilsTest.java
index f6111df..180aef0 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/RpcUtilsTest.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/RpcUtilsTest.java
@@ -22,6 +22,8 @@ import org.apache.dubbo.rpc.InvokeMode;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcInvocation;
 
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ServiceRepository;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -355,4 +357,22 @@ public class RpcUtilsTest {
         Assertions.assertFalse(RpcUtils.isEcho("Ljava/lang/Object;", 
"testMethod"));
         Assertions.assertFalse(RpcUtils.isEcho("Ljava/lang/String;", "$echo"));
     }
+    @Test
+    public void testIsReturnTypeFuture() {
+        Class<?> demoServiceClass = DemoService.class;
+        String serviceName = demoServiceClass.getName();
+        Invoker invoker = mock(Invoker.class);
+        given(invoker.getUrl()).willReturn(URL.valueOf(
+                
"test://127.0.0.1:1/org.apache.dubbo.rpc.support.DemoService?interface=org.apache.dubbo.rpc.support.DemoService"));
+
+        RpcInvocation inv = new RpcInvocation("testReturnType", serviceName, 
"", new Class<?>[] {String.class}, null, null, invoker, null);
+        Assertions.assertFalse(RpcUtils.isReturnTypeFuture(inv));
+
+        ServiceRepository repository = ApplicationModel.getServiceRepository();
+        repository.registerService(demoServiceClass);
+
+        inv = new RpcInvocation("testReturnType4", serviceName, "", new 
Class<?>[] {String.class}, null, null, invoker, null);
+        Assertions.assertTrue(RpcUtils.isReturnTypeFuture(inv));
+    }
+
 }

Reply via email to