IR: only worry about threads in JvmIrSignatureDescriptor
General IdSignatureDescriptor is used from other backends, which have no multi-threaded backend for now and do not need to carry the associated runtime costs. So IdSignatureDescriptor keeps the thread-unsafe caching of signature builder.
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.analysis
|
package org.jetbrains.kotlin.fir.analysis
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
|
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
|
||||||
|
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
|
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
|
||||||
@@ -83,7 +84,7 @@ class FirAnalyzerFacade(
|
|||||||
|
|
||||||
fun convertToIr(extensions: GeneratorExtensions): Fir2IrResult {
|
fun convertToIr(extensions: GeneratorExtensions): Fir2IrResult {
|
||||||
if (scopeSession == null) runResolution()
|
if (scopeSession == null) runResolution()
|
||||||
val signaturer = IdSignatureDescriptor(JvmManglerDesc())
|
val signaturer = JvmIdSignatureDescriptor(JvmManglerDesc())
|
||||||
|
|
||||||
return Fir2IrConverter.createModuleFragment(
|
return Fir2IrConverter.createModuleFragment(
|
||||||
session, scopeSession!!, firFiles!!,
|
session, scopeSession!!, firFiles!!,
|
||||||
|
|||||||
+4
-2
@@ -105,15 +105,17 @@ open class IdSignatureDescriptor(private val mangler: KotlinMangler.DescriptorMa
|
|||||||
reportUnexpectedDescriptor(descriptor)
|
reportUnexpectedDescriptor(descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val composer by lazy { createSignatureBuilder() }
|
||||||
|
|
||||||
override fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? {
|
override fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? {
|
||||||
return if (mangler.run { descriptor.isExported() }) {
|
return if (mangler.run { descriptor.isExported() }) {
|
||||||
createSignatureBuilder().buildSignature(descriptor)
|
composer.buildSignature(descriptor)
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? {
|
override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? {
|
||||||
return if (mangler.run { descriptor.isExportEnumEntry() }) {
|
return if (mangler.run { descriptor.isExportEnumEntry() }) {
|
||||||
createSignatureBuilder().buildSignature(descriptor)
|
composer.buildSignature(descriptor)
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+15
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.jvm.serialization
|
|||||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
|
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
|
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||||
import org.jetbrains.kotlin.ir.util.KotlinMangler
|
import org.jetbrains.kotlin.ir.util.KotlinMangler
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaForKotlinOverridePropertyDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaForKotlinOverridePropertyDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||||
@@ -95,4 +96,18 @@ class JvmIdSignatureDescriptor(private val mangler: KotlinMangler.DescriptorMang
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun createSignatureBuilder(): DescriptorBasedSignatureBuilder = JvmDescriptorBasedSignatureBuilder(mangler)
|
override fun createSignatureBuilder(): DescriptorBasedSignatureBuilder = JvmDescriptorBasedSignatureBuilder(mangler)
|
||||||
|
|
||||||
|
/* In multi-threaded environment, we cannot afford to cache a signature builder, as in IdSignatureBuilder. */
|
||||||
|
|
||||||
|
override fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? {
|
||||||
|
return if (mangler.run { descriptor.isExported() }) {
|
||||||
|
createSignatureBuilder().buildSignature(descriptor)
|
||||||
|
} else null
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? {
|
||||||
|
return if (mangler.run { descriptor.isExportEnumEntry() }) {
|
||||||
|
createSignatureBuilder().buildSignature(descriptor)
|
||||||
|
} else null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user