FIR: Optimize supertypes scope structure
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user