From f63c3aeac9399925101263e78c3cd881e9013d13 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 23 Oct 2019 19:27:06 +0300 Subject: [PATCH] Extract FirMemberScopeProvider to a separate file --- .../impl/FirClassDeclaredMemberScope.kt | 58 ++--------------- .../fir/scopes/impl/FirMemberScopeProvider.kt | 62 +++++++++++++++++++ 2 files changed, 66 insertions(+), 54 deletions(-) create mode 100644 compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberScopeProvider.kt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt index 5de1a7c52b6..59b323e4135 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt @@ -5,69 +5,19 @@ package org.jetbrains.kotlin.fir.scopes.impl -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.resolve.memberScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP -import org.jetbrains.kotlin.fir.symbols.impl.* -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.name.Name -class FirMemberScopeProvider : FirSessionComponent { - - private val declaredMemberCache = mutableMapOf() - private val nestedClassifierCache = mutableMapOf() - private val selfImportingCache = mutableMapOf() - - fun declaredMemberScope(klass: FirRegularClass): FirClassDeclaredMemberScope { - return declaredMemberCache.getOrPut(klass) { - FirClassDeclaredMemberScope(klass) - } - } - - fun nestedClassifierScope(klass: FirRegularClass): FirNestedClassifierScope { - return nestedClassifierCache.getOrPut(klass) { - FirNestedClassifierScope(klass) - } - } - - // TODO: it's better to cache this scope in ScopeSession - fun selfImportingScope(fqName: FqName, session: FirSession): FirSelfImportingScope { - return selfImportingCache.getOrPut(fqName) { - FirSelfImportingScope(fqName, session) - } - } -} - -fun declaredMemberScope(klass: FirRegularClass): FirClassDeclaredMemberScope { - return klass - .session - .memberScopeProvider - .declaredMemberScope(klass) -} - -fun nestedClassifierScope(klass: FirRegularClass): FirNestedClassifierScope { - return klass - .session - .memberScopeProvider - .nestedClassifierScope(klass) -} - -fun nestedClassifierScope(classId: ClassId, session: FirSession): FirLazyNestedClassifierScope { - return FirLazyNestedClassifierScope(classId, session) -} - -fun selfImportingScope(fqName: FqName, session: FirSession): FirSelfImportingScope { - return session.memberScopeProvider.selfImportingScope(fqName, session) -} - class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope() { private val nestedClassifierScope = nestedClassifierScope(klass) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberScopeProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberScopeProvider.kt new file mode 100644 index 00000000000..368652dcf16 --- /dev/null +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberScopeProvider.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2010-2019 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.impl + +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.resolve.memberScopeProvider +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName + +class FirMemberScopeProvider : FirSessionComponent { + + private val declaredMemberCache = mutableMapOf() + private val nestedClassifierCache = mutableMapOf() + private val selfImportingCache = mutableMapOf() + + fun declaredMemberScope(klass: FirRegularClass): FirClassDeclaredMemberScope { + return declaredMemberCache.getOrPut(klass) { + FirClassDeclaredMemberScope(klass) + } + } + + fun nestedClassifierScope(klass: FirRegularClass): FirNestedClassifierScope { + return nestedClassifierCache.getOrPut(klass) { + FirNestedClassifierScope(klass) + } + } + + // TODO: it's better to cache this scope in ScopeSession + fun selfImportingScope(fqName: FqName, session: FirSession): FirSelfImportingScope { + return selfImportingCache.getOrPut(fqName) { + FirSelfImportingScope(fqName, session) + } + } +} + +fun declaredMemberScope(klass: FirRegularClass): FirClassDeclaredMemberScope { + return klass + .session + .memberScopeProvider + .declaredMemberScope(klass) +} + +fun nestedClassifierScope(klass: FirRegularClass): FirNestedClassifierScope { + return klass + .session + .memberScopeProvider + .nestedClassifierScope(klass) +} + +fun nestedClassifierScope(classId: ClassId, session: FirSession): FirLazyNestedClassifierScope { + return FirLazyNestedClassifierScope(classId, session) +} + +fun selfImportingScope(fqName: FqName, session: FirSession): FirSelfImportingScope { + return session.memberScopeProvider.selfImportingScope(fqName, session) +} +