diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt index 90ace762c45..fcad4c7e15f 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt @@ -1158,8 +1158,7 @@ internal class KtFirCallResolver( private fun FirArrayLiteral.toKtCallInfo(): KtCallInfo? { val arrayOfSymbol = with(analysisSession) { - @OptIn(UnresolvedExpressionTypeAccess::class) - val type = coneTypeSafe() + val type = resolvedType as? ConeClassLikeType ?: return run { val defaultArrayOfSymbol = arrayOfSymbol(arrayOf) ?: return null val substitutor = createSubstitutorFromTypeArguments(defaultArrayOfSymbol) @@ -1205,8 +1204,7 @@ internal class KtFirCallResolver( // No type parameter means this is an arrayOf call of primitives, in which case there is no type arguments val typeParameter = firSymbol.fir.typeParameters.singleOrNull() ?: return KtSubstitutor.Empty(token) - @OptIn(UnresolvedExpressionTypeAccess::class) - val elementType = coneTypeSafe()?.arrayElementType() ?: return KtSubstitutor.Empty(token) + val elementType = resolvedType.arrayElementType() ?: return KtSubstitutor.Empty(token) val coneSubstitutor = substitutorByMap(mapOf(typeParameter.symbol to elementType), rootModuleSession) return firSymbolBuilder.typeBuilder.buildSubstitutor(coneSubstitutor) } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirCollectionLiteralReference.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirCollectionLiteralReference.kt index dc143c1f788..463b5fc77e6 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirCollectionLiteralReference.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirCollectionLiteralReference.kt @@ -13,9 +13,8 @@ import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirArrayOfSymbolProvider. import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirSafe import org.jetbrains.kotlin.fir.expressions.FirArrayLiteral -import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess import org.jetbrains.kotlin.fir.types.ConeClassLikeType -import org.jetbrains.kotlin.fir.types.coneTypeSafe +import org.jetbrains.kotlin.fir.types.resolvedType import org.jetbrains.kotlin.psi.KtCollectionLiteralExpression @@ -26,8 +25,7 @@ class KtFirCollectionLiteralReference( check(this is KtFirAnalysisSession) val fir = element.getOrBuildFirSafe(firResolveSession) ?: return emptyList() - @OptIn(UnresolvedExpressionTypeAccess::class) - val type = fir.coneTypeSafe() ?: return listOfNotNull(arrayOfSymbol(arrayOf)) + val type = fir.resolvedType as? ConeClassLikeType ?: return listOfNotNull(arrayOfSymbol(arrayOf)) val call = arrayTypeToArrayOfCall[type.lookupTag.classId] ?: arrayOf return listOfNotNull(arrayOfSymbol(call)) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/IntegerLiteralAndOperatorApproximationTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/IntegerLiteralAndOperatorApproximationTransformer.kt index 58f271aee75..91cda672490 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/IntegerLiteralAndOperatorApproximationTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/IntegerLiteralAndOperatorApproximationTransformer.kt @@ -62,8 +62,7 @@ class IntegerLiteralAndOperatorApproximationTransformer( constExpression: FirConstExpression, data: ConeKotlinType?, ): FirStatement { - @OptIn(UnresolvedExpressionTypeAccess::class) - val type = constExpression.coneTypeSafe() ?: return constExpression + val type = constExpression.resolvedType as? ConeIntegerLiteralType ?: return constExpression val approximatedType = type.getApproximatedType(data?.fullyExpandedType(session)) constExpression.resultType = approximatedType @Suppress("UNCHECKED_CAST") @@ -79,8 +78,7 @@ class IntegerLiteralAndOperatorApproximationTransformer( @Suppress("UnnecessaryVariable") val call = integerLiteralOperatorCall - @OptIn(UnresolvedExpressionTypeAccess::class) - val operatorType = call.coneTypeSafe() ?: return call + val operatorType = call.resolvedType as? ConeIntegerLiteralType ?: return call val approximatedType = operatorType.getApproximatedType(data?.fullyExpandedType(session)) call.transformDispatchReceiver(this, null) call.transformExtensionReceiver(this, null) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 4e8af891a79..e983ff210dc 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -37,7 +37,6 @@ import org.jetbrains.kotlin.fir.scopes.impl.isWrappedIntegerOperatorForUnsignedT import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.TransformData @@ -1291,8 +1290,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT .resolveDelegatingConstructorCall(delegatedConstructorCall, constructorType, containingClass.symbol.toLookupTag()) if (reference is FirThisReference && reference.boundSymbol == null) { - @OptIn(UnresolvedExpressionTypeAccess::class) - resolvedCall.dispatchReceiver?.coneTypeSafe()?.lookupTag?.toSymbol(session)?.let { + (resolvedCall.dispatchReceiver?.resolvedType as? ConeClassLikeType)?.lookupTag?.toSymbol(session)?.let { reference.replaceBoundSymbol(it) } } diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/VariableStorageImpl.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/VariableStorageImpl.kt index afbf874495a..e627cc7c05e 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/VariableStorageImpl.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/VariableStorageImpl.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.ConeClassLikeType -import org.jetbrains.kotlin.fir.types.coneTypeSafe +import org.jetbrains.kotlin.fir.types.resolvedType import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry import org.jetbrains.kotlin.fir.utils.exceptions.withFirSymbolEntry import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment @@ -180,8 +180,7 @@ class VariableStorageImpl(private val session: FirSession) : VariableStorage() { property.modality != Modality.FINAL -> { val dispatchReceiver = (originalFir.unwrapElement() as? FirQualifiedAccessExpression)?.dispatchReceiver ?: return null - @OptIn(UnresolvedExpressionTypeAccess::class) - val receiverType = dispatchReceiver.coneTypeSafe()?.fullyExpandedType(session) ?: return null + val receiverType = (dispatchReceiver.resolvedType as? ConeClassLikeType)?.fullyExpandedType(session) ?: return null val receiverSymbol = receiverType.lookupTag.toSymbol(session) ?: return null when (val receiverFir = receiverSymbol.fir) { is FirAnonymousObject -> PropertyStability.STABLE_VALUE 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 37de5f001e8..b8579930369 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 @@ -41,9 +41,6 @@ val FirExpression.resolvedType: ConeKotlinType withFirEntry("expression", this@resolvedType) } -@UnresolvedExpressionTypeAccess -inline fun FirExpression.coneTypeSafe(): T? = (coneTypeOrNull as? T) - @OptIn(UnresolvedExpressionTypeAccess::class) val FirExpression.isResolved: Boolean get() = coneTypeOrNull != null