FIR: Optimize supertypes scope structure

This commit is contained in:
Denis Zharkov
2019-12-04 14:48:43 +03:00
parent 91fce215d2
commit 43aa1f87df
3 changed files with 19 additions and 5 deletions
@@ -121,7 +121,7 @@ class JavaSymbolProvider(
} }
JavaClassUseSiteMemberScope( JavaClassUseSiteMemberScope(
regularClass, useSiteSession, regularClass, useSiteSession,
FirSuperTypeScope( FirSuperTypeScope.prepareSupertypeScope(
useSiteSession, useSiteSession,
JavaOverrideChecker( JavaOverrideChecker(
useSiteSession, if (regularClass is FirJavaClass) regularClass useSiteSession, if (regularClass is FirJavaClass) regularClass
@@ -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.FirSuperTypeScope
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
import org.jetbrains.kotlin.fir.scopes.jvm.JvmMappedScope 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.symbols.impl.*
import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeClassErrorType
import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
@@ -110,7 +112,7 @@ abstract class FirSymbolProvider : FirSessionComponent {
} }
FirClassUseSiteMemberScope( FirClassUseSiteMemberScope(
useSiteSession, useSiteSession,
FirSuperTypeScope(useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes), FirSuperTypeScope.prepareSupertypeScope(useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes),
wrappedDeclaredScope wrappedDeclaredScope
) )
} }
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
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 FirSuperTypeScope( class FirSuperTypeScope private constructor(
session: FirSession, session: FirSession,
overrideChecker: FirOverrideChecker, overrideChecker: FirOverrideChecker,
val scopes: List<FirScope> val scopes: List<FirScope>
@@ -112,4 +112,16 @@ class FirSuperTypeScope(
} }
return super.processClassifiersByName(name, processor) return super.processClassifiersByName(name, processor)
} }
companion object {
fun prepareSupertypeScope(
session: FirSession,
overrideChecker: FirOverrideChecker,
scopes: List<FirScope>
): FirScope {
scopes.singleOrNull()?.let { return it }
return FirSuperTypeScope(session, overrideChecker, scopes)
}
}
} }