diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirGeneration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirGeneration.kt index fd6c3554148..9a8cb777a87 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirGeneration.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirGeneration.kt @@ -82,6 +82,7 @@ fun generateExplicitReceiverTemporaryVariable( } ?.let { receiver -> // val = x + @OptIn(UnresolvedExpressionTypeAccess::class) generateTemporaryVariable( moduleData = session.moduleData, source = source, diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt index 3ca72b390f1..a55e49c492c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt @@ -1198,10 +1198,12 @@ class FirRenderer( } override fun visitResolvedReifiedParameterReference(resolvedReifiedParameterReference: FirResolvedReifiedParameterReference) { + @OptIn(UnresolvedExpressionTypeAccess::class) renderType(resolvedReifiedParameterReference.coneTypeOrNull) } override fun visitInaccessibleReceiverExpression(inaccessibleReceiverExpression: FirInaccessibleReceiverExpression) { + @OptIn(UnresolvedExpressionTypeAccess::class) renderType(inaccessibleReceiverExpression.coneTypeOrNull) visitElement(inaccessibleReceiverExpression) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeUtils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeUtils.kt index 2f91182491e..fd010d3f36f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeUtils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeUtils.kt @@ -5,10 +5,7 @@ package org.jetbrains.kotlin.fir.types -import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.FirConstExpression -import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirSmartCastExpression +import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry import org.jetbrains.kotlin.name.ClassId @@ -37,10 +34,17 @@ val FirTypeRef.coneType: ConeKotlinType val FirTypeRef.coneTypeOrNull: ConeKotlinType? get() = coneTypeSafe() -val FirExpression.resolvedType: ConeKotlinType get() = requireNotNull(coneTypeOrNull) { "Expected type to be resolved" } +@OptIn(UnresolvedExpressionTypeAccess::class) +val FirExpression.resolvedType: ConeKotlinType + get() = coneTypeOrNull + ?: errorWithAttachment("Expected expression '${this::class.simpleName}' to be resolved") { + withFirEntry("expression", this@resolvedType) + } +@UnresolvedExpressionTypeAccess inline fun FirExpression.coneTypeSafe(): T? = (coneTypeOrNull as? T) +@OptIn(UnresolvedExpressionTypeAccess::class) inline fun FirExpression.coneTypeUnsafe(): T = coneTypeOrNull as T @RequiresOptIn(