From e232cc92f90e10584108d0dcca3e6bb43d5d9342 Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Mon, 6 Feb 2023 11:07:14 +0100 Subject: [PATCH] [FIR] Eliminate ClassId.isSame call from FirClass.isSubclassOf ^KT-55664 Fixed --- .../org/jetbrains/kotlin/fir/FirVisibilityChecker.kt | 2 +- .../jetbrains/kotlin/fir/resolve/SupertypeUtils.kt | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt index b58ef528602..4e161ad7266 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt @@ -375,7 +375,7 @@ abstract class FirVisibilityChecker : FirSessionComponent { for (declaration in containingDeclarationOfUseSite) { if (declaration !is FirClass) continue val boundSymbol = declaration.symbol - if (boundSymbol.classId.isSame(ownerLookupTag.classId)) { + if (boundSymbol.toLookupTag() == ownerLookupTag) { return true } } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt index 80e7b0d1efd..4aa7b22895c 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.resolve import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.utils.classId import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes @@ -109,7 +108,7 @@ fun FirClass.isSubclassOf( supertypeSupplier: SupertypeSupplier = SupertypeSupplier.Default, lookupInterfaces: Boolean = true, ): Boolean { - if (classId.isSame(ownerLookupTag.classId)) { + if (symbol.toLookupTag() == ownerLookupTag) { return !isStrict } @@ -121,15 +120,11 @@ fun FirClass.isSubclassOf( substituteTypes = false, supertypeSupplier ).any { superType -> - // Note: We check just classId here, so type substitution isn't needed - superType.lookupTag.classId.isSame(ownerLookupTag.classId) + // Note: We just check lookupTag here, so type substitution isn't needed + superType.lookupTag == ownerLookupTag } } -// 'local' isn't taken into account here -fun ClassId.isSame(other: ClassId): Boolean = - packageFqName == other.packageFqName && relativeClassName == other.relativeClassName - fun FirClass.isThereLoopInSupertypes(session: FirSession): Boolean { val visitedSymbols: MutableSet> = SmartSet.create() val inProcess: MutableSet> = mutableSetOf()