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.
This commit is contained in:
Mikhail Glukhikh
2023-12-20 10:22:17 +01:00
committed by Space Team
parent 79e041a310
commit 2f29738989
4 changed files with 9 additions and 10 deletions
@@ -617,7 +617,7 @@ private class ElementsToShortenCollector(
private fun FirScope.correspondingClassIdIfExists(): ClassId = when (this) { private fun FirScope.correspondingClassIdIfExists(): ClassId = when (this) {
is FirNestedClassifierScope -> klass.classId is FirNestedClassifierScope -> klass.classId
is FirNestedClassifierScopeWithSubstitution -> originalScope.correspondingClassIdIfExists() 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") { else -> errorWithAttachment("FirScope ${this::class}` is expected to be one of FirNestedClassifierScope and FirClassUseSiteMemberScope to get ClassId") {
withEntry("firScope", this@correspondingClassIdIfExists) { it.toString() } withEntry("firScope", this@correspondingClassIdIfExists) { it.toString() }
} }
@@ -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.symbols.FirJavaOverriddenSyntheticPropertySymbol
import org.jetbrains.kotlin.fir.java.toConeKotlinTypeProbablyFlexible import org.jetbrains.kotlin.fir.java.toConeKotlinTypeProbablyFlexible
import org.jetbrains.kotlin.fir.resolve.defaultType 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.*
import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope
import org.jetbrains.kotlin.fir.scopes.impl.FirTypeIntersectionScopeContext.ResultOfIntersection import org.jetbrains.kotlin.fir.scopes.impl.FirTypeIntersectionScopeContext.ResultOfIntersection
@@ -55,7 +55,7 @@ class JavaClassUseSiteMemberScope(
superTypeScopes: List<FirTypeScope>, superTypeScopes: List<FirTypeScope>,
declaredMemberScope: FirContainingNamesAwareScope declaredMemberScope: FirContainingNamesAwareScope
) : AbstractFirUseSiteMemberScope( ) : AbstractFirUseSiteMemberScope(
klass.classId, klass.symbol.toLookupTag(),
session, session,
JavaOverrideChecker(session, klass.javaTypeParameterStack, superTypeScopes, considerReturnTypeKinds = true), JavaOverrideChecker(session, klass.javaTypeParameterStack, superTypeScopes, considerReturnTypeKinds = true),
superTypeScopes, superTypeScopes,
@@ -343,7 +343,7 @@ class JavaClassUseSiteMemberScope(
private fun FirNamedFunctionSymbol.createSuspendView(): FirSimpleFunction? { private fun FirNamedFunctionSymbol.createSuspendView(): FirSimpleFunction? {
val continuationParameter = fir.valueParameters.lastOrNull() ?: return null 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 val continuationParameterType = continuationParameter
.returnTypeRef .returnTypeRef
.resolveIfJavaType(session, owner.javaTypeParameterStack) .resolveIfJavaType(session, owner.javaTypeParameterStack)
@@ -824,6 +824,6 @@ class JavaClassUseSiteMemberScope(
} }
override fun toString(): String { override fun toString(): String {
return "Java use site scope of $classId" return "Java use site scope of ${ownerClassLookupTag.classId}"
} }
} }
@@ -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.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.FirTypeIntersectionScopeContext.ResultOfIntersection 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.symbols.impl.*
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
abstract class AbstractFirUseSiteMemberScope( abstract class AbstractFirUseSiteMemberScope(
val classId: ClassId, val ownerClassLookupTag: ConeClassLikeLookupTag,
session: FirSession, session: FirSession,
overrideChecker: FirOverrideChecker, overrideChecker: FirOverrideChecker,
protected val superTypeScopes: List<FirTypeScope>, protected val superTypeScopes: List<FirTypeScope>,
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirClass 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.declarations.utils.isStatic
import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
@@ -22,7 +21,7 @@ class FirClassUseSiteMemberScope(
superTypeScopes: List<FirTypeScope>, superTypeScopes: List<FirTypeScope>,
declaredMemberScope: FirContainingNamesAwareScope declaredMemberScope: FirContainingNamesAwareScope
) : AbstractFirUseSiteMemberScope( ) : AbstractFirUseSiteMemberScope(
klass.classId, klass.symbol.toLookupTag(),
session, session,
session.firOverrideChecker, session.firOverrideChecker,
superTypeScopes, superTypeScopes,
@@ -92,6 +91,6 @@ class FirClassUseSiteMemberScope(
} }
override fun toString(): String { override fun toString(): String {
return "Use site scope of $classId" return "Use site scope of ${ownerClassLookupTag.classId}"
} }
} }