Skip to content

Commit d005dc6

Browse files
committed
Add nullability support to KtUltraLightSuspendContinuationParameter
1 parent 0d51a2e commit d005dc6

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,36 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
1414
import org.jetbrains.kotlin.asJava.elements.KtLightSimpleModifierList
1515
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
1616
import org.jetbrains.kotlin.builtins.isSuspendFunctionType
17-
import org.jetbrains.kotlin.builtins.isSuspendFunctionTypeOrSubtype
18-
import org.jetbrains.kotlin.psi.KtCallableDeclaration
19-
import org.jetbrains.kotlin.psi.KtDeclaration
20-
import org.jetbrains.kotlin.psi.KtParameter
2117
import org.jetbrains.kotlin.types.KotlinType
2218
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_CONTINUATION_PARAMETER
23-
import org.jetbrains.kotlin.codegen.kotlinType
2419
import org.jetbrains.kotlin.descriptors.*
2520
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
26-
import org.jetbrains.kotlin.psi.KtFunction
21+
import org.jetbrains.kotlin.psi.*
2722

2823
internal class KtUltraLightSuspendContinuationParameter(
2924
private val ktFunction: KtFunction,
3025
support: KtUltraLightSupport,
3126
method: KtLightMethod
32-
) : org.jetbrains.kotlin.asJava.elements.LightParameter(SUSPEND_FUNCTION_CONTINUATION_PARAMETER, PsiType.NULL, method, method.language) {
27+
) : org.jetbrains.kotlin.asJava.elements.LightParameter(SUSPEND_FUNCTION_CONTINUATION_PARAMETER, PsiType.NULL, method, method.language),
28+
KtUltraLightElementWithNullabilityAnnotation<KtDeclaration, PsiParameter> {
3329

34-
private val psiType by lazyPub {
30+
override val kotlinTypeForNullabilityAnnotation: KotlinType? get() = ktType
31+
override val psiTypeForNullabilityAnnotation: PsiType? get() = psiType
32+
override val kotlinOrigin: KtDeclaration? = null
33+
override val clsDelegate: PsiParameter
34+
get() = throw IllegalStateException("Cls delegate shouldn't be loaded for ultra-light PSI!")
35+
36+
private val ktType by lazyPub {
3537
val descriptor = ktFunction.resolve() as? FunctionDescriptor
36-
val returnType = descriptor?.returnType ?: return@lazyPub PsiType.NULL
37-
val typeFromDescriptor = support.moduleDescriptor.getContinuationOfTypeOrAny(returnType, support.isReleasedCoroutine)
38-
typeFromDescriptor.asPsiType(support, TypeMappingMode.DEFAULT, method)
38+
val returnType = descriptor?.returnType ?: return@lazyPub null
39+
support.moduleDescriptor.getContinuationOfTypeOrAny(returnType, support.isReleasedCoroutine)
3940
}
4041

41-
private val lightModifierList by lazyPub { KtLightSimpleModifierList(method, emptySet()) }
42+
private val psiType by lazyPub {
43+
ktType?.asPsiType(support, TypeMappingMode.DEFAULT, method) ?: PsiType.NULL
44+
}
45+
46+
private val lightModifierList by lazyPub { KtLightSimpleModifierList(this, emptySet()) }
4247

4348
override fun getType(): PsiType = psiType
4449

compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightUtils.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
3737
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
3838
import org.jetbrains.kotlin.resolve.annotations.argumentValue
3939
import org.jetbrains.kotlin.resolve.constants.EnumValue
40+
import org.jetbrains.kotlin.resolve.descriptorUtil.module
4041
import org.jetbrains.kotlin.types.KotlinType
4142
import org.jetbrains.kotlin.types.TypeProjectionImpl
4243
import org.jetbrains.kotlin.types.replace
@@ -129,7 +130,8 @@ internal fun KtDeclaration.getKotlinType(): KotlinType? {
129130
val descriptor = resolve()
130131
return when (descriptor) {
131132
is ValueDescriptor -> descriptor.type
132-
is CallableDescriptor -> descriptor.returnType
133+
is CallableDescriptor -> if (descriptor is FunctionDescriptor && descriptor.isSuspend)
134+
descriptor.module.builtIns.nullableAnyType else descriptor.returnType
133135
else -> null
134136
}
135137
}

0 commit comments

Comments
 (0)