FIR LC: fix nullable annotation on return type of suspend function
This commit is contained in:
committed by
Ilya Kirillov
parent
5880d80d26
commit
5aa8e2d0d1
+20
-10
@@ -54,13 +54,20 @@ internal class FirLightSimpleMethodForSymbol(
|
||||
_typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
|
||||
|
||||
private fun computeAnnotations(isPrivate: Boolean): List<PsiAnnotation> {
|
||||
val nullability = if (isVoidReturnType || isPrivate) {
|
||||
val nullability = if (isPrivate) {
|
||||
NullabilityType.Unknown
|
||||
} else {
|
||||
analyzeWithSymbolAsContext(functionSymbol) {
|
||||
getTypeNullability(
|
||||
functionSymbol.annotatedType.type
|
||||
)
|
||||
analyzeWithSymbolAsContext(functionSymbol) l@{
|
||||
val ktType =
|
||||
when {
|
||||
functionSymbol.isSuspend -> // Any?
|
||||
return@l NullabilityType.Nullable
|
||||
isVoidReturnType ->
|
||||
return@l NullabilityType.Unknown
|
||||
else ->
|
||||
functionSymbol.annotatedType.type
|
||||
}
|
||||
getTypeNullability(ktType)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,13 +135,16 @@ internal class FirLightSimpleMethodForSymbol(
|
||||
}
|
||||
|
||||
private val _returnedType: PsiType by lazyPub {
|
||||
if (isVoidReturnType) return@lazyPub PsiType.VOID
|
||||
analyzeWithSymbolAsContext(functionSymbol) {
|
||||
val ktType =
|
||||
if (functionSymbol.isSuspend)
|
||||
analysisSession.builtinTypes.NULLABLE_ANY
|
||||
else
|
||||
functionSymbol.annotatedType.type
|
||||
when {
|
||||
functionSymbol.isSuspend -> // Any?
|
||||
analysisSession.builtinTypes.NULLABLE_ANY
|
||||
isVoidReturnType ->
|
||||
return@lazyPub PsiType.VOID
|
||||
else ->
|
||||
functionSymbol.annotatedType.type
|
||||
}
|
||||
ktType.asPsiType(this@FirLightSimpleMethodForSymbol)
|
||||
} ?: nonExistentType()
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ public final class Foo /* Foo*/ {
|
||||
}
|
||||
|
||||
public final class Boo /* Boo*/ {
|
||||
private final java.lang.Object doSomething(Foo, kotlin.coroutines.Continuation<? super Bar>);// doSomething(Foo, kotlin.coroutines.Continuation<? super Bar>)
|
||||
|
||||
public Boo();// .ctor()
|
||||
|
||||
}
|
||||
@@ -30,4 +32,4 @@ public final class Derived /* Derived*/ implements Base {
|
||||
|
||||
public Derived();// .ctor()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//RELEASE_COROUTINE_NEEDED
|
||||
//CHECK_BY_JAVA_FILE
|
||||
class Foo {
|
||||
suspend fun doSomething(foo: Foo): Bar {}
|
||||
}
|
||||
@@ -18,3 +19,5 @@ interface Base {
|
||||
class Derived: Base {
|
||||
override suspend fun foo() { ... }
|
||||
}
|
||||
|
||||
// FIR_COMPARISON
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
//RELEASE_COROUTINE_NEEDED
|
||||
suspend fun doSomething(foo: String): Int {}
|
||||
|
||||
fun <T> async(block: suspend () -> T)
|
||||
fun <T> async(block: suspend () -> T)
|
||||
|
||||
// FIR_COMPARISON
|
||||
|
||||
Reference in New Issue
Block a user