From c56b471b7153702c7942ed8fcb4fcd502134355a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 29 Mar 2019 16:29:53 +0300 Subject: [PATCH] FIR body resolve: handle constant types more precisely --- .../transformers/FirBodyResolveTransformer.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt index c3b2d7f3079..6fd700487d3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt @@ -310,12 +310,13 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn } override fun transformConstExpression(constExpression: FirConstExpression, data: Any?): CompositeTransformResult { - if (data == null) return super.transformConstExpression(constExpression, data) - val expectedType = data as FirTypeRef + val expectedType = data as? FirTypeRef - if (expectedType is FirImplicitTypeRef) { - - val symbol = when (constExpression.kind) { + val kind = constExpression.kind + if (expectedType is FirImplicitTypeRef || expectedType == null || + kind == IrConstKind.Null || kind == IrConstKind.Boolean || kind == IrConstKind.Char + ) { + val symbol = when (kind) { IrConstKind.Null -> StandardClassIds.Nothing(symbolProvider) IrConstKind.Boolean -> StandardClassIds.Boolean(symbolProvider) IrConstKind.Char -> StandardClassIds.Char(symbolProvider) @@ -328,7 +329,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn IrConstKind.Double -> StandardClassIds.Double(symbolProvider) } - val type = ConeClassTypeImpl(symbol.toLookupTag(), emptyArray(), isNullable = constExpression.kind == IrConstKind.Null) + val type = ConeClassTypeImpl(symbol.toLookupTag(), emptyArray(), isNullable = kind == IrConstKind.Null) constExpression.resultType = FirResolvedTypeRefImpl(session, null, type, false, emptyList()) } else {