FIR LC: fix nullable annotation on return type of suspend function

This commit is contained in:
Jinseong Jeon
2021-10-29 14:17:27 -07:00
committed by Ilya Kirillov
parent 5880d80d26
commit 5aa8e2d0d1
4 changed files with 29 additions and 12 deletions
@@ -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()
}
+3 -1
View File
@@ -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
+3 -1
View File
@@ -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