FIR: optimize classifier scope: don't search for nonexistent symbols

This commit is contained in:
Mikhail Glukhikh
2019-11-19 19:07:08 +03:00
parent d39a36ee25
commit fa739f1aae
5 changed files with 35 additions and 13 deletions
@@ -93,7 +93,11 @@ class JavaSymbolProvider(
visitedSymbols: MutableSet<FirClassLikeSymbol<*>>
): JavaClassUseSiteMemberScope {
return scopeSession.getOrBuild(regularClass.symbol, JAVA_USE_SITE) {
val declaredScope = declaredMemberScope(regularClass, useLazyNestedClassifierScope = regularClass is FirJavaClass)
val declaredScope = declaredMemberScope(
regularClass,
useLazyNestedClassifierScope = regularClass is FirJavaClass,
existingNames = (regularClass as? FirJavaClass)?.existingNestedClassifierNames
)
val superTypeEnhancementScopes =
lookupSuperTypes(regularClass, lookupInterfaces = true, deep = false, useSiteSession = useSiteSession)
.mapNotNull { useSiteSuperType ->
@@ -184,7 +188,8 @@ class JavaSymbolProvider(
javaClass.visibility, javaClass.modality,
javaClass.classKind, isTopLevel = isTopLevel,
isStatic = javaClass.isStatic,
javaTypeParameterStack = javaTypeParameterStack
javaTypeParameterStack = javaTypeParameterStack,
existingNestedClassifierNames = javaClass.innerClassNames.toList()
).apply {
this.typeParameters += foundClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
addAnnotationsFrom(this@JavaSymbolProvider.session, javaClass, javaTypeParameterStack)
@@ -37,7 +37,8 @@ class FirJavaClass internal constructor(
override val classKind: ClassKind,
isTopLevel: Boolean,
isStatic: Boolean,
internal val javaTypeParameterStack: JavaTypeParameterStack
internal val javaTypeParameterStack: JavaTypeParameterStack,
internal val existingNestedClassifierNames: List<Name>
) : FirPureAbstractElement(), FirRegularClass, FirModifiableClass<FirRegularClass> {
override var status: FirDeclarationStatusImpl = FirDeclarationStatusImpl(visibility, modality)
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()