From 2d9ae6e93e35fcfe2cd4e0aeb2566e7db2403494 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 30 May 2018 11:49:09 +0300 Subject: [PATCH] IrTypes: approximate only non-denotable Kotlin types --- .../src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt index f9e7f09fd4d..ffeb891377d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt @@ -45,7 +45,12 @@ class TypeTranslator( private fun translateType(ktType0: KotlinType, variance: Variance): IrTypeProjection { // TODO "old" JVM BE does this for reified type arguments. Is it ok for arbitrary subexpressions? - val ktTypeUpper = approximateCapturedTypes(ktType0).upper + + val ktTypeUpper = + if (ktType0.constructor.isDenotable) + ktType0 + else + approximateCapturedTypes(ktType0).upper when { ktTypeUpper.isError -> return IrErrorTypeImpl(ktTypeUpper, translateTypeAnnotations(ktTypeUpper.annotations), variance)