FIR: try to use JavaSymbolProvider directly in lazy nested classifier scope

This commit is contained in:
Mikhail Glukhikh
2019-12-12 11:57:47 +03:00
parent 48d60ed4ea
commit f497231acd
4 changed files with 24 additions and 11 deletions
@@ -103,7 +103,8 @@ class JavaSymbolProvider(
val declaredScope = declaredMemberScope( val declaredScope = declaredMemberScope(
regularClass, regularClass,
useLazyNestedClassifierScope = regularClass is FirJavaClass, useLazyNestedClassifierScope = regularClass is FirJavaClass,
existingNames = (regularClass as? FirJavaClass)?.existingNestedClassifierNames existingNames = (regularClass as? FirJavaClass)?.existingNestedClassifierNames,
symbolProvider = this
) )
val wrappedDeclaredScope = wrapScopeWithJvmMapped(regularClass, declaredScope, useSiteSession, scopeSession) val wrappedDeclaredScope = wrapScopeWithJvmMapped(regularClass, declaredScope, useSiteSession, scopeSession)
val superTypeEnhancementScopes = val superTypeEnhancementScopes =
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
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.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
@@ -22,10 +23,11 @@ import org.jetbrains.kotlin.name.Name
class FirClassDeclaredMemberScope( class FirClassDeclaredMemberScope(
klass: FirClass<*>, klass: FirClass<*>,
useLazyNestedClassifierScope: Boolean = false, useLazyNestedClassifierScope: Boolean = false,
existingNames: List<Name>? = null existingNames: List<Name>? = null,
symbolProvider: FirSymbolProvider? = null
) : FirScope() { ) : FirScope() {
private val nestedClassifierScope = if (useLazyNestedClassifierScope) { private val nestedClassifierScope = if (useLazyNestedClassifierScope) {
nestedClassifierScope(klass.symbol.classId, klass.session, existingNames) nestedClassifierScope(klass.symbol.classId, klass.session, existingNames, symbolProvider)
} else { } else {
nestedClassifierScope(klass) nestedClassifierScope(klass)
} }
@@ -6,6 +6,7 @@
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.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
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.scopes.ProcessorAction
@@ -19,10 +20,11 @@ import org.jetbrains.kotlin.name.Name
class FirLazyNestedClassifierScope( class FirLazyNestedClassifierScope(
val classId: ClassId, val classId: ClassId,
session: FirSession, session: FirSession,
private val existingNames: List<Name>? private val existingNames: List<Name>?,
symbolProvider: FirSymbolProvider?
) : FirScope() { ) : FirScope() {
private val symbolProvider = session.firSymbolProvider private val symbolProvider = symbolProvider ?: session.firSymbolProvider
override fun processClassifiersByName( override fun processClassifiersByName(
name: Name, name: Name,
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.FirSession 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.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.memberScopeProvider import org.jetbrains.kotlin.fir.resolve.memberScopeProvider
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -23,10 +24,11 @@ class FirMemberScopeProvider : FirSessionComponent {
fun declaredMemberScope( fun declaredMemberScope(
klass: FirClass<*>, klass: FirClass<*>,
useLazyNestedClassifierScope: Boolean, useLazyNestedClassifierScope: Boolean,
existingNames: List<Name>? existingNames: List<Name>?,
symbolProvider: FirSymbolProvider?
): FirScope { ): FirScope {
return declaredMemberCache.getOrPut(klass) { return declaredMemberCache.getOrPut(klass) {
FirClassDeclaredMemberScope(klass, useLazyNestedClassifierScope, existingNames) FirClassDeclaredMemberScope(klass, useLazyNestedClassifierScope, existingNames, symbolProvider)
} }
} }
@@ -47,12 +49,13 @@ class FirMemberScopeProvider : FirSessionComponent {
fun declaredMemberScope( fun declaredMemberScope(
klass: FirClass<*>, klass: FirClass<*>,
useLazyNestedClassifierScope: Boolean = false, useLazyNestedClassifierScope: Boolean = false,
existingNames: List<Name>? = null existingNames: List<Name>? = null,
symbolProvider: FirSymbolProvider? = null
): FirScope { ): FirScope {
return klass return klass
.session .session
.memberScopeProvider .memberScopeProvider
.declaredMemberScope(klass, useLazyNestedClassifierScope, existingNames) .declaredMemberScope(klass, useLazyNestedClassifierScope, existingNames, symbolProvider)
} }
fun nestedClassifierScope(klass: FirClass<*>): FirNestedClassifierScope { fun nestedClassifierScope(klass: FirClass<*>): FirNestedClassifierScope {
@@ -62,8 +65,13 @@ fun nestedClassifierScope(klass: FirClass<*>): FirNestedClassifierScope {
.nestedClassifierScope(klass) .nestedClassifierScope(klass)
} }
fun nestedClassifierScope(classId: ClassId, session: FirSession, existingNames: List<Name>? = null): FirLazyNestedClassifierScope { fun nestedClassifierScope(
return FirLazyNestedClassifierScope(classId, session, existingNames) classId: ClassId,
session: FirSession,
existingNames: List<Name>? = null,
symbolProvider: FirSymbolProvider? = null
): FirLazyNestedClassifierScope {
return FirLazyNestedClassifierScope(classId, session, existingNames, symbolProvider)
} }
fun selfImportingScope(fqName: FqName, session: FirSession): FirSelfImportingScope { fun selfImportingScope(fqName: FqName, session: FirSession): FirSelfImportingScope {