IR: use threadLocal
This commit is contained in:
@@ -59,7 +59,7 @@ class DeclarationStubGenerator(
|
||||
lazyTable,
|
||||
languageVersionSettings,
|
||||
moduleDescriptor.builtIns,
|
||||
LazyScopedTypeParametersResolver(lazyTable),
|
||||
{ LazyScopedTypeParametersResolver(lazyTable) },
|
||||
true,
|
||||
extensions
|
||||
)
|
||||
|
||||
@@ -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<TypeAliasDescriptor, IrTypeAlias, IrTypeAliasSymbol>()
|
||||
|
||||
private val globalTypeParameterSymbolTable = FlatSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
||||
private val scopedTypeParameterSymbolTable = ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
||||
private val valueParameterSymbolTable = ScopedSymbolTable<ParameterDescriptor, IrValueParameter, IrValueParameterSymbol>()
|
||||
private val variableSymbolTable = ScopedSymbolTable<VariableDescriptor, IrVariable, IrVariableSymbol>()
|
||||
private val localDelegatedPropertySymbolTable =
|
||||
private val scopedTypeParameterSymbolTable by threadLocal {
|
||||
ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
||||
}
|
||||
private val valueParameterSymbolTable by threadLocal {
|
||||
ScopedSymbolTable<ParameterDescriptor, IrValueParameter, IrValueParameterSymbol>()
|
||||
}
|
||||
private val variableSymbolTable by threadLocal {
|
||||
ScopedSymbolTable<VariableDescriptor, IrVariable, IrVariableSymbol>()
|
||||
}
|
||||
private val localDelegatedPropertySymbolTable by threadLocal {
|
||||
ScopedSymbolTable<VariableDescriptorWithAccessors, IrLocalDelegatedProperty, IrLocalDelegatedPropertySymbol>()
|
||||
private val scopedSymbolTables =
|
||||
}
|
||||
private val scopedSymbolTables by threadLocal {
|
||||
listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable, localDelegatedPropertySymbolTable)
|
||||
}
|
||||
|
||||
fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) =
|
||||
externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) }
|
||||
|
||||
@@ -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<PropertyDescriptor>()
|
||||
|
||||
private val typeApproximatorForNI = TypeApproximator(builtIns)
|
||||
|
||||
+2
-4
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user