Migrate DescriptorsFactory caching to symbols
This commit is contained in:
+5
-10
@@ -24,12 +24,7 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
|||||||
import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
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.impl.IrConstructorSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -39,7 +34,7 @@ import java.util.*
|
|||||||
class JsDescriptorsFactory(
|
class JsDescriptorsFactory(
|
||||||
private val builtIns: KotlinBuiltIns
|
private val builtIns: KotlinBuiltIns
|
||||||
) : DescriptorsFactory {
|
) : DescriptorsFactory {
|
||||||
private val singletonFieldDescriptors = HashMap<ClassDescriptor, PropertyDescriptor>()
|
private val singletonFieldDescriptors = HashMap<IrBindableSymbol<*, *>, IrFieldSymbol>()
|
||||||
private val outerThisDescriptors = HashMap<ClassDescriptor, PropertyDescriptor>()
|
private val outerThisDescriptors = HashMap<ClassDescriptor, PropertyDescriptor>()
|
||||||
private val innerClassConstructors = HashMap<ClassConstructorDescriptor, IrConstructorSymbol>()
|
private val innerClassConstructors = HashMap<ClassConstructorDescriptor, IrConstructorSymbol>()
|
||||||
|
|
||||||
@@ -117,9 +112,9 @@ class JsDescriptorsFactory(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getSymbolForObjectInstance(singleton: IrClassSymbol): IrFieldSymbol =
|
override fun getSymbolForObjectInstance(singleton: IrClassSymbol): IrFieldSymbol =
|
||||||
IrFieldSymbolImpl(singletonFieldDescriptors.getOrPut(singleton.descriptor) {
|
singletonFieldDescriptors.getOrPut(singleton) {
|
||||||
createObjectInstanceFieldDescriptor(singleton.descriptor)
|
IrFieldSymbolImpl(createObjectInstanceFieldDescriptor(singleton.descriptor))
|
||||||
})
|
}
|
||||||
|
|
||||||
private fun createObjectInstanceFieldDescriptor(objectDescriptor: ClassDescriptor): PropertyDescriptor {
|
private fun createObjectInstanceFieldDescriptor(objectDescriptor: ClassDescriptor): PropertyDescriptor {
|
||||||
assert(objectDescriptor.kind == ClassKind.OBJECT) { "Should be an object: $objectDescriptor" }
|
assert(objectDescriptor.kind == ClassKind.OBJECT) { "Should be an object: $objectDescriptor" }
|
||||||
|
|||||||
+8
-14
@@ -26,10 +26,7 @@ import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl
|
|||||||
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.ir.SourceManager
|
import org.jetbrains.kotlin.ir.SourceManager
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
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.impl.IrConstructorSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
||||||
import org.jetbrains.kotlin.load.java.JavaVisibilities
|
import org.jetbrains.kotlin.load.java.JavaVisibilities
|
||||||
@@ -44,17 +41,14 @@ class JvmDescriptorsFactory(
|
|||||||
private val psiSourceManager: PsiSourceManager,
|
private val psiSourceManager: PsiSourceManager,
|
||||||
private val builtIns: KotlinBuiltIns
|
private val builtIns: KotlinBuiltIns
|
||||||
) : DescriptorsFactory {
|
) : DescriptorsFactory {
|
||||||
private val singletonFieldDescriptors = HashMap<ClassDescriptor, PropertyDescriptor>()
|
private val singletonFieldDescriptors = HashMap<IrBindableSymbol<*, *>, IrFieldSymbol>()
|
||||||
private val outerThisDescriptors = HashMap<ClassDescriptor, PropertyDescriptor>()
|
private val outerThisDescriptors = HashMap<ClassDescriptor, PropertyDescriptor>()
|
||||||
private val innerClassConstructors = HashMap<ClassConstructorDescriptor, IrConstructorSymbol>()
|
private val innerClassConstructors = HashMap<ClassConstructorDescriptor, IrConstructorSymbol>()
|
||||||
|
|
||||||
override fun getSymbolForEnumEntry(enumEntry: IrEnumEntrySymbol): IrFieldSymbol {
|
override fun getSymbolForEnumEntry(enumEntry: IrEnumEntrySymbol): IrFieldSymbol =
|
||||||
val enumEntryDescriptor = enumEntry.descriptor
|
singletonFieldDescriptors.getOrPut(enumEntry) {
|
||||||
val fieldDescriptor = singletonFieldDescriptors.getOrPut(enumEntryDescriptor) {
|
IrFieldSymbolImpl(createEnumEntryFieldDescriptor(enumEntry.descriptor))
|
||||||
createEnumEntryFieldDescriptor(enumEntryDescriptor)
|
|
||||||
}
|
}
|
||||||
return IrFieldSymbolImpl(fieldDescriptor)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createFileClassDescriptor(fileEntry: SourceManager.FileEntry, packageFragment: PackageFragmentDescriptor): FileClassDescriptor {
|
fun createFileClassDescriptor(fileEntry: SourceManager.FileEntry, packageFragment: PackageFragmentDescriptor): FileClassDescriptor {
|
||||||
val ktFile = psiSourceManager.getKtFile(fileEntry as PsiSourceManager.PsiFileEntry)
|
val ktFile = psiSourceManager.getKtFile(fileEntry as PsiSourceManager.PsiFileEntry)
|
||||||
@@ -128,9 +122,9 @@ class JvmDescriptorsFactory(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getSymbolForObjectInstance(singleton: IrClassSymbol): IrFieldSymbol =
|
override fun getSymbolForObjectInstance(singleton: IrClassSymbol): IrFieldSymbol =
|
||||||
IrFieldSymbolImpl(singletonFieldDescriptors.getOrPut(singleton.descriptor) {
|
singletonFieldDescriptors.getOrPut(singleton) {
|
||||||
createObjectInstanceFieldDescriptor(singleton.descriptor)
|
IrFieldSymbolImpl(createObjectInstanceFieldDescriptor(singleton.descriptor))
|
||||||
})
|
}
|
||||||
|
|
||||||
private fun createObjectInstanceFieldDescriptor(objectDescriptor: ClassDescriptor): PropertyDescriptor {
|
private fun createObjectInstanceFieldDescriptor(objectDescriptor: ClassDescriptor): PropertyDescriptor {
|
||||||
assert(objectDescriptor.kind == ClassKind.OBJECT) { "Should be an object: $objectDescriptor" }
|
assert(objectDescriptor.kind == ClassKind.OBJECT) { "Should be an object: $objectDescriptor" }
|
||||||
|
|||||||
Reference in New Issue
Block a user