diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index 88ce9378197..509a8946974 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -59,7 +59,7 @@ class DeclarationStubGenerator( lazyTable, languageVersionSettings, moduleDescriptor.builtIns, - LazyScopedTypeParametersResolver(lazyTable), + { LazyScopedTypeParametersResolver(lazyTable) }, true, extensions ) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index d2eb45738d0..5bc6ef41aca 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.* import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal +import org.jetbrains.kotlin.utils.threadLocal interface ReferenceSymbolTable { fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol @@ -327,13 +328,21 @@ class SymbolTable( private val typeAliasSymbolTable = FlatSymbolTable() private val globalTypeParameterSymbolTable = FlatSymbolTable() - private val scopedTypeParameterSymbolTable = ScopedSymbolTable() - private val valueParameterSymbolTable = ScopedSymbolTable() - private val variableSymbolTable = ScopedSymbolTable() - private val localDelegatedPropertySymbolTable = + private val scopedTypeParameterSymbolTable by threadLocal { + ScopedSymbolTable() + } + private val valueParameterSymbolTable by threadLocal { + ScopedSymbolTable() + } + private val variableSymbolTable by threadLocal { + ScopedSymbolTable() + } + private val localDelegatedPropertySymbolTable by threadLocal { ScopedSymbolTable() - private val scopedSymbolTables = + } + private val scopedSymbolTables by threadLocal { listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable, localDelegatedPropertySymbolTable) + } fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) = externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt index 89b31166083..2d5e2fa39b9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.types.impl.* import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.typeUtil.replaceArgumentsWithStarProjections import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes +import org.jetbrains.kotlin.utils.threadLocal import java.util.* @OptIn(ObsoleteDescriptorBasedAPI::class) @@ -30,11 +31,13 @@ class TypeTranslator( private val symbolTable: ReferenceSymbolTable, val languageVersionSettings: LanguageVersionSettings, builtIns: KotlinBuiltIns, - private val typeParametersResolver: TypeParametersResolver = ScopedTypeParametersResolver(), + typeParametersResolverBuilder: () -> TypeParametersResolver = { ScopedTypeParametersResolver() }, private val enterTableScope: Boolean = false, private val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY ) { + private val typeParametersResolver by threadLocal { typeParametersResolverBuilder() } + private val erasureStack = Stack() private val typeApproximatorForNI = TypeApproximator(builtIns) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureDescriptor.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureDescriptor.kt index 059f80b18bf..d483cc5a28c 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureDescriptor.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureDescriptor.kt @@ -105,17 +105,15 @@ open class IdSignatureDescriptor(private val mangler: KotlinMangler.DescriptorMa reportUnexpectedDescriptor(descriptor) } - private val composer by lazy { createSignatureBuilder() } - override fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? { return if (mangler.run { descriptor.isExported() }) { - composer.buildSignature(descriptor) + createSignatureBuilder().buildSignature(descriptor) } else null } override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? { return if (mangler.run { descriptor.isExportEnumEntry() }) { - composer.buildSignature(descriptor) + createSignatureBuilder().buildSignature(descriptor) } else null } } \ No newline at end of file