[FIR] add lazy resolution contract checks in resolve

This commit is contained in:
Ilya Kirillov
2022-11-01 17:10:01 +01:00
committed by Space Team
parent df5aa59185
commit 7bac119f20
40 changed files with 390 additions and 86 deletions
@@ -33,7 +33,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.jvm.JvmCallConflictResolverFactory
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirQualifierResolverImpl
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirTypeResolverImpl
import org.jetbrains.kotlin.fir.resolve.transformers.FirCompilerLazyDeclarationResolver
import org.jetbrains.kotlin.fir.resolve.transformers.FirDummyCompilerLazyDeclarationResolver
import org.jetbrains.kotlin.fir.resolve.transformers.PlatformSupertypeUpdater
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClassIndex
import org.jetbrains.kotlin.fir.scopes.FirOverrideService
@@ -76,7 +76,7 @@ fun FirSession.registerCommonComponents(languageVersionSettings: LanguageVersion
fun FirSession.registerCliCompilerOnlyComponents() {
register(FirCachesFactory::class, FirThreadUnsafeCachesFactory)
register(SealedClassInheritorsProvider::class, SealedClassInheritorsProviderImpl)
register(FirLazyDeclarationResolver::class, FirCompilerLazyDeclarationResolver)
register(FirLazyDeclarationResolver::class, FirDummyCompilerLazyDeclarationResolver)
register(FirRegisteredPluginAnnotations::class, FirRegisteredPluginAnnotationsImpl(this))
register(FirPredicateBasedProvider::class, FirPredicateBasedProviderImpl(this))
@@ -37,7 +37,7 @@ abstract class FirAbstractSessionFactory {
sessionProvider: FirProjectSessionProvider,
moduleDataProvider: ModuleDataProvider,
languageVersionSettings: LanguageVersionSettings,
registerExtraComponents: ((FirSession) -> Unit)?,
registerExtraComponents: ((FirSession) -> Unit),
createKotlinScopeProvider: () -> FirKotlinScopeProvider,
createProviders: (FirSession, FirModuleData, FirKotlinScopeProvider) -> List<FirSymbolProvider>
): FirSession {
@@ -49,7 +49,7 @@ abstract class FirAbstractSessionFactory {
registerCliCompilerOnlyComponents()
registerCommonComponents(languageVersionSettings)
registerExtraComponents?.invoke(this)
registerExtraComponents(this)
val kotlinScopeProvider = createKotlinScopeProvider.invoke()
register(FirKotlinScopeProvider::class, kotlinScopeProvider)
@@ -77,7 +77,7 @@ abstract class FirAbstractSessionFactory {
lookupTracker: LookupTracker?,
enumWhenTracker: EnumWhenTracker?,
init: FirSessionConfigurator.() -> Unit,
registerExtraComponents: ((FirSession) -> Unit)?,
registerExtraComponents: ((FirSession) -> Unit),
registerExtraCheckers: ((FirSessionConfigurator) -> Unit)?,
createKotlinScopeProvider: () -> FirKotlinScopeProvider,
createProviders: (
@@ -93,7 +93,7 @@ abstract class FirAbstractSessionFactory {
registerCliCompilerOnlyComponents()
registerCommonComponents(languageVersionSettings)
registerResolveComponents(lookupTracker, enumWhenTracker)
registerExtraComponents?.invoke(this)
registerExtraComponents(this)
val kotlinScopeProvider = createKotlinScopeProvider.invoke()
register(FirKotlinScopeProvider::class, kotlinScopeProvider)
@@ -21,13 +21,13 @@ import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
import org.jetbrains.kotlin.name.Name
object FirJsSessionFactory : FirAbstractSessionFactory() {
fun createJsModuleBasedSession(
moduleData: FirModuleData,
sessionProvider: FirProjectSessionProvider,
extensionRegistrars: List<FirExtensionRegistrar>,
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
lookupTracker: LookupTracker?,
registerExtraComponents: ((FirSession) -> Unit) = {},
init: FirSessionConfigurator.() -> Unit
): FirSession {
return createModuleBasedSession(
@@ -38,7 +38,10 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
lookupTracker,
null,
init,
registerExtraComponents = { it.registerJsSpecificResolveComponents() },
registerExtraComponents = { session ->
session.registerJsSpecificResolveComponents()
registerExtraComponents(session)
},
registerExtraCheckers = { it.registerJsCheckers() },
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, dependenciesSymbolProvider ->
@@ -57,12 +60,16 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
sessionProvider: FirProjectSessionProvider,
moduleDataProvider: ModuleDataProvider,
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
registerExtraComponents: ((FirSession) -> Unit),
) = createLibrarySession(
mainModuleName,
sessionProvider,
moduleDataProvider,
languageVersionSettings,
registerExtraComponents = { it.registerJsSpecificResolveComponents() },
registerExtraComponents = {
it.registerJsSpecificResolveComponents()
registerExtraComponents(it)
},
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
createProviders = { session, builtinsModuleData, kotlinScopeProvider ->
listOf(
@@ -34,13 +34,17 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
scope: AbstractProjectFileSearchScope,
packagePartProvider: PackagePartProvider,
languageVersionSettings: LanguageVersionSettings,
registerExtraComponents: ((FirSession) -> Unit),
): FirSession {
return createLibrarySession(
mainModuleName,
sessionProvider,
dependencyList.moduleDataProvider,
languageVersionSettings,
registerExtraComponents = { it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver()) },
registerExtraComponents = {
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver())
registerExtraComponents(it)
},
createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) },
createProviders = { session, builtinsModuleData, kotlinScopeProvider ->
listOf(
@@ -72,6 +76,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
lookupTracker: LookupTracker? = null,
enumWhenTracker: EnumWhenTracker? = null,
needRegisterJavaElementFinder: Boolean,
registerExtraComponents: ((FirSession) -> Unit) = {},
init: FirSessionConfigurator.() -> Unit = {}
): FirSession {
return createModuleBasedSession(
@@ -85,6 +90,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
registerExtraComponents = {
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver())
it.registerJavaSpecificResolveComponents()
registerExtraComponents(it)
},
registerExtraCheckers = { it.registerJvmCheckers() },
createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) },
@@ -48,7 +48,8 @@ object FirSessionFactoryHelper {
projectEnvironment,
librariesScope,
packagePartProvider,
languageVersionSettings
languageVersionSettings,
registerExtraComponents = {},
)
val mainModuleData = FirModuleDataImpl(
@@ -70,7 +71,8 @@ object FirSessionFactoryHelper {
lookupTracker,
enumWhenTracker,
needRegisterJavaElementFinder,
sessionConfigurator
registerExtraComponents = {},
sessionConfigurator,
)
}