[FIR] Use abstract classes for FIR scopes

This commit is contained in:
Simon Ogorodnik
2019-06-10 16:38:06 +03:00
committed by Mikhail Glukhikh
parent 810fa9c171
commit 95409b35ca
13 changed files with 17 additions and 17 deletions
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.utils.Jsr305State
class JavaClassEnhancementScope( class JavaClassEnhancementScope(
private val session: FirSession, private val session: FirSession,
private val useSiteScope: JavaClassUseSiteScope private val useSiteScope: JavaClassUseSiteScope
) : FirScope { ) : FirScope() {
private val owner: FirRegularClass = useSiteScope.symbol.fir private val owner: FirRegularClass = useSiteScope.symbol.fir
private val javaTypeParameterStack: JavaTypeParameterStack = private val javaTypeParameterStack: JavaTypeParameterStack =
@@ -26,7 +26,7 @@ class FirSyntheticPropertiesScope(
val session: FirSession, val session: FirSession,
private val baseScope: FirScope, private val baseScope: FirScope,
private val typeCalculator: ReturnTypeCalculator private val typeCalculator: ReturnTypeCalculator
) : FirScope { ) : FirScope() {
val synthetic: MutableMap<ConeCallableSymbol, ConeVariableSymbol> = mutableMapOf() val synthetic: MutableMap<ConeCallableSymbol, ConeVariableSymbol> = mutableMapOf()
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
interface FirTypeParameterScope : FirScope { abstract class FirTypeParameterScope : FirScope() {
val typeParameters: Map<Name, List<FirTypeParameter>> abstract val typeParameters: Map<Name, List<FirTypeParameter>>
override fun processClassifiersByName( override fun processClassifiersByName(
name: Name, name: Name,
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker
import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.cast
abstract class AbstractFirOverrideScope(val session: FirSession) : FirScope { abstract class AbstractFirOverrideScope(val session: FirSession) : FirScope() {
//base symbol as key //base symbol as key
val overrides = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol?>() val overrides = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol?>()
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.resolve.impl.FirDependenciesSymbolProviderImpl
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
abstract class FirAbstractProviderBasedScope(val session: FirSession, lookupInFir: Boolean = true) : abstract class FirAbstractProviderBasedScope(val session: FirSession, lookupInFir: Boolean = true) :
FirScope { FirScope() {
val provider = when (val symbolProvider = FirSymbolProvider.getInstance(session)) { val provider = when (val symbolProvider = FirSymbolProvider.getInstance(session)) {
is FirCompositeSymbolProvider -> symbolProvider.takeIf { !lookupInFir }?.providers?.find { is FirCompositeSymbolProvider -> symbolProvider.takeIf { !lookupInFir }?.providers?.find {
it is FirDependenciesSymbolProviderImpl it is FirDependenciesSymbolProviderImpl
@@ -36,7 +36,7 @@ fun declaredMemberScope(klass: FirRegularClass): FirClassDeclaredMemberScope {
.declaredMemberScope(klass) .declaredMemberScope(klass)
} }
class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope { class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope() {
private val callablesIndex: Map<Name, List<FirCallableSymbol>> = run { private val callablesIndex: Map<Name, List<FirCallableSymbol>> = run {
val result = mutableMapOf<Name, MutableList<FirCallableSymbol>>() val result = mutableMapOf<Name, MutableList<FirCallableSymbol>>()
for (declaration in klass.declarations) { for (declaration in klass.declarations) {
@@ -28,7 +28,7 @@ class FirClassSubstitutionScope(
private val session: FirSession, private val session: FirSession,
private val useSiteScope: FirScope, private val useSiteScope: FirScope,
substitution: Map<ConeTypeParameterSymbol, ConeKotlinType> substitution: Map<ConeTypeParameterSymbol, ConeKotlinType>
) : FirScope { ) : FirScope() {
private val fakeOverrides = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol>() private val fakeOverrides = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol>()
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.name.Name
class FirCompositeScope( class FirCompositeScope(
val scopes: MutableList<FirScope>, val scopes: MutableList<FirScope>,
private val reversedPriority: Boolean = false private val reversedPriority: Boolean = false
) : FirScope { ) : FirScope() {
override fun processClassifiersByName( override fun processClassifiersByName(
name: Name, name: Name,
position: FirPosition, position: FirPosition,
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class FirLocalScope : FirScope { class FirLocalScope : FirScope() {
val properties = mutableMapOf<Name, ConeVariableSymbol>() val properties = mutableMapOf<Name, ConeVariableSymbol>()
val functions = mutableMapOf<Name, ConeFunctionSymbol>() val functions = mutableMapOf<Name, ConeFunctionSymbol>()
@@ -8,6 +8,6 @@ package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.scopes.FirTypeParameterScope import org.jetbrains.kotlin.fir.scopes.FirTypeParameterScope
class FirMemberTypeParameterScope(callableMember: FirMemberDeclaration) : FirTypeParameterScope { class FirMemberTypeParameterScope(callableMember: FirMemberDeclaration) : FirTypeParameterScope() {
override val typeParameters = callableMember.typeParameters.groupBy { it.name } override val typeParameters = callableMember.typeParameters.groupBy { it.name }
} }
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.name.Name
class FirNestedClassifierScope( class FirNestedClassifierScope(
val classId: ClassId, val classId: ClassId,
private val symbolProvider: FirSymbolProvider private val symbolProvider: FirSymbolProvider
) : FirScope { ) : FirScope() {
override fun processClassifiersByName( override fun processClassifiersByName(
name: Name, name: Name,
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class FirSelfImportingScope(val fqName: FqName, val session: FirSession) : FirScope { class FirSelfImportingScope(val fqName: FqName, val session: FirSession) : FirScope() {
private val symbolProvider = FirSymbolProvider.getInstance(session) private val symbolProvider = FirSymbolProvider.getInstance(session)
@@ -12,23 +12,23 @@ import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
interface FirScope { abstract class FirScope {
@Deprecated( @Deprecated(
"obsolete", "obsolete",
replaceWith = ReplaceWith("processClassifiersByNameWithAction(name, position) { if (processor()) ProcessorAction.NEXT else ProcessorAction.STOP }.next()") replaceWith = ReplaceWith("processClassifiersByNameWithAction(name, position) { if (processor()) ProcessorAction.NEXT else ProcessorAction.STOP }.next()")
) )
fun processClassifiersByName( open fun processClassifiersByName(
name: Name, name: Name,
position: FirPosition, position: FirPosition,
processor: (ConeClassifierSymbol) -> Boolean processor: (ConeClassifierSymbol) -> Boolean
): Boolean = true ): Boolean = true
fun processFunctionsByName( open fun processFunctionsByName(
name: Name, name: Name,
processor: (ConeFunctionSymbol) -> ProcessorAction processor: (ConeFunctionSymbol) -> ProcessorAction
): ProcessorAction = NEXT ): ProcessorAction = NEXT
fun processPropertiesByName( open fun processPropertiesByName(
name: Name, name: Name,
processor: (ConeVariableSymbol) -> ProcessorAction processor: (ConeVariableSymbol) -> ProcessorAction
): ProcessorAction = NEXT ): ProcessorAction = NEXT