From ee98556669856f40c1d34e6ab4077ecd3e1ba6f2 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Tue, 8 May 2018 11:55:59 +0200 Subject: [PATCH] Migrate DescriptorsFactory caching to symbols --- .../ir/backend/js/JsDescriptorsFactory.kt | 15 +++++-------- .../jvm/descriptors/JvmDescriptorsFactory.kt | 22 +++++++------------ 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDescriptorsFactory.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDescriptorsFactory.kt index cee3c335f00..949fab538dd 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDescriptorsFactory.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDescriptorsFactory.kt @@ -24,12 +24,7 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl -import org.jetbrains.kotlin.ir.declarations.IrEnumEntry -import org.jetbrains.kotlin.ir.declarations.IrField -import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol -import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol -import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol +import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.name.Name @@ -39,7 +34,7 @@ import java.util.* class JsDescriptorsFactory( private val builtIns: KotlinBuiltIns ) : DescriptorsFactory { - private val singletonFieldDescriptors = HashMap() + private val singletonFieldDescriptors = HashMap, IrFieldSymbol>() private val outerThisDescriptors = HashMap() private val innerClassConstructors = HashMap() @@ -117,9 +112,9 @@ class JsDescriptorsFactory( } override fun getSymbolForObjectInstance(singleton: IrClassSymbol): IrFieldSymbol = - IrFieldSymbolImpl(singletonFieldDescriptors.getOrPut(singleton.descriptor) { - createObjectInstanceFieldDescriptor(singleton.descriptor) - }) + singletonFieldDescriptors.getOrPut(singleton) { + IrFieldSymbolImpl(createObjectInstanceFieldDescriptor(singleton.descriptor)) + } private fun createObjectInstanceFieldDescriptor(objectDescriptor: ClassDescriptor): PropertyDescriptor { assert(objectDescriptor.kind == ClassKind.OBJECT) { "Should be an object: $objectDescriptor" } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDescriptorsFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDescriptorsFactory.kt index da26dc3c5f4..c4ce1c807bd 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDescriptorsFactory.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDescriptorsFactory.kt @@ -26,10 +26,7 @@ import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.ir.SourceManager -import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol -import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol -import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol +import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.load.java.JavaVisibilities @@ -44,17 +41,14 @@ class JvmDescriptorsFactory( private val psiSourceManager: PsiSourceManager, private val builtIns: KotlinBuiltIns ) : DescriptorsFactory { - private val singletonFieldDescriptors = HashMap() + private val singletonFieldDescriptors = HashMap, IrFieldSymbol>() private val outerThisDescriptors = HashMap() private val innerClassConstructors = HashMap() - override fun getSymbolForEnumEntry(enumEntry: IrEnumEntrySymbol): IrFieldSymbol { - val enumEntryDescriptor = enumEntry.descriptor - val fieldDescriptor = singletonFieldDescriptors.getOrPut(enumEntryDescriptor) { - createEnumEntryFieldDescriptor(enumEntryDescriptor) + override fun getSymbolForEnumEntry(enumEntry: IrEnumEntrySymbol): IrFieldSymbol = + singletonFieldDescriptors.getOrPut(enumEntry) { + IrFieldSymbolImpl(createEnumEntryFieldDescriptor(enumEntry.descriptor)) } - return IrFieldSymbolImpl(fieldDescriptor) - } fun createFileClassDescriptor(fileEntry: SourceManager.FileEntry, packageFragment: PackageFragmentDescriptor): FileClassDescriptor { val ktFile = psiSourceManager.getKtFile(fileEntry as PsiSourceManager.PsiFileEntry) @@ -128,9 +122,9 @@ class JvmDescriptorsFactory( } override fun getSymbolForObjectInstance(singleton: IrClassSymbol): IrFieldSymbol = - IrFieldSymbolImpl(singletonFieldDescriptors.getOrPut(singleton.descriptor) { - createObjectInstanceFieldDescriptor(singleton.descriptor) - }) + singletonFieldDescriptors.getOrPut(singleton) { + IrFieldSymbolImpl(createObjectInstanceFieldDescriptor(singleton.descriptor)) + } private fun createObjectInstanceFieldDescriptor(objectDescriptor: ClassDescriptor): PropertyDescriptor { assert(objectDescriptor.kind == ClassKind.OBJECT) { "Should be an object: $objectDescriptor" }