Refactor initialization of JvmBuiltIns instance
Use lazy val instead of lateinit var + implicit dependency on the code in KotlinBuiltIns constructor
This commit is contained in:
+4
@@ -498,6 +498,10 @@ open class JvmBuiltInsSettings(
|
|||||||
private val ClassDescriptor.isAny: Boolean get() = fqNameUnsafe == KotlinBuiltIns.FQ_NAMES.any
|
private val ClassDescriptor.isAny: Boolean get() = fqNameUnsafe == KotlinBuiltIns.FQ_NAMES.any
|
||||||
|
|
||||||
private class FallbackBuiltIns private constructor() : KotlinBuiltIns(LockBasedStorageManager()) {
|
private class FallbackBuiltIns private constructor() : KotlinBuiltIns(LockBasedStorageManager()) {
|
||||||
|
init {
|
||||||
|
createBuiltInsModule()
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val initializer = BuiltInsInitializer {
|
private val initializer = BuiltInsInitializer {
|
||||||
FallbackBuiltIns()
|
FallbackBuiltIns()
|
||||||
|
|||||||
@@ -20,8 +20,10 @@ import org.jetbrains.kotlin.builtins.JvmBuiltInClassDescriptorFactory
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.load.kotlin.JvmBuiltInsSettings
|
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.serialization.deserialization.PlatformDependentDeclarationFilter
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
import org.jetbrains.kotlin.storage.getValue
|
||||||
import org.jetbrains.kotlin.utils.sure
|
import org.jetbrains.kotlin.utils.sure
|
||||||
|
|
||||||
class JvmBuiltIns(storageManager: StorageManager) : KotlinBuiltIns(storageManager) {
|
class JvmBuiltIns(storageManager: StorageManager) : KotlinBuiltIns(storageManager) {
|
||||||
@@ -35,21 +37,21 @@ class JvmBuiltIns(storageManager: StorageManager) : KotlinBuiltIns(storageManage
|
|||||||
this.isAdditionalBuiltInsFeatureSupported = isAdditionalBuiltInsFeatureSupported
|
this.isAdditionalBuiltInsFeatureSupported = isAdditionalBuiltInsFeatureSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
lateinit var settings: JvmBuiltInsSettings
|
val settings: JvmBuiltInsSettings by storageManager.createLazyValue {
|
||||||
private set
|
JvmBuiltInsSettings(
|
||||||
|
|
||||||
// Here we know order in which KotlinBuiltIns constructor calls these methods
|
|
||||||
override fun getPlatformDependentDeclarationFilter(): PlatformDependentDeclarationFilter {
|
|
||||||
settings = JvmBuiltInsSettings(
|
|
||||||
builtInsModule, storageManager,
|
builtInsModule, storageManager,
|
||||||
{ ownerModuleDescriptor.sure { "JvmBuiltins has not been initialized properly" } },
|
{ ownerModuleDescriptor.sure { "JvmBuiltins has not been initialized properly" } },
|
||||||
{ isAdditionalBuiltInsFeatureSupported }
|
{ isAdditionalBuiltInsFeatureSupported }
|
||||||
)
|
)
|
||||||
|
|
||||||
return settings
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAdditionalClassPartsProvider() = settings
|
init {
|
||||||
|
createBuiltInsModule()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getPlatformDependentDeclarationFilter(): PlatformDependentDeclarationFilter = settings
|
||||||
|
|
||||||
|
override fun getAdditionalClassPartsProvider(): AdditionalClassPartsProvider = settings
|
||||||
|
|
||||||
override fun getClassDescriptorFactories() =
|
override fun getClassDescriptorFactories() =
|
||||||
super.getClassDescriptorFactories() + JvmBuiltInClassDescriptorFactory(storageManager, builtInsModule)
|
super.getClassDescriptorFactories() + JvmBuiltInClassDescriptorFactory(storageManager, builtInsModule)
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ package org.jetbrains.kotlin.builtins
|
|||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
|
|
||||||
class DefaultBuiltIns private constructor() : KotlinBuiltIns(LockBasedStorageManager()) {
|
class DefaultBuiltIns private constructor() : KotlinBuiltIns(LockBasedStorageManager()) {
|
||||||
|
init {
|
||||||
|
createBuiltInsModule()
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val initializer = BuiltInsInitializer {
|
private val initializer = BuiltInsInitializer {
|
||||||
DefaultBuiltIns()
|
DefaultBuiltIns()
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public abstract class KotlinBuiltIns {
|
|||||||
BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier("internal"))
|
BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier("internal"))
|
||||||
);
|
);
|
||||||
|
|
||||||
private final ModuleDescriptorImpl builtInsModule;
|
private ModuleDescriptorImpl builtInsModule;
|
||||||
|
|
||||||
private final NotNullLazyValue<Primitives> primitives;
|
private final NotNullLazyValue<Primitives> primitives;
|
||||||
private final NotNullLazyValue<PackageFragments> packageFragments;
|
private final NotNullLazyValue<PackageFragments> packageFragments;
|
||||||
@@ -78,24 +78,6 @@ public abstract class KotlinBuiltIns {
|
|||||||
|
|
||||||
protected KotlinBuiltIns(@NotNull StorageManager storageManager) {
|
protected KotlinBuiltIns(@NotNull StorageManager storageManager) {
|
||||||
this.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<String, InputStream>() {
|
|
||||||
@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<PackageFragments>() {
|
this.packageFragments = storageManager.createLazyValue(new Function0<PackageFragments>() {
|
||||||
@Override
|
@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<String, InputStream>() {
|
||||||
|
@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
|
@NotNull
|
||||||
protected AdditionalClassPartsProvider getAdditionalClassPartsProvider() {
|
protected AdditionalClassPartsProvider getAdditionalClassPartsProvider() {
|
||||||
return AdditionalClassPartsProvider.None.INSTANCE;
|
return AdditionalClassPartsProvider.None.INSTANCE;
|
||||||
|
|||||||
Reference in New Issue
Block a user