FIR: Add FirTypeScope
^KT-35495 Relates
This commit is contained in:
@@ -14,10 +14,13 @@ import org.jetbrains.kotlin.fir.java.scopes.JavaClassEnhancementScope
|
|||||||
import org.jetbrains.kotlin.fir.java.scopes.JavaClassUseSiteMemberScope
|
import org.jetbrains.kotlin.fir.java.scopes.JavaClassUseSiteMemberScope
|
||||||
import org.jetbrains.kotlin.fir.java.scopes.JavaOverrideChecker
|
import org.jetbrains.kotlin.fir.java.scopes.JavaOverrideChecker
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.*
|
import org.jetbrains.kotlin.fir.scopes.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
|
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
|
||||||
|
|
||||||
@@ -34,7 +37,7 @@ class JavaScopeProvider(
|
|||||||
klass: FirClass<*>,
|
klass: FirClass<*>,
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
): FirScope =
|
): FirTypeScope =
|
||||||
buildJavaEnhancementScope(useSiteSession, klass.symbol as FirRegularClassSymbol, scopeSession, mutableSetOf())
|
buildJavaEnhancementScope(useSiteSession, klass.symbol as FirRegularClassSymbol, scopeSession, mutableSetOf())
|
||||||
|
|
||||||
private fun buildJavaEnhancementScope(
|
private fun buildJavaEnhancementScope(
|
||||||
@@ -86,7 +89,7 @@ class JavaScopeProvider(
|
|||||||
}
|
}
|
||||||
JavaClassUseSiteMemberScope(
|
JavaClassUseSiteMemberScope(
|
||||||
regularClass, useSiteSession,
|
regularClass, useSiteSession,
|
||||||
FirSuperTypeScope.prepareSupertypeScope(
|
FirSuperTypeScope.prepareOverrideAwareSupertypeScope(
|
||||||
useSiteSession,
|
useSiteSession,
|
||||||
JavaOverrideChecker(
|
JavaOverrideChecker(
|
||||||
useSiteSession,
|
useSiteSession,
|
||||||
@@ -110,7 +113,14 @@ class JavaScopeProvider(
|
|||||||
val wrappedDeclaredScope = declaredMemberScopeDecorator(klass, declaredScope, useSiteSession, scopeSession)
|
val wrappedDeclaredScope = declaredMemberScopeDecorator(klass, declaredScope, useSiteSession, scopeSession)
|
||||||
JavaClassEnhancementScope(
|
JavaClassEnhancementScope(
|
||||||
useSiteSession, JavaClassUseSiteMemberScope(
|
useSiteSession, JavaClassUseSiteMemberScope(
|
||||||
klass, useSiteSession, superTypesScope = object : FirScope() {}, declaredMemberScope = wrappedDeclaredScope
|
klass, useSiteSession,
|
||||||
|
superTypesScope = object : FirTypeScope() {
|
||||||
|
override fun processOverriddenFunctions(
|
||||||
|
functionSymbol: FirFunctionSymbol<*>,
|
||||||
|
processor: (FirFunctionSymbol<*>) -> ProcessorAction
|
||||||
|
): ProcessorAction = ProcessorAction.STOP
|
||||||
|
},
|
||||||
|
declaredMemberScope = wrappedDeclaredScope
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirConstructorBuilder
|
|||||||
import org.jetbrains.kotlin.fir.declarations.builder.FirPrimaryConstructorBuilder
|
import org.jetbrains.kotlin.fir.declarations.builder.FirPrimaryConstructorBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
|
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||||
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.expressions.FirConstKind
|
import org.jetbrains.kotlin.fir.expressions.FirConstKind
|
||||||
@@ -24,7 +24,8 @@ import org.jetbrains.kotlin.fir.java.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.java.enhancement.*
|
import org.jetbrains.kotlin.fir.java.enhancement.*
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptor
|
import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptor
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
@@ -42,7 +43,7 @@ import org.jetbrains.kotlin.utils.Jsr305State
|
|||||||
class JavaClassEnhancementScope(
|
class JavaClassEnhancementScope(
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val useSiteMemberScope: JavaClassUseSiteMemberScope
|
private val useSiteMemberScope: JavaClassUseSiteMemberScope
|
||||||
) : FirScope() {
|
) : FirTypeScope() {
|
||||||
private val owner: FirRegularClass = useSiteMemberScope.symbol.fir
|
private val owner: FirRegularClass = useSiteMemberScope.symbol.fir
|
||||||
|
|
||||||
private val javaTypeParameterStack: JavaTypeParameterStack =
|
private val javaTypeParameterStack: JavaTypeParameterStack =
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.FirValueParameterBuilder
|
import org.jetbrains.kotlin.fir.declarations.builder.FirValueParameterBuilder
|
||||||
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.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
||||||
@@ -17,6 +16,7 @@ import org.jetbrains.kotlin.fir.java.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertiesScope
|
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertiesScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
|
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
|
||||||
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
class JavaClassUseSiteMemberScope(
|
class JavaClassUseSiteMemberScope(
|
||||||
klass: FirRegularClass,
|
klass: FirRegularClass,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
superTypesScope: FirScope,
|
superTypesScope: FirTypeScope,
|
||||||
declaredMemberScope: FirScope
|
declaredMemberScope: FirScope
|
||||||
) : AbstractFirUseSiteMemberScope(
|
) : AbstractFirUseSiteMemberScope(
|
||||||
session,
|
session,
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ package org.jetbrains.kotlin.fir.scopes.jvm
|
|||||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSettings
|
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSettings
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
@@ -19,7 +21,7 @@ class JvmMappedScope(
|
|||||||
private val declaredMemberScope: FirScope,
|
private val declaredMemberScope: FirScope,
|
||||||
private val javaMappedClassUseSiteScope: FirScope,
|
private val javaMappedClassUseSiteScope: FirScope,
|
||||||
private val signatures: Signatures
|
private val signatures: Signatures
|
||||||
) : FirScope() {
|
) : FirTypeScope() {
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||||
val whiteListSignatures = signatures.whiteListSignaturesByName[name]
|
val whiteListSignatures = signatures.whiteListSignaturesByName[name]
|
||||||
@@ -37,6 +39,14 @@ class JvmMappedScope(
|
|||||||
declaredMemberScope.processFunctionsByName(name, processor)
|
declaredMemberScope.processFunctionsByName(name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JvmMappedScope is basically used as declaration scope but it's being wrapped into substitution scopes where
|
||||||
|
// a use-site (FirOverrideAwareScope) is expected
|
||||||
|
// So, we put here a stub implementation
|
||||||
|
override fun processOverriddenFunctions(
|
||||||
|
functionSymbol: FirFunctionSymbol<*>,
|
||||||
|
processor: (FirFunctionSymbol<*>) -> ProcessorAction
|
||||||
|
) = ProcessorAction.NONE
|
||||||
|
|
||||||
override fun processDeclaredConstructors(processor: (FirConstructorSymbol) -> Unit) {
|
override fun processDeclaredConstructors(processor: (FirConstructorSymbol) -> Unit) {
|
||||||
val constructorBlackList = signatures.constructorBlackList
|
val constructorBlackList = signatures.constructorBlackList
|
||||||
if (constructorBlackList.isNotEmpty()) {
|
if (constructorBlackList.isNotEmpty()) {
|
||||||
|
|||||||
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.builder
|
|||||||
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.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
||||||
|
|
||||||
@@ -16,7 +17,7 @@ object StubFirScopeProvider : FirScopeProvider() {
|
|||||||
klass: FirClass<*>,
|
klass: FirClass<*>,
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
): FirScope {
|
): FirTypeScope {
|
||||||
error("Stub")
|
error("Stub")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
|||||||
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.inferenceContext
|
import org.jetbrains.kotlin.fir.inferenceContext
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||||
@@ -43,7 +44,7 @@ inline fun <reified ID : Any, reified FS : FirScope> scopeSessionKey(): ScopeSes
|
|||||||
return object : ScopeSessionKey<ID, FS>() {}
|
return object : ScopeSessionKey<ID, FS>() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
val USE_SITE = scopeSessionKey<FirClassSymbol<*>, FirScope>()
|
val USE_SITE = scopeSessionKey<FirClassSymbol<*>, FirTypeScope>()
|
||||||
|
|
||||||
data class SubstitutionScopeKey(val type: ConeClassLikeType) : ScopeSessionKey<FirClassLikeSymbol<*>, FirClassSubstitutionScope>()
|
data class SubstitutionScopeKey(val type: ConeClassLikeType) : ScopeSessionKey<FirClassLikeSymbol<*>, FirClassSubstitutionScope>()
|
||||||
|
|
||||||
@@ -79,11 +80,11 @@ fun createSubstitution(
|
|||||||
|
|
||||||
fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
useSiteMemberScope: FirScope,
|
useSiteMemberScope: FirTypeScope,
|
||||||
declaration: FirClassLikeDeclaration<*>,
|
declaration: FirClassLikeDeclaration<*>,
|
||||||
builder: ScopeSession,
|
builder: ScopeSession,
|
||||||
derivedClassId: ClassId? = null
|
derivedClassId: ClassId? = null
|
||||||
): FirScope {
|
): FirTypeScope {
|
||||||
if (this.typeArguments.isEmpty()) return useSiteMemberScope
|
if (this.typeArguments.isEmpty()) return useSiteMemberScope
|
||||||
return builder.getOrBuild(declaration.symbol, SubstitutionScopeKey(this)) {
|
return builder.getOrBuild(declaration.symbol, SubstitutionScopeKey(this)) {
|
||||||
val typeParameters = (declaration as? FirTypeParameterRefsOwner)?.typeParameters.orEmpty()
|
val typeParameters = (declaration as? FirTypeParameterRefsOwner)?.typeParameters.orEmpty()
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class KotlinScopeProvider(
|
|||||||
klass: FirClass<*>,
|
klass: FirClass<*>,
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
): FirScope {
|
): FirTypeScope {
|
||||||
return scopeSession.getOrBuild(klass.symbol, USE_SITE) {
|
return scopeSession.getOrBuild(klass.symbol, USE_SITE) {
|
||||||
val declaredScope = declaredMemberScope(klass)
|
val declaredScope = declaredMemberScope(klass)
|
||||||
val decoratedDeclaredMemberScope =
|
val decoratedDeclaredMemberScope =
|
||||||
@@ -52,14 +52,18 @@ class KotlinScopeProvider(
|
|||||||
symbol.fir.scope(
|
symbol.fir.scope(
|
||||||
substitutor(symbol, useSiteSuperType, useSiteSession),
|
substitutor(symbol, useSiteSuperType, useSiteSession),
|
||||||
useSiteSession, scopeSession, skipPrivateMembers = true, klass.classId
|
useSiteSession, scopeSession, skipPrivateMembers = true, klass.classId
|
||||||
)
|
).let {
|
||||||
|
it as? FirTypeScope ?: error("$it is expected to be FirOverrideAwareScope")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FirClassUseSiteMemberScope(
|
FirClassUseSiteMemberScope(
|
||||||
useSiteSession,
|
useSiteSession,
|
||||||
FirSuperTypeScope.prepareSupertypeScope(useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes),
|
FirSuperTypeScope.prepareOverrideAwareSupertypeScope(
|
||||||
|
useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes
|
||||||
|
),
|
||||||
decoratedDeclaredMemberScope
|
decoratedDeclaredMemberScope
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-2
@@ -8,12 +8,15 @@ package org.jetbrains.kotlin.fir.scopes.impl
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
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.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
|
||||||
abstract class AbstractFirOverrideScope(val session: FirSession, protected val overrideChecker: FirOverrideChecker) : FirScope() {
|
abstract class AbstractFirOverrideScope(
|
||||||
|
val session: FirSession,
|
||||||
|
protected val overrideChecker: FirOverrideChecker
|
||||||
|
) : FirTypeScope() {
|
||||||
//base symbol as key, overridden as value
|
//base symbol as key, overridden as value
|
||||||
val overrideByBase = mutableMapOf<FirCallableSymbol<*>, FirCallableSymbol<*>?>()
|
val overrideByBase = mutableMapOf<FirCallableSymbol<*>, FirCallableSymbol<*>?>()
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -14,15 +14,17 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
|||||||
import org.jetbrains.kotlin.fir.declarations.builder.FirValueParameterBuilder
|
import org.jetbrains.kotlin.fir.declarations.builder.FirValueParameterBuilder
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
|
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.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
abstract class AbstractFirUseSiteMemberScope(
|
abstract class AbstractFirUseSiteMemberScope(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
overrideChecker: FirOverrideChecker,
|
overrideChecker: FirOverrideChecker,
|
||||||
protected val superTypesScope: FirScope,
|
protected val superTypesScope: FirTypeScope,
|
||||||
protected val declaredMemberScope: FirScope
|
protected val declaredMemberScope: FirScope
|
||||||
) : AbstractFirOverrideScope(session, overrideChecker) {
|
) : AbstractFirOverrideScope(session, overrideChecker) {
|
||||||
|
|
||||||
|
|||||||
+5
-4
@@ -20,7 +20,8 @@ import org.jetbrains.kotlin.fir.resolve.substitution.chain
|
|||||||
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
|
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
@@ -34,12 +35,12 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class FirClassSubstitutionScope(
|
class FirClassSubstitutionScope(
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val useSiteMemberScope: FirScope,
|
private val useSiteMemberScope: FirTypeScope,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
private val substitutor: ConeSubstitutor,
|
private val substitutor: ConeSubstitutor,
|
||||||
private val skipPrivateMembers: Boolean,
|
private val skipPrivateMembers: Boolean,
|
||||||
private val derivedClassId: ClassId? = null
|
private val derivedClassId: ClassId? = null
|
||||||
) : FirScope() {
|
) : FirTypeScope() {
|
||||||
|
|
||||||
private val fakeOverrideFunctions = mutableMapOf<FirFunctionSymbol<*>, FirFunctionSymbol<*>>()
|
private val fakeOverrideFunctions = mutableMapOf<FirFunctionSymbol<*>, FirFunctionSymbol<*>>()
|
||||||
private val fakeOverrideConstructors = mutableMapOf<FirConstructorSymbol, FirConstructorSymbol>()
|
private val fakeOverrideConstructors = mutableMapOf<FirConstructorSymbol, FirConstructorSymbol>()
|
||||||
@@ -48,7 +49,7 @@ class FirClassSubstitutionScope(
|
|||||||
private val fakeOverrideAccessors = mutableMapOf<FirAccessorSymbol, FirAccessorSymbol>()
|
private val fakeOverrideAccessors = mutableMapOf<FirAccessorSymbol, FirAccessorSymbol>()
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
session: FirSession, useSiteMemberScope: FirScope, scopeSession: ScopeSession,
|
session: FirSession, useSiteMemberScope: FirTypeScope, scopeSession: ScopeSession,
|
||||||
substitution: Map<FirTypeParameterSymbol, ConeKotlinType>,
|
substitution: Map<FirTypeParameterSymbol, ConeKotlinType>,
|
||||||
skipPrivateMembers: Boolean, derivedClassId: ClassId? = null
|
skipPrivateMembers: Boolean, derivedClassId: ClassId? = null
|
||||||
) : this(session, useSiteMemberScope, scopeSession, substitutorByMap(substitution), skipPrivateMembers, derivedClassId)
|
) : this(session, useSiteMemberScope, scopeSession, substitutorByMap(substitution), skipPrivateMembers, derivedClassId)
|
||||||
|
|||||||
+2
-1
@@ -6,13 +6,14 @@
|
|||||||
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.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirClassUseSiteMemberScope(
|
class FirClassUseSiteMemberScope(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
superTypesScope: FirScope,
|
superTypesScope: FirTypeScope,
|
||||||
declaredMemberScope: FirScope
|
declaredMemberScope: FirScope
|
||||||
) : AbstractFirUseSiteMemberScope(session, FirStandardOverrideChecker(session), superTypesScope, declaredMemberScope) {
|
) : AbstractFirUseSiteMemberScope(session, FirStandardOverrideChecker(session), superTypesScope, declaredMemberScope) {
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,10 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
|
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.fir.types.ConeFlexibleType
|
import org.jetbrains.kotlin.fir.types.ConeFlexibleType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
@@ -28,7 +30,7 @@ import kotlin.collections.HashSet
|
|||||||
class FirSuperTypeScope private constructor(
|
class FirSuperTypeScope private constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
overrideChecker: FirOverrideChecker,
|
overrideChecker: FirOverrideChecker,
|
||||||
val scopes: List<FirScope>
|
private val scopes: List<FirScope>,
|
||||||
) : AbstractFirOverrideScope(session, overrideChecker) {
|
) : AbstractFirOverrideScope(session, overrideChecker) {
|
||||||
|
|
||||||
private val absentFunctions = mutableSetOf<Name>()
|
private val absentFunctions = mutableSetOf<Name>()
|
||||||
@@ -260,5 +262,13 @@ class FirSuperTypeScope private constructor(
|
|||||||
|
|
||||||
return FirSuperTypeScope(session, overrideChecker, scopes)
|
return FirSuperTypeScope(session, overrideChecker, scopes)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This methods is needed just to preserve the possibility to move
|
||||||
|
// org.jetbrains.kotlin.fir.scopes.FirScope.processOverriddenFunctions to FirOverrideAwareScope
|
||||||
|
fun prepareOverrideAwareSupertypeScope(
|
||||||
|
session: FirSession,
|
||||||
|
overrideChecker: FirOverrideChecker,
|
||||||
|
scopes: List<FirTypeScope>
|
||||||
|
): FirTypeScope = prepareSupertypeScope(session, overrideChecker, scopes) as FirTypeScope
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ abstract class FirScopeProvider {
|
|||||||
klass: FirClass<*>,
|
klass: FirClass<*>,
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
): FirScope
|
): FirTypeScope
|
||||||
|
|
||||||
abstract fun getStaticMemberScopeForCallables(
|
abstract fun getStaticMemberScopeForCallables(
|
||||||
klass: FirClass<*>,
|
klass: FirClass<*>,
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.scopes
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
|
||||||
|
abstract class FirTypeScope : FirScope() {
|
||||||
|
// Initially, this method is intended to belong only to this class, but not to FirScope
|
||||||
|
// But the main-use case (FirSyntheticPropertiesScope) uses it on arbitrary type (intersection and others) that currently use
|
||||||
|
// scope implementations for type-unrelated scopes as well
|
||||||
|
// One of the idea how to fix it is considered extracting it to the interface
|
||||||
|
//
|
||||||
|
// The idea behind this class and abstract override is to explicitly state that those implementations should implement this method properly
|
||||||
|
// and use other FirOverrideAwareScope when delegating to them (as in FirClassSubstitutionScope)
|
||||||
|
abstract override fun processOverriddenFunctions(
|
||||||
|
functionSymbol: FirFunctionSymbol<*>,
|
||||||
|
processor: (FirFunctionSymbol<*>) -> ProcessorAction
|
||||||
|
): ProcessorAction
|
||||||
|
}
|
||||||
+2
-1
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
|
|||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.psi.KtFunction
|
import org.jetbrains.kotlin.psi.KtFunction
|
||||||
import org.jetbrains.kotlin.psi.KtTypeReference
|
import org.jetbrains.kotlin.psi.KtTypeReference
|
||||||
@@ -163,7 +164,7 @@ object KtDeclarationAndFirDeclarationEqualityChecker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private object DummyScopeProvider : FirScopeProvider() {
|
private object DummyScopeProvider : FirScopeProvider() {
|
||||||
override fun getUseSiteMemberScope(klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession): FirScope {
|
override fun getUseSiteMemberScope(klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession): FirTypeScope {
|
||||||
shouldNotBeCalled()
|
shouldNotBeCalled()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user