Fix stub method descriptor override issue #13221
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Due to the design of StubServiceDescriptor, the
StubMethodDescriptor
with same method name will override each other in StubServiceDescriptor.It will cause following problems:
StubMethodDescriptor.retrunTypes
andStubMethodDescriptor.returnClass
can never get true return types. They can only get the wrong retrun types form the asyncStubMethodDescriptor
, usually theCompletableFuture.class
.Detail:
Currently,
Dubbo3TripleGenerator
will gererate 2StubMethodDescriptor
for each non-streaming method, one for sync call, the other for async call, and they share same method name.StubMethodDescriptor will add itself to
StubServiceDescriptor
when initialize:And obviously only the last one will be stored into
StubServiceDescriptor
:Why

StubMethodDescriptor.returnClass
is correct?Some one provded a temporary fix in
StubInvocationUtil
:But the
returnTypes
forRpcInvocation
are still wrong.Brief changelog
This PR make the async version
StubMethodDescriptor
declared before the sync version. It can make the sync version ofStubMethodDescriptor
override the async one inStubServiceDescriptor
, and provides the ture retrun types whenRpcInvocation
initialize.Then, for the async call,
StubInvocationUtil
will setreturnTypes[0]
toCompletableFuture
.