diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaScopeProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaScopeProvider.kt index 7593146199f..93b76f892d3 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaScopeProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaScopeProvider.kt @@ -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.JavaOverrideChecker 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.FirScopeProvider +import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.impl.* 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.types.ConeClassErrorType @@ -34,7 +37,7 @@ class JavaScopeProvider( klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession - ): FirScope = + ): FirTypeScope = buildJavaEnhancementScope(useSiteSession, klass.symbol as FirRegularClassSymbol, scopeSession, mutableSetOf()) private fun buildJavaEnhancementScope( @@ -86,7 +89,7 @@ class JavaScopeProvider( } JavaClassUseSiteMemberScope( regularClass, useSiteSession, - FirSuperTypeScope.prepareSupertypeScope( + FirSuperTypeScope.prepareOverrideAwareSupertypeScope( useSiteSession, JavaOverrideChecker( useSiteSession, @@ -110,7 +113,14 @@ class JavaScopeProvider( val wrappedDeclaredScope = declaredMemberScopeDecorator(klass, declaredScope, useSiteSession, scopeSession) JavaClassEnhancementScope( 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 ) ) } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt index 97cf7a20820..50f7ab74a15 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt @@ -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.FirSimpleFunctionBuilder 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.buildSyntheticProperty 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.render 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.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.* @@ -42,7 +43,7 @@ import org.jetbrains.kotlin.utils.Jsr305State class JavaClassEnhancementScope( private val session: FirSession, private val useSiteMemberScope: JavaClassUseSiteMemberScope -) : FirScope() { +) : FirTypeScope() { private val owner: FirRegularClass = useSiteMemberScope.symbol.fir private val javaTypeParameterStack: JavaTypeParameterStack = 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 96e88f6b6b4..4e1dd69c5fe 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 @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder 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.expressions.FirExpression 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.scopes.FirScope 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.impl.* import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.name.Name class JavaClassUseSiteMemberScope( klass: FirRegularClass, session: FirSession, - superTypesScope: FirScope, + superTypesScope: FirTypeScope, declaredMemberScope: FirScope ) : AbstractFirUseSiteMemberScope( session, diff --git a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt index f7083c2f6d0..a129e8573ec 100644 --- a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt +++ b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt @@ -8,7 +8,9 @@ package org.jetbrains.kotlin.fir.scopes.jvm import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSettings import org.jetbrains.kotlin.fir.declarations.FirRegularClass 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.ProcessorAction import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol @@ -19,7 +21,7 @@ class JvmMappedScope( private val declaredMemberScope: FirScope, private val javaMappedClassUseSiteScope: FirScope, private val signatures: Signatures -) : FirScope() { +) : FirTypeScope() { override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) { val whiteListSignatures = signatures.whiteListSignaturesByName[name] @@ -37,6 +39,14 @@ class JvmMappedScope( 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) { val constructorBlackList = signatures.constructorBlackList if (constructorBlackList.isNotEmpty()) { @@ -116,4 +126,4 @@ class JvmMappedScope( return Signatures(whiteListSignaturesByName, constructorBlackList) } } -} \ No newline at end of file +} diff --git a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/StubFirScopeProvider.kt b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/StubFirScopeProvider.kt index 870bc558da9..78020732fd4 100644 --- a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/StubFirScopeProvider.kt +++ b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/StubFirScopeProvider.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.builder import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirClass 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.FirScopeProvider @@ -16,7 +17,7 @@ object StubFirScopeProvider : FirScopeProvider() { klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession - ): FirScope { + ): FirTypeScope { error("Stub") } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt index bd9e7608117..39aef57aa75 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* 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.impl.FirClassSubstitutionScope import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope @@ -43,7 +44,7 @@ inline fun scopeSessionKey(): ScopeSes return object : ScopeSessionKey() {} } -val USE_SITE = scopeSessionKey, FirScope>() +val USE_SITE = scopeSessionKey, FirTypeScope>() data class SubstitutionScopeKey(val type: ConeClassLikeType) : ScopeSessionKey, FirClassSubstitutionScope>() @@ -79,11 +80,11 @@ fun createSubstitution( fun ConeClassLikeType.wrapSubstitutionScopeIfNeed( session: FirSession, - useSiteMemberScope: FirScope, + useSiteMemberScope: FirTypeScope, declaration: FirClassLikeDeclaration<*>, builder: ScopeSession, derivedClassId: ClassId? = null -): FirScope { +): FirTypeScope { if (this.typeArguments.isEmpty()) return useSiteMemberScope return builder.getOrBuild(declaration.symbol, SubstitutionScopeKey(this)) { val typeParameters = (declaration as? FirTypeParameterRefsOwner)?.typeParameters.orEmpty() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt index d44a4863a7d..c0098eb8d2f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt @@ -38,7 +38,7 @@ class KotlinScopeProvider( klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession - ): FirScope { + ): FirTypeScope { return scopeSession.getOrBuild(klass.symbol, USE_SITE) { val declaredScope = declaredMemberScope(klass) val decoratedDeclaredMemberScope = @@ -52,14 +52,18 @@ class KotlinScopeProvider( symbol.fir.scope( substitutor(symbol, useSiteSuperType, useSiteSession), useSiteSession, scopeSession, skipPrivateMembers = true, klass.classId - ) + ).let { + it as? FirTypeScope ?: error("$it is expected to be FirOverrideAwareScope") + } } else { null } } FirClassUseSiteMemberScope( useSiteSession, - FirSuperTypeScope.prepareSupertypeScope(useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes), + FirSuperTypeScope.prepareOverrideAwareSupertypeScope( + useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes + ), decoratedDeclaredMemberScope ) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt index 770559a0a85..d38b28bb8c7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt @@ -8,12 +8,15 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.FirSession 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.FirScope import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol 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 val overrideByBase = mutableMapOf, FirCallableSymbol<*>?>() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt index b1b9669424d..3b2135bcebe 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt @@ -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.expressions.FirExpression 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.FirScope +import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.name.Name abstract class AbstractFirUseSiteMemberScope( session: FirSession, overrideChecker: FirOverrideChecker, - protected val superTypesScope: FirScope, + protected val superTypesScope: FirTypeScope, protected val declaredMemberScope: FirScope ) : AbstractFirOverrideScope(session, overrideChecker) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index de2cb04a3f0..c7afd44e6aa 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -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.transformers.ReturnTypeCalculator 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.impl.* import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -34,12 +35,12 @@ import org.jetbrains.kotlin.name.Name class FirClassSubstitutionScope( private val session: FirSession, - private val useSiteMemberScope: FirScope, + private val useSiteMemberScope: FirTypeScope, scopeSession: ScopeSession, private val substitutor: ConeSubstitutor, private val skipPrivateMembers: Boolean, private val derivedClassId: ClassId? = null -) : FirScope() { +) : FirTypeScope() { private val fakeOverrideFunctions = mutableMapOf, FirFunctionSymbol<*>>() private val fakeOverrideConstructors = mutableMapOf() @@ -48,7 +49,7 @@ class FirClassSubstitutionScope( private val fakeOverrideAccessors = mutableMapOf() constructor( - session: FirSession, useSiteMemberScope: FirScope, scopeSession: ScopeSession, + session: FirSession, useSiteMemberScope: FirTypeScope, scopeSession: ScopeSession, substitution: Map, skipPrivateMembers: Boolean, derivedClassId: ClassId? = null ) : this(session, useSiteMemberScope, scopeSession, substitutorByMap(substitution), skipPrivateMembers, derivedClassId) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt index 4b590bfe7e8..fba6eb761b0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt @@ -6,13 +6,14 @@ package org.jetbrains.kotlin.fir.scopes.impl 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.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.name.Name class FirClassUseSiteMemberScope( session: FirSession, - superTypesScope: FirScope, + superTypesScope: FirTypeScope, declaredMemberScope: FirScope ) : AbstractFirUseSiteMemberScope(session, FirStandardOverrideChecker(session), superTypesScope, declaredMemberScope) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirSuperTypeScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirSuperTypeScope.kt index 023d6fdaa87..ae7a250ab96 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirSuperTypeScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirSuperTypeScope.kt @@ -11,8 +11,10 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction 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.FirScope +import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.ConeFlexibleType import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -28,7 +30,7 @@ import kotlin.collections.HashSet class FirSuperTypeScope private constructor( session: FirSession, overrideChecker: FirOverrideChecker, - val scopes: List + private val scopes: List, ) : AbstractFirOverrideScope(session, overrideChecker) { private val absentFunctions = mutableSetOf() @@ -260,5 +262,13 @@ class FirSuperTypeScope private constructor( 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 = prepareSupertypeScope(session, overrideChecker, scopes) as FirTypeScope } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScopeProvider.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScopeProvider.kt index 2ff24ba35c2..cd165890ad6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScopeProvider.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScopeProvider.kt @@ -14,7 +14,7 @@ abstract class FirScopeProvider { klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession - ): FirScope + ): FirTypeScope abstract fun getStaticMemberScopeForCallables( klass: FirClass<*>, diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt new file mode 100644 index 00000000000..78a163be980 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt @@ -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 +} diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/KtDeclarationAndFirDeclarationEqualityChecker.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/KtDeclarationAndFirDeclarationEqualityChecker.kt index 44520580148..151fb0ee00a 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/KtDeclarationAndFirDeclarationEqualityChecker.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/KtDeclarationAndFirDeclarationEqualityChecker.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScopeProvider +import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtTypeReference @@ -163,7 +164,7 @@ object KtDeclarationAndFirDeclarationEqualityChecker { } 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() } @@ -182,4 +183,4 @@ object KtDeclarationAndFirDeclarationEqualityChecker { private fun shouldNotBeCalled(): Nothing = error("Should not be called in RawFirBuilder while converting KtTypeReference") } -} \ No newline at end of file +}