diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt index 87b3875a686..ab4279dafe9 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt @@ -498,6 +498,10 @@ open class JvmBuiltInsSettings( private val ClassDescriptor.isAny: Boolean get() = fqNameUnsafe == KotlinBuiltIns.FQ_NAMES.any private class FallbackBuiltIns private constructor() : KotlinBuiltIns(LockBasedStorageManager()) { + init { + createBuiltInsModule() + } + companion object { private val initializer = BuiltInsInitializer { FallbackBuiltIns() diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JvmBuiltIns.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JvmBuiltIns.kt index 25a971a2a61..77f2e877951 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JvmBuiltIns.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JvmBuiltIns.kt @@ -20,8 +20,10 @@ import org.jetbrains.kotlin.builtins.JvmBuiltInClassDescriptorFactory import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.load.kotlin.JvmBuiltInsSettings +import org.jetbrains.kotlin.serialization.deserialization.AdditionalClassPartsProvider import org.jetbrains.kotlin.serialization.deserialization.PlatformDependentDeclarationFilter import org.jetbrains.kotlin.storage.StorageManager +import org.jetbrains.kotlin.storage.getValue import org.jetbrains.kotlin.utils.sure class JvmBuiltIns(storageManager: StorageManager) : KotlinBuiltIns(storageManager) { @@ -35,21 +37,21 @@ class JvmBuiltIns(storageManager: StorageManager) : KotlinBuiltIns(storageManage this.isAdditionalBuiltInsFeatureSupported = isAdditionalBuiltInsFeatureSupported } - lateinit var settings: JvmBuiltInsSettings - private set - - // Here we know order in which KotlinBuiltIns constructor calls these methods - override fun getPlatformDependentDeclarationFilter(): PlatformDependentDeclarationFilter { - settings = JvmBuiltInsSettings( + val settings: JvmBuiltInsSettings by storageManager.createLazyValue { + JvmBuiltInsSettings( builtInsModule, storageManager, { ownerModuleDescriptor.sure { "JvmBuiltins has not been initialized properly" } }, { isAdditionalBuiltInsFeatureSupported } ) - - return settings } - override fun getAdditionalClassPartsProvider() = settings + init { + createBuiltInsModule() + } + + override fun getPlatformDependentDeclarationFilter(): PlatformDependentDeclarationFilter = settings + + override fun getAdditionalClassPartsProvider(): AdditionalClassPartsProvider = settings override fun getClassDescriptorFactories() = super.getClassDescriptorFactories() + JvmBuiltInClassDescriptorFactory(storageManager, builtInsModule) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt index a9e0ec51f02..0179d13c0eb 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt @@ -19,6 +19,10 @@ package org.jetbrains.kotlin.builtins import org.jetbrains.kotlin.storage.LockBasedStorageManager class DefaultBuiltIns private constructor() : KotlinBuiltIns(LockBasedStorageManager()) { + init { + createBuiltInsModule() + } + companion object { private val initializer = BuiltInsInitializer { DefaultBuiltIns() diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 643f8d44fed..6fe5e776a83 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -66,7 +66,7 @@ public abstract class KotlinBuiltIns { BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier("internal")) ); - private final ModuleDescriptorImpl builtInsModule; + private ModuleDescriptorImpl builtInsModule; private final NotNullLazyValue primitives; private final NotNullLazyValue packageFragments; @@ -78,24 +78,6 @@ public abstract class KotlinBuiltIns { protected KotlinBuiltIns(@NotNull StorageManager storageManager) { this.storageManager = storageManager; - builtInsModule = new ModuleDescriptorImpl(BUILTINS_MODULE_NAME, storageManager, this); - - PackageFragmentProvider packageFragmentProvider = BuiltInsPackageFragmentProviderKt.createBuiltInPackageFragmentProvider( - storageManager, builtInsModule, BUILT_INS_PACKAGE_FQ_NAMES, - getClassDescriptorFactories(), - getPlatformDependentDeclarationFilter(), - getAdditionalClassPartsProvider(), - new Function1() { - @Override - public InputStream invoke(String path) { - ClassLoader classLoader = KotlinBuiltIns.class.getClassLoader(); - return classLoader != null ? classLoader.getResourceAsStream(path) : ClassLoader.getSystemResourceAsStream(path); - } - } - ); - - builtInsModule.initialize(packageFragmentProvider); - builtInsModule.setDependencies(builtInsModule); this.packageFragments = storageManager.createLazyValue(new Function0() { @Override @@ -136,6 +118,25 @@ public abstract class KotlinBuiltIns { }); } + protected void createBuiltInsModule() { + builtInsModule = new ModuleDescriptorImpl(BUILTINS_MODULE_NAME, storageManager, this); + PackageFragmentProvider packageFragmentProvider = BuiltInsPackageFragmentProviderKt.createBuiltInPackageFragmentProvider( + storageManager, builtInsModule, BUILT_INS_PACKAGE_FQ_NAMES, + getClassDescriptorFactories(), + getPlatformDependentDeclarationFilter(), + getAdditionalClassPartsProvider(), + new Function1() { + @Override + public InputStream invoke(String path) { + ClassLoader classLoader = KotlinBuiltIns.class.getClassLoader(); + return classLoader != null ? classLoader.getResourceAsStream(path) : ClassLoader.getSystemResourceAsStream(path); + } + } + ); + + builtInsModule.initialize(packageFragmentProvider); + builtInsModule.setDependencies(builtInsModule); + } @NotNull protected AdditionalClassPartsProvider getAdditionalClassPartsProvider() { return AdditionalClassPartsProvider.None.INSTANCE;