From 2f297389891ddf9bdb28067427a41dc97f253a64 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 20 Dec 2023 10:22:17 +0100 Subject: [PATCH] K2: use lookupTag instead of classId in use-site scopes We used this classId to get an associated symbol, but this way is anyway not recommended (e.g. problems with local classes). In this commit we migrated to usage of lookup tags instead. --- .../api/fir/components/KtFirReferenceShortener.kt | 2 +- .../kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt | 8 ++++---- .../fir/scopes/impl/AbstractFirUseSiteMemberScope.kt | 4 ++-- .../kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt | 5 ++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt index 57553b76fda..10f8901c101 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt @@ -617,7 +617,7 @@ private class ElementsToShortenCollector( private fun FirScope.correspondingClassIdIfExists(): ClassId = when (this) { is FirNestedClassifierScope -> klass.classId is FirNestedClassifierScopeWithSubstitution -> originalScope.correspondingClassIdIfExists() - is FirClassUseSiteMemberScope -> classId + is FirClassUseSiteMemberScope -> ownerClassLookupTag.classId else -> errorWithAttachment("FirScope ${this::class}` is expected to be one of FirNestedClassifierScope and FirClassUseSiteMemberScope to get ClassId") { withEntry("firScope", this@correspondingClassIdIfExists) { it.toString() } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index 739f1d09b1c..3c38d58e2e9 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.fir.java.syntheticPropertiesStorage import org.jetbrains.kotlin.fir.java.symbols.FirJavaOverriddenSyntheticPropertySymbol import org.jetbrains.kotlin.fir.java.toConeKotlinTypeProbablyFlexible import org.jetbrains.kotlin.fir.resolve.defaultType -import org.jetbrains.kotlin.fir.resolve.providers.toSymbol +import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope import org.jetbrains.kotlin.fir.scopes.impl.FirTypeIntersectionScopeContext.ResultOfIntersection @@ -55,7 +55,7 @@ class JavaClassUseSiteMemberScope( superTypeScopes: List, declaredMemberScope: FirContainingNamesAwareScope ) : AbstractFirUseSiteMemberScope( - klass.classId, + klass.symbol.toLookupTag(), session, JavaOverrideChecker(session, klass.javaTypeParameterStack, superTypeScopes, considerReturnTypeKinds = true), superTypeScopes, @@ -343,7 +343,7 @@ class JavaClassUseSiteMemberScope( private fun FirNamedFunctionSymbol.createSuspendView(): FirSimpleFunction? { val continuationParameter = fir.valueParameters.lastOrNull() ?: return null - val owner = classId.toSymbol(session)?.fir as? FirJavaClass ?: return null + val owner = ownerClassLookupTag.toSymbol(session)?.fir as? FirJavaClass ?: return null val continuationParameterType = continuationParameter .returnTypeRef .resolveIfJavaType(session, owner.javaTypeParameterStack) @@ -824,6 +824,6 @@ class JavaClassUseSiteMemberScope( } override fun toString(): String { - return "Java use site scope of $classId" + return "Java use site scope of ${ownerClassLookupTag.classId}" } } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt index 8227cd1acd4..f066392ee5a 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt @@ -10,13 +10,13 @@ import org.jetbrains.kotlin.fir.declarations.utils.isStatic import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.impl.FirTypeIntersectionScopeContext.ResultOfIntersection +import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name abstract class AbstractFirUseSiteMemberScope( - val classId: ClassId, + val ownerClassLookupTag: ConeClassLikeLookupTag, session: FirSession, overrideChecker: FirOverrideChecker, protected val superTypeScopes: List, diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt index 5aa431fb19b..7adef0cfa04 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirClass -import org.jetbrains.kotlin.fir.declarations.utils.classId import org.jetbrains.kotlin.fir.declarations.utils.isStatic import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope @@ -22,7 +21,7 @@ class FirClassUseSiteMemberScope( superTypeScopes: List, declaredMemberScope: FirContainingNamesAwareScope ) : AbstractFirUseSiteMemberScope( - klass.classId, + klass.symbol.toLookupTag(), session, session.firOverrideChecker, superTypeScopes, @@ -92,6 +91,6 @@ class FirClassUseSiteMemberScope( } override fun toString(): String { - return "Use site scope of $classId" + return "Use site scope of ${ownerClassLookupTag.classId}" } }