Render unwrapped suspend function in backend

Hierarchy of specially wrapped suspend function may have inconsistent
 overridden descriptors: some of them may be wrapped, some unwrapped.
 To mitigate this problem, currently it's proposed to render only
 unwrapped functions, which are always have stable overridden descriptors

 #KT-23809 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2018-04-16 03:08:00 +03:00
parent c216749eb6
commit 4af8833f08
6 changed files with 69 additions and 6 deletions
@@ -0,0 +1,44 @@
[
{
"declaration": "abstract class C<V> : B<V> defined in root package",
"visibility": "public",
"class": "C",
"members": [
{"visibility": "public", "declaration": "open suspend fun foo(): V", "name": "foo", "desc": "(Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"},
{"visibility": "public", "declaration": "open suspend fun foo(): V", "name": "foo$suspendImpl", "desc": "(LC;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"},
{"visibility": "public", "declaration": "constructor C<V>()", "name": "<init>", "desc": "()V"}
]
},
{
"declaration": "interface B<K> : A<K> defined in root package",
"visibility": "public",
"class": "B$DefaultImpls",
"members": [
]
},
{
"declaration": "interface B<K> : A<K> defined in root package",
"visibility": "public",
"class": "B",
"members": [
]
},
{
"declaration": "interface A<T> defined in root package",
"visibility": "public",
"class": "A$DefaultImpls",
"members": [
]
},
{
"declaration": "interface A<T> defined in root package",
"visibility": "public",
"class": "A",
"members": [
{"visibility": "public", "declaration": "abstract suspend fun foo(): T", "name": "foo", "desc": "(Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"}
]
}
]
@@ -0,0 +1,9 @@
interface A<T> {
suspend fun foo(): T
}
interface B<K> : A<K>
abstract class C<V> : B<V> {
override suspend fun foo(): V = TODO()
}
@@ -4,10 +4,10 @@
"visibility": "local",
"class": "SuspendLambdaKt$invokeCoroutineBuilder$1",
"members": [
{"visibility": "local", "declaration": "final fun kotlin.Any.<anonymous>(continuation: kotlin.coroutines.experimental.Continuation<kotlin.Unit>): kotlin.Any?", "name": "invoke", "desc": "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"},
{"visibility": "local", "declaration": "final suspend fun kotlin.Any.<anonymous>(): kotlin.Unit", "name": "invoke", "desc": "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"},
{"visibility": "local", "declaration": "<this>", "name": "p$", "desc": "Ljava/lang/Object;"},
{"name": "doResume", "desc": "(Ljava/lang/Object;Ljava/lang/Throwable;)Ljava/lang/Object;"},
{"visibility": "local", "declaration": "final fun kotlin.Any.<anonymous>(continuation: kotlin.coroutines.experimental.Continuation<kotlin.Unit>): kotlin.Any?", "name": "<init>", "desc": "(Lkotlin/coroutines/experimental/Continuation;)V"},
{"visibility": "local", "declaration": "final suspend fun kotlin.Any.<anonymous>(): kotlin.Unit", "name": "<init>", "desc": "(Lkotlin/coroutines/experimental/Continuation;)V"},
{"name": "create", "desc": "(Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Lkotlin/coroutines/experimental/Continuation;"},
{"name": "invoke", "desc": "(Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"}
]
@@ -4,7 +4,7 @@
"visibility": "public",
"class": "B",
"members": [
{"visibility": "public", "declaration": "open suspend fun foo(continuation: kotlin.coroutines.experimental.Continuation<kotlin.Boolean>): kotlin.Any?", "name": "foo", "desc": "(Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"},
{"visibility": "public", "declaration": "open suspend fun foo(): kotlin.Boolean", "name": "foo", "desc": "(Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"},
{"visibility": "public", "declaration": "constructor B()", "name": "<init>", "desc": "()V"}
]
},
@@ -29,7 +29,7 @@
"visibility": "public",
"class": "A",
"members": [
{"visibility": "public", "declaration": "abstract suspend fun foo(continuation: kotlin.coroutines.experimental.Continuation<kotlin.Boolean>): kotlin.Any?", "name": "foo", "desc": "(Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"}
{"visibility": "public", "declaration": "abstract suspend fun foo(): kotlin.Boolean", "name": "foo", "desc": "(Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"}
]
},
{
@@ -37,7 +37,7 @@
"visibility": "public",
"class": "C",
"members": [
{"visibility": "public", "declaration": "final suspend fun foo(continuation: kotlin.coroutines.experimental.Continuation<kotlin.Boolean>): kotlin.Any?", "name": "foo", "desc": "(Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"},
{"visibility": "public", "declaration": "final suspend fun foo(): kotlin.Boolean", "name": "foo", "desc": "(Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"},
{"visibility": "public", "declaration": "constructor C()", "name": "<init>", "desc": "()V"}
]
}