diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaGenericVarianceViolationTypeChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaGenericVarianceViolationTypeChecker.kt index 9ad18d0b8a2..5676cac967a 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaGenericVarianceViolationTypeChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaGenericVarianceViolationTypeChecker.kt @@ -55,7 +55,7 @@ object FirJavaGenericVarianceViolationTypeChecker : FirFunctionCallChecker() { val argumentMapping = expression.argumentMapping ?: return val typeArgumentMap = mutableMapOf() for (i in 0 until expression.typeArguments.size) { - val type = expression.typeArguments[i].safeAs()?.typeRef?.coneTypeSafe() + val type = expression.typeArguments[i].safeAs()?.typeRef?.coneType if (type != null) { typeArgumentMap[calleeFunction.typeParameterSymbols[i]] = type } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirCallsEffectAnalyzer.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirCallsEffectAnalyzer.kt index bcc8455bdb1..f0fb047e54f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirCallsEffectAnalyzer.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirCallsEffectAnalyzer.kt @@ -31,13 +31,10 @@ import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.resolve.dfa.cfg.* -import org.jetbrains.kotlin.fir.types.isBuiltinFunctionalType import org.jetbrains.kotlin.fir.resolve.isInvoke import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol -import org.jetbrains.kotlin.fir.types.ConeKotlinType -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.coneTypeSafe +import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.utils.addIfNotNull import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract @@ -301,7 +298,7 @@ object FirCallsEffectAnalyzer : FirControlFlowChecker() { } private fun FirTypeRef?.isFunctionalTypeRef(session: FirSession): Boolean { - return this?.coneTypeSafe()?.isBuiltinFunctionalType(session) == true + return this?.coneType?.isBuiltinFunctionalType(session) == true } private fun FirContractDescription?.getParameterCallsEffectDeclaration(index: Int): ConeCallsEffectDeclaration? { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ConeTypeCompatibilityChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ConeTypeCompatibilityChecker.kt index 1dd304569bb..f1a1e8732bf 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ConeTypeCompatibilityChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ConeTypeCompatibilityChecker.kt @@ -265,7 +265,7 @@ object ConeTypeCompatibilityChecker { private fun FirTypeParameterSymbol?.collectUpperBounds(): Set { if (this == null) return emptySet() - return resolvedBounds.flatMap { it.coneTypeSafe().collectUpperBounds() }.toSet() + return resolvedBounds.flatMap { it.coneType.collectUpperBounds() }.toSet() } private fun ConeKotlinType?.collectLowerBounds(): Set { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt index 50f50c637c4..54277c6d670 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt @@ -515,9 +515,8 @@ fun checkTypeMismatch( } internal fun checkCondition(condition: FirExpression, context: CheckerContext, reporter: DiagnosticReporter) { - val coneType = condition.typeRef.coneTypeSafe()?.lowerBoundIfFlexible() - if (coneType != null && - coneType !is ConeErrorType && + val coneType = condition.typeRef.coneType.lowerBoundIfFlexible() + if (coneType !is ConeErrorType && !coneType.isSubtypeOf(context.session.typeContext, context.session.builtinTypes.booleanType.type) ) { reporter.reportOn( @@ -588,8 +587,7 @@ fun FirFunctionSymbol<*>.isFunctionForExpectTypeFromCastFeature(): Boolean { if ((returnType.lowerBoundIfFlexible() as? ConeTypeParameterType)?.lookupTag != typeParameterSymbol.toLookupTag()) return false fun FirTypeRef.isBadType() = - coneTypeSafe() - ?.contains { (it.lowerBoundIfFlexible() as? ConeTypeParameterType)?.lookupTag == typeParameterSymbol.toLookupTag() } != false + coneType.contains { (it.lowerBoundIfFlexible() as? ConeTypeParameterType)?.lookupTag == typeParameterSymbol.toLookupTag() } if (valueParameterSymbols.any { it.resolvedReturnTypeRef.isBadType() } || resolvedReceiverTypeRef?.isBadType() == true) return false diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt index f7f14ddce41..6ba31a7d3c2 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt @@ -113,8 +113,8 @@ object FirExposedVisibilityDeclarationChecker : FirBasicDeclarationChecker() { if (functionVisibility == EffectiveVisibility.Local) return if (declaration !is FirConstructor && declaration !is FirPropertyAccessor) { - declaration.returnTypeRef.coneTypeSafe() - ?.findVisibilityExposure(context, functionVisibility)?.let { (restricting, restrictingVisibility) -> + declaration.returnTypeRef.coneType + .findVisibilityExposure(context, functionVisibility)?.let { (restricting, restrictingVisibility) -> reporter.reportOn( declaration.source, FirErrors.EXPOSED_FUNCTION_RETURN_TYPE, @@ -128,8 +128,8 @@ object FirExposedVisibilityDeclarationChecker : FirBasicDeclarationChecker() { if (declaration !is FirPropertyAccessor) { declaration.valueParameters.forEachIndexed { i, valueParameter -> if (i < declaration.valueParameters.size) { - val (restricting, restrictingVisibility) = valueParameter.returnTypeRef.coneTypeSafe() - ?.findVisibilityExposure(context, functionVisibility) ?: return@forEachIndexed + val (restricting, restrictingVisibility) = valueParameter.returnTypeRef.coneType + .findVisibilityExposure(context, functionVisibility) ?: return@forEachIndexed reporter.reportOn( valueParameter.source, FirErrors.EXPOSED_PARAMETER_TYPE, @@ -149,8 +149,8 @@ object FirExposedVisibilityDeclarationChecker : FirBasicDeclarationChecker() { val propertyVisibility = declaration.effectiveVisibility if (propertyVisibility == EffectiveVisibility.Local) return - declaration.returnTypeRef.coneTypeSafe() - ?.findVisibilityExposure(context, propertyVisibility)?.let { (restricting, restrictingVisibility) -> + declaration.returnTypeRef.coneType + .findVisibilityExposure(context, propertyVisibility)?.let { (restricting, restrictingVisibility) -> if (declaration.fromPrimaryConstructor == true) { reporter.reportOn( declaration.source, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirFunctionReturnTypeMismatchChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirFunctionReturnTypeMismatchChecker.kt index 43205cd0d62..68bebb4865b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirFunctionReturnTypeMismatchChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirFunctionReturnTypeMismatchChecker.kt @@ -37,7 +37,7 @@ object FirFunctionReturnTypeMismatchChecker : FirReturnExpressionChecker() { else targetElement.returnTypeRef.coneType val typeContext = context.session.typeContext - val returnExpressionType = resultExpression.typeRef.coneTypeSafe() ?: return + val returnExpressionType = resultExpression.typeRef.coneType if (!isSubtypeForTypeMismatch(typeContext, subtype = returnExpressionType, supertype = functionReturnType)) { if (resultExpression.isNullLiteral && functionReturnType.nullability == ConeNullability.NOT_NULL) { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirOptInUsageBaseChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirOptInUsageBaseChecker.kt index 73ceb2334cf..08b90f7e203 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirOptInUsageBaseChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirOptInUsageBaseChecker.kt @@ -157,7 +157,7 @@ object FirOptInUsageBaseChecker { } if (fir !is FirConstructor) { // Without coneTypeSafe v fails in MT test (FirRenderer.kt) - fir.returnTypeRef.coneTypeSafe().addExperimentalities(context, result, visited) + fir.returnTypeRef.coneType.addExperimentalities(context, result, visited) fir.receiverTypeRef?.coneType.addExperimentalities(context, result, visited) if (fir is FirSimpleFunction) { fir.valueParameters.forEach { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirSuspendCallChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirSuspendCallChecker.kt index a4bf9ee31b7..4e135e8c0c0 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirSuspendCallChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirSuspendCallChecker.kt @@ -223,7 +223,7 @@ object FirSuspendCallChecker : FirQualifiedAccessExpressionChecker() { calledDeclarationSymbol: FirCallableSymbol<*> ): Triple { if (this is FirImplicitInvokeCall && - dispatchReceiver.typeRef.coneTypeSafe()?.isSuspendFunctionType(session) == true + dispatchReceiver != FirNoReceiverExpression && dispatchReceiver.typeRef.coneType.isSuspendFunctionType(session) ) { val variableForInvoke = dispatchReceiver val variableForInvokeType = variableForInvoke.typeRef.coneType diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt index 3d629004fd2..af9e4a08eef 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt @@ -235,7 +235,7 @@ abstract class AbstractDiagnosticCollectorVisitor( withLabelAndReceiverType( labelName, declaration, - receiverTypeRef?.coneTypeSafe() + receiverTypeRef?.coneType ) { visitNestedElements(declaration) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt index 243f0ec40fc..92fc3a33830 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt @@ -745,8 +745,7 @@ class CallAndReferenceGenerator( val map = mutableMapOf() for ((index, typeParameter) in function.typeParameters.withIndex()) { val typeProjection = typeArguments.getOrNull(index) as? FirTypeProjectionWithVariance ?: continue - val type = typeProjection.typeRef.coneTypeSafe() ?: continue - map[typeParameter.symbol] = type + map[typeParameter.symbol] = typeProjection.typeRef.coneType } return ConeSubstitutorByMap(map, session) } 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 daa2e408967..094f4cab2ae 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 @@ -179,8 +179,7 @@ private fun ConeTypeParameterType.hasNotNullUpperBound(): Boolean { } val FirTypeRef.canBeNull: Boolean - // TODO: replace with coneType (for some reason, implicit type still can arise here) - get() = coneTypeSafe()?.canBeNull == true + get() = coneType.canBeNull val ConeKotlinType.canBeNull: Boolean get() {