[FIR] Save classId in declared and use site scopes

This is needed for debug purposes, because without classId or reference
  to class it's very hard to understand which scope you are observing
  in debugger
This commit is contained in:
Dmitriy Novozhilov
2021-11-17 12:26:32 +03:00
parent a695d9bf59
commit 6edf191b7f
6 changed files with 16 additions and 8 deletions
@@ -10,10 +10,7 @@ import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
import org.jetbrains.kotlin.fir.declarations.utils.isInterface import org.jetbrains.kotlin.fir.declarations.utils.*
import org.jetbrains.kotlin.fir.declarations.utils.isOperator
import org.jetbrains.kotlin.fir.declarations.utils.modality
import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.java.declarations.buildJavaMethodCopy import org.jetbrains.kotlin.fir.java.declarations.buildJavaMethodCopy
import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameterCopy import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameterCopy
@@ -25,6 +22,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope
import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptor import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptor
import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmSignature import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmSignature
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.symbols.impl.isStatic
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.load.java.BuiltinSpecialProperties import org.jetbrains.kotlin.load.java.BuiltinSpecialProperties
import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAbi
@@ -44,6 +42,7 @@ class JavaClassUseSiteMemberScope(
superTypesScope: FirTypeScope, superTypesScope: FirTypeScope,
declaredMemberScope: FirContainingNamesAwareScope declaredMemberScope: FirContainingNamesAwareScope
) : AbstractFirUseSiteMemberScope( ) : AbstractFirUseSiteMemberScope(
klass.classId,
session, session,
JavaOverrideChecker(session, klass.javaTypeParameterStack, superTypesScope, considerReturnTypeKinds = true), JavaOverrideChecker(session, klass.javaTypeParameterStack, superTypesScope, considerReturnTypeKinds = true),
superTypesScope, superTypesScope,
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.FirSessionComponent
import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.utils.classId
import org.jetbrains.kotlin.fir.declarations.utils.delegateFields import org.jetbrains.kotlin.fir.declarations.utils.delegateFields
import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.declarations.utils.isExpect
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.*
@@ -54,6 +55,7 @@ class FirKotlinScopeProvider(
useSiteSuperType.scopeForSupertype(useSiteSession, scopeSession, klass) useSiteSuperType.scopeForSupertype(useSiteSession, scopeSession, klass)
} }
FirClassUseSiteMemberScope( FirClassUseSiteMemberScope(
klass.classId,
useSiteSession, useSiteSession,
FirTypeIntersectionScope.prepareIntersectionScope( FirTypeIntersectionScope.prepareIntersectionScope(
useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes, useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes,
@@ -12,9 +12,11 @@ import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
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,
session: FirSession, session: FirSession,
overrideChecker: FirOverrideChecker, overrideChecker: FirOverrideChecker,
protected val superTypesScope: FirTypeScope, protected val superTypesScope: FirTypeScope,
@@ -7,15 +7,17 @@ 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.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.classId
import org.jetbrains.kotlin.fir.declarations.utils.isSynthetic import org.jetbrains.kotlin.fir.declarations.utils.isSynthetic
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
abstract class FirClassDeclaredMemberScope : FirContainingNamesAwareScope() abstract class FirClassDeclaredMemberScope(val classId: ClassId) : FirContainingNamesAwareScope()
class FirClassDeclaredMemberScopeImpl( class FirClassDeclaredMemberScopeImpl(
val useSiteSession: FirSession, val useSiteSession: FirSession,
@@ -23,7 +25,7 @@ class FirClassDeclaredMemberScopeImpl(
useLazyNestedClassifierScope: Boolean = false, useLazyNestedClassifierScope: Boolean = false,
existingNames: List<Name>? = null, existingNames: List<Name>? = null,
symbolProvider: FirSymbolProvider? = null symbolProvider: FirSymbolProvider? = null
) : FirClassDeclaredMemberScope() { ) : FirClassDeclaredMemberScope(klass.classId) {
private val nestedClassifierScope: FirContainingNamesAwareScope? = if (useLazyNestedClassifierScope) { private val nestedClassifierScope: FirContainingNamesAwareScope? = if (useLazyNestedClassifierScope) {
lazyNestedClassifierScope(klass.symbol.classId, existingNames!!, symbolProvider!!) lazyNestedClassifierScope(klass.symbol.classId, existingNames!!, symbolProvider!!)
} else { } else {
@@ -6,19 +6,22 @@
package org.jetbrains.kotlin.fir.scopes.impl 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.FirProperty import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.isStatic import org.jetbrains.kotlin.fir.symbols.impl.isStatic
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class FirClassUseSiteMemberScope( class FirClassUseSiteMemberScope(
classId: ClassId,
session: FirSession, session: FirSession,
superTypesScope: FirTypeScope, superTypesScope: FirTypeScope,
declaredMemberScope: FirContainingNamesAwareScope declaredMemberScope: FirContainingNamesAwareScope
) : AbstractFirUseSiteMemberScope(session, FirStandardOverrideChecker(session), superTypesScope, declaredMemberScope) { ) : AbstractFirUseSiteMemberScope(classId, session, FirStandardOverrideChecker(session), superTypesScope, declaredMemberScope) {
override fun doProcessProperties(name: Name): Collection<FirVariableSymbol<*>> { override fun doProcessProperties(name: Name): Collection<FirVariableSymbol<*>> {
val seen = mutableSetOf<FirVariableSymbol<*>>() val seen = mutableSetOf<FirVariableSymbol<*>>()
@@ -28,7 +28,7 @@ class FirGeneratedClassDeclaredMemberScope(
val useSiteSession: FirSession, val useSiteSession: FirSession,
val firClass: FirClass, val firClass: FirClass,
needNestedClassifierScope: Boolean needNestedClassifierScope: Boolean
) : FirClassDeclaredMemberScope() { ) : FirClassDeclaredMemberScope(firClass.classId) {
private val extensions: List<FirDeclarationGenerationExtension> = firClass.findGeneratedExtensions(useSiteSession) { private val extensions: List<FirDeclarationGenerationExtension> = firClass.findGeneratedExtensions(useSiteSession) {
needToGenerateAdditionalMembersInClass(it) needToGenerateAdditionalMembersInClass(it)
} }