From 1cd4f3ad2fc0f39c94c1798344d508d83de4bb72 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Fri, 30 Sep 2022 15:56:32 +0300 Subject: [PATCH] [FIR] Get rid of all usages of `cast` in FIR modules --- .../declaration/FirExpectActualDeclarationChecker.kt | 10 ++++++++-- .../kotlin/fir/types/ConeInferenceContext.kt | 11 ++++++----- .../resolve/inference/ConstraintSystemCompleter.kt | 6 +++--- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt index 59b5b6f291d..35533b03889 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.toSymbol import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility.* -import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull @Suppress("DuplicatedCode") @@ -94,7 +93,14 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() { } Compatible !in compatibilityToMembersMap -> { - reporter.reportOn(source, FirErrors.ACTUAL_WITHOUT_EXPECT, symbol, compatibilityToMembersMap.cast(), context) + @Suppress("UNCHECKED_CAST") + reporter.reportOn( + source, + FirErrors.ACTUAL_WITHOUT_EXPECT, + symbol, + compatibilityToMembersMap as Map>, Collection>>, + context + ) } else -> { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeInferenceContext.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeInferenceContext.kt index 7d97830be69..7dc42d09272 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeInferenceContext.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeInferenceContext.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.types.AbstractTypeRefiner import org.jetbrains.kotlin.types.TypeCheckerState import org.jetbrains.kotlin.types.model.* import org.jetbrains.kotlin.utils.DFS -import org.jetbrains.kotlin.utils.addToStdlib.cast interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeContext { @@ -260,10 +259,11 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo ): CapturedTypeMarker { require(lowerType is ConeKotlinType?) require(constructorProjection is ConeTypeProjection) + @Suppress("UNCHECKED_CAST") return ConeCapturedType( captureStatus, lowerType, - constructor = ConeCapturedTypeConstructor(constructorProjection, constructorSupertypes.cast()) + constructor = ConeCapturedTypeConstructor(constructorProjection, constructorSupertypes as List) ) } @@ -284,7 +284,8 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo override fun SimpleTypeMarker.replaceArguments(newArguments: List): SimpleTypeMarker { require(this is ConeKotlinType) - return this.withArguments(newArguments.cast>().toTypedArray()) + @Suppress("UNCHECKED_CAST") + return this.withArguments((newArguments as List).toTypedArray()) } override fun SimpleTypeMarker.replaceArguments(replacement: (TypeArgumentMarker) -> TypeArgumentMarker): SimpleTypeMarker { @@ -506,7 +507,7 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo } override fun KotlinTypeMarker.extractArgumentsForFunctionalTypeOrSubtype(): List { - val builtInFunctionalType = getFunctionalTypeFromSupertypes().cast() + val builtInFunctionalType = getFunctionalTypeFromSupertypes() as ConeKotlinType return buildList { // excluding return type for (index in 0 until builtInFunctionalType.argumentsCount() - 1) { @@ -529,7 +530,7 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo var functionalSupertype: KotlinTypeMarker? = null simpleType.anySuperTypeConstructor { type -> simpleType.fastCorrespondingSupertypes(type.typeConstructor())?.any { superType -> - val isFunctional = superType.cast().isBuiltinFunctionalType(session) + val isFunctional = (superType as ConeKotlinType).isBuiltinFunctionalType(session) if (isFunctional) functionalSupertype = superType isFunctional diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt index 536bed999e4..917794c0b1f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt @@ -35,7 +35,6 @@ import org.jetbrains.kotlin.types.model.KotlinTypeMarker import org.jetbrains.kotlin.types.model.TypeConstructorMarker import org.jetbrains.kotlin.types.model.TypeVariableMarker import org.jetbrains.kotlin.utils.addIfNotNull -import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.filterIsInstanceWithChecker class ConstraintSystemCompleter(components: BodyResolveComponents, private val context: BodyResolveContext) { @@ -220,8 +219,9 @@ class ConstraintSystemCompleter(components: BodyResolveComponents, private val c resolutionContext: ResolutionContext, argument: PostponedAtomWithRevisableExpectedType, ): Boolean = with(c) { - val revisedExpectedType: ConeKotlinType = - argument.revisedExpectedType?.takeIf { it.isFunctionOrKFunctionWithAnySuspendability() }?.cast() ?: return false + val revisedExpectedType = argument.revisedExpectedType + ?.takeIf { it.isFunctionOrKFunctionWithAnySuspendability() } as ConeKotlinType? + ?: return false when (argument) { is ResolvedCallableReferenceAtom ->