From 43aa1f87dfd70ddd5d1fbaa442d56f2e0f65075e Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 4 Dec 2019 14:48:43 +0300 Subject: [PATCH] FIR: Optimize supertypes scope structure --- .../kotlin/fir/java/JavaSymbolProvider.kt | 2 +- .../kotlin/fir/resolve/FirSymbolProvider.kt | 6 ++++-- .../kotlin/fir/scopes/impl/FirSuperTypeScope.kt | 16 ++++++++++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index 5e577675aab..1b9e209a255 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -121,7 +121,7 @@ class JavaSymbolProvider( } JavaClassUseSiteMemberScope( regularClass, useSiteSession, - FirSuperTypeScope( + FirSuperTypeScope.prepareSupertypeScope( useSiteSession, JavaOverrideChecker( useSiteSession, if (regularClass is FirJavaClass) regularClass diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirSymbolProvider.kt index 86ea4dc9de0..ed9db760dde 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirSymbolProvider.kt @@ -18,7 +18,9 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirStandardOverrideChecker import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope import org.jetbrains.kotlin.fir.scopes.jvm.JvmMappedScope -import org.jetbrains.kotlin.fir.symbols.* +import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag +import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag +import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTagWithFixedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeClassLikeType @@ -110,7 +112,7 @@ abstract class FirSymbolProvider : FirSessionComponent { } FirClassUseSiteMemberScope( useSiteSession, - FirSuperTypeScope(useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes), + FirSuperTypeScope.prepareSupertypeScope(useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes), wrappedDeclaredScope ) } 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 cf76b3c973d..77df7caecbc 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 @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.name.Name -class FirSuperTypeScope( +class FirSuperTypeScope private constructor( session: FirSession, overrideChecker: FirOverrideChecker, val scopes: List @@ -112,4 +112,16 @@ class FirSuperTypeScope( } return super.processClassifiersByName(name, processor) } -} \ No newline at end of file + + companion object { + fun prepareSupertypeScope( + session: FirSession, + overrideChecker: FirOverrideChecker, + scopes: List + ): FirScope { + scopes.singleOrNull()?.let { return it } + + return FirSuperTypeScope(session, overrideChecker, scopes) + } + } +}