IR metadata source: do not require descriptor in property metadata

This commit is contained in:
Mikhail Glukhikh
2020-06-08 14:30:34 +03:00
parent 6f0eeecc64
commit 261ed46341
7 changed files with 20 additions and 16 deletions
@@ -660,7 +660,7 @@ class Fir2IrDeclarationStorage(
it.populateOverriddenSymbols(thisReceiverOwner) it.populateOverriddenSymbols(thisReceiverOwner)
} }
}.apply { }.apply {
metadata = FirMetadataSource.Property(property, descriptor) metadata = FirMetadataSource.Property(property)
} }
} }
} }
@@ -708,7 +708,7 @@ class Fir2IrDeclarationStorage(
isExpect = property.isExpect, isExpect = property.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
).apply { ).apply {
metadata = FirMetadataSource.Variable(property, descriptor) metadata = FirMetadataSource.Variable(property)
enterScope(this) enterScope(this)
if (irParent != null) { if (irParent != null) {
parent = irParent parent = irParent
@@ -794,7 +794,7 @@ class Fir2IrDeclarationStorage(
isStatic = field.isStatic, isStatic = field.isStatic,
isFakeOverride = false isFakeOverride = false
).apply { ).apply {
metadata = FirMetadataSource.Variable(field, descriptor) metadata = FirMetadataSource.Variable(field)
descriptor.bind(this) descriptor.bind(this)
fieldCache[field] = this fieldCache[field] = this
} }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.backend package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.ir.declarations.MetadataSource import org.jetbrains.kotlin.ir.declarations.MetadataSource
@@ -44,17 +43,22 @@ interface FirMetadataSource : MetadataSource {
} }
class Property( class Property(
val property: FirProperty, descriptor: PropertyDescriptor val property: FirProperty
) : MetadataSource.Property(descriptor), FirMetadataSource { ) : FirMetadataSource {
override val session: FirSession override val session: FirSession
get() = property.session get() = property.session
override val name: Name
get() = property.name
} }
class Variable( class Variable(
val variable: FirVariable<*>, val variable: FirVariable<*>
descriptor: PropertyDescriptor ) : FirMetadataSource {
) : MetadataSource.Property(descriptor), FirMetadataSource {
override val session: FirSession override val session: FirSession
get() = variable.session get() = variable.session
override val name: Name
get() = variable.name
} }
} }
@@ -134,7 +134,7 @@ class DescriptorBasedClassCodegen internal constructor(
} }
override fun bindFieldMetadata(field: IrField, fieldType: Type, fieldName: String) { override fun bindFieldMetadata(field: IrField, fieldType: Type, fieldName: String) {
val descriptor = field.metadata?.descriptor val descriptor = (field.metadata as? MetadataSource.Property)?.descriptor
if (descriptor != null) { if (descriptor != null) {
state.globalSerializationBindings.put(JvmSerializationBindings.FIELD_FOR_PROPERTY, descriptor, fieldType to fieldName) state.globalSerializationBindings.put(JvmSerializationBindings.FIELD_FOR_PROPERTY, descriptor, fieldType to fieldName)
} }
@@ -17,7 +17,7 @@ class IrFieldBuilder : IrDeclarationBuilder() {
var isExternal: Boolean = false var isExternal: Boolean = false
var isStatic: Boolean = false var isStatic: Boolean = false
var isFakeOverride: Boolean = false var isFakeOverride: Boolean = false
var metadata: MetadataSource.Property? = null var metadata: MetadataSource? = null
fun updateFrom(from: IrField) { fun updateFrom(from: IrField) {
super.updateFrom(from) super.updateFrom(from)
@@ -27,5 +27,5 @@ interface IrField :
var correspondingPropertySymbol: IrPropertySymbol? var correspondingPropertySymbol: IrPropertySymbol?
override val metadata: MetadataSource.Property? override val metadata: MetadataSource?
} }
@@ -104,9 +104,9 @@ class IrFieldImpl(
} }
} }
override var metadataField: MetadataSource.Property? = null override var metadataField: MetadataSource? = null
override var metadata: MetadataSource.Property? override var metadata: MetadataSource?
get() = getCarrier().metadataField get() = getCarrier().metadataField
set(v) { set(v) {
if (metadata !== v) { if (metadata !== v) {
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
interface FieldCarrier : DeclarationCarrier<FieldCarrier> { interface FieldCarrier : DeclarationCarrier<FieldCarrier> {
var initializerField: IrExpressionBody? var initializerField: IrExpressionBody?
var correspondingPropertySymbolField: IrPropertySymbol? var correspondingPropertySymbolField: IrPropertySymbol?
var metadataField: MetadataSource.Property? var metadataField: MetadataSource?
var overridenSymbolsField: List<IrFieldSymbol> var overridenSymbolsField: List<IrFieldSymbol>
override fun clone(): FieldCarrier { override fun clone(): FieldCarrier {
@@ -40,6 +40,6 @@ class FieldCarrierImpl(
override var annotationsField: List<IrConstructorCall>, override var annotationsField: List<IrConstructorCall>,
override var initializerField: IrExpressionBody?, override var initializerField: IrExpressionBody?,
override var correspondingPropertySymbolField: IrPropertySymbol?, override var correspondingPropertySymbolField: IrPropertySymbol?,
override var metadataField: MetadataSource.Property?, override var metadataField: MetadataSource?,
override var overridenSymbolsField: List<IrFieldSymbol> override var overridenSymbolsField: List<IrFieldSymbol>
): FieldCarrier ): FieldCarrier