From 194741b96b1b8c154a3c8b12cc94dd75ebfc2235 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 24 Aug 2022 10:59:02 +0300 Subject: [PATCH] [FIR] Remove incorrect FirClassSymbol<*>.superConeTypes utility Replace all usages with member `FirClassSymbol.resolvedSuperTypes` --- .../fir/components/KtFirExpressionTypeProvider.kt | 2 +- .../api/fir/components/KtFirTypeProvider.kt | 7 +++---- .../checkers/ConeTypeCompatibilityChecker.kt | 2 +- .../checkers/expression/FirSuspendCallChecker.kt | 13 ++++--------- .../transformers/mpp/FirExpectActualResolver.kt | 4 ++-- .../fir/declarations/utils/FirDeclarationUtil.kt | 6 ------ .../fir/SerializationFirResolveExtension.kt | 3 +-- 7 files changed, 12 insertions(+), 25 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt index caeb3623fac..f18b1ac90ec 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt @@ -48,7 +48,7 @@ internal class KtFirExpressionTypeProvider( val containingClass = (fir.dispatchReceiver as? FirThisReceiverExpression)?.calleeReference?.boundSymbol as? FirClassSymbol<*> if (fir.calleeReference is FirSuperReference && fir.typeRef is FirErrorTypeRef && containingClass != null) { - val superTypes = containingClass.superConeTypes + val superTypes = containingClass.resolvedSuperTypes when (superTypes.size) { 0 -> analysisSession.builtinTypes.ANY 1 -> superTypes.single().asKtType() diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt index 1cb60425edb..a5b01e1690d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.fir.analysis.checkers.ConeTypeCompatibilityChecker.i import org.jetbrains.kotlin.fir.analysis.checkers.typeParameterSymbols import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass -import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirGetClassCall @@ -147,9 +146,9 @@ internal class KtFirTypeProvider( val session = analysisSession.firResolveSession.useSiteFirSession val symbol = lookupTag.toSymbol(session) val superTypes = when (symbol) { - is FirAnonymousObjectSymbol -> symbol.superConeTypes - is FirRegularClassSymbol -> symbol.superConeTypes - is FirTypeAliasSymbol -> symbol.fullyExpandedClass(session)?.superConeTypes ?: return emptySequence() + is FirAnonymousObjectSymbol -> symbol.resolvedSuperTypes + is FirRegularClassSymbol -> symbol.resolvedSuperTypes + is FirTypeAliasSymbol -> symbol.fullyExpandedClass(session)?.resolvedSuperTypes ?: return emptySequence() is FirTypeParameterSymbol -> symbol.resolvedBounds.map { it.type } else -> return emptySequence() } 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 f1a1e8732bf..068fb10a45a 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 @@ -440,7 +440,7 @@ object ConeTypeCompatibilityChecker { val isInterface: Boolean get() = firClass.isInterface val superClasses: Set by lazy { - firClass.superConeTypes.mapNotNull { it.lookupTag.toFirClassWithSuperClasses(ctx) }.toSet() + firClass.resolvedSuperTypes.mapNotNull { (it as? ConeClassLikeType)?.lookupTag?.toFirClassWithSuperClasses(ctx) }.toSet() } @OptIn(ExperimentalStdlibApi::class) 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 4e135e8c0c0..6e9dd2688fc 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 @@ -6,19 +6,17 @@ package org.jetbrains.kotlin.fir.analysis.checkers.expression import org.jetbrains.kotlin.KtNodeTypes -import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext -import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors -import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.analysis.getChild import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId import org.jetbrains.kotlin.fir.declarations.utils.isSuspend -import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference @@ -31,11 +29,8 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.types.* -import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.StandardClassIds -import org.jetbrains.kotlin.psi -import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes import org.jetbrains.kotlin.utils.addToStdlib.lastIsInstanceOrNull @@ -197,7 +192,7 @@ object FirSuspendCallChecker : FirQualifiedAccessExpressionChecker() { if (regularClassSymbol.getAnnotationByClassId(StandardClassIds.Annotations.RestrictsSuspension) != null) { return true } - return regularClassSymbol.superConeTypes.any { it.isRestrictSuspensionReceiver(session) } + return regularClassSymbol.resolvedSuperTypes.any { it.isRestrictSuspensionReceiver(session) } } is ConeTypeParameterType -> { return lookupTag.typeParameterSymbol.resolvedBounds.any { it.coneType.isRestrictSuspensionReceiver(session) } @@ -248,4 +243,4 @@ object FirSuspendCallChecker : FirQualifiedAccessExpressionChecker() { private enum class SuspendCallArgumentKind { FUN, LAMBDA -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt index d65569efadf..679e30a4027 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt @@ -149,8 +149,8 @@ object FirExpectActualResolver { // Subtract kotlin.Any from supertypes because it's implicitly added if no explicit supertype is specified, // and not added if an explicit supertype _is_ specified - val expectSupertypes = expectClassSymbol.superConeTypes.filterNot { it.classId == actualSession.builtinTypes.anyType.id } - val actualSupertypes = actualClass.superConeTypes.filterNot { it.classId == actualSession.builtinTypes.anyType.id } + val expectSupertypes = expectClassSymbol.resolvedSuperTypes.filterNot { it.classId == actualSession.builtinTypes.anyType.id } + val actualSupertypes = actualClass.resolvedSuperTypes.filterNot { it.classId == actualSession.builtinTypes.anyType.id } if ( expectSupertypes.map(substitutor::substituteOrSelf).any { expectSupertype -> actualSupertypes.none { actualSupertype -> diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt index 85c288e9b16..debf932e376 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt @@ -24,12 +24,6 @@ val FirClassLikeDeclaration.classId val FirClass.classId: ClassId get() = symbol.classId -val FirClassSymbol<*>.superConeTypes: List - get() = when (this) { - is FirRegularClassSymbol -> fir.superConeTypes - is FirAnonymousObjectSymbol -> fir.superConeTypes - } - val FirClass.superConeTypes: List get() = superTypeRefs.mapNotNull { it.coneTypeSafe() } val FirClass.anonymousInitializers: List diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt index d2a01ad9997..393144cfec5 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.builder.* import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.origin -import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar import org.jetbrains.kotlin.fir.extensions.MemberGenerationContext @@ -100,7 +99,7 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene SerialEntityNames.LOAD_NAME, SerialEntityNames.SERIAL_DESC_FIELD_NAME ) - if (classSymbol.superConeTypes.any { + if (classSymbol.resolvedSuperTypes.any { it.classId == ClassId( SerializationPackages.internalPackageFqName, SerialEntityNames.GENERATED_SERIALIZER_CLASS