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)
}
}.apply {
metadata = FirMetadataSource.Property(property, descriptor)
metadata = FirMetadataSource.Property(property)
}
}
}
@@ -708,7 +708,7 @@ class Fir2IrDeclarationStorage(
isExpect = property.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
).apply {
metadata = FirMetadataSource.Variable(property, descriptor)
metadata = FirMetadataSource.Variable(property)
enterScope(this)
if (irParent != null) {
parent = irParent
@@ -794,7 +794,7 @@ class Fir2IrDeclarationStorage(
isStatic = field.isStatic,
isFakeOverride = false
).apply {
metadata = FirMetadataSource.Variable(field, descriptor)
metadata = FirMetadataSource.Variable(field)
descriptor.bind(this)
fieldCache[field] = this
}
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.ir.declarations.MetadataSource
@@ -44,17 +43,22 @@ interface FirMetadataSource : MetadataSource {
}
class Property(
val property: FirProperty, descriptor: PropertyDescriptor
) : MetadataSource.Property(descriptor), FirMetadataSource {
val property: FirProperty
) : FirMetadataSource {
override val session: FirSession
get() = property.session
override val name: Name
get() = property.name
}
class Variable(
val variable: FirVariable<*>,
descriptor: PropertyDescriptor
) : MetadataSource.Property(descriptor), FirMetadataSource {
val variable: FirVariable<*>
) : FirMetadataSource {
override val session: FirSession
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) {
val descriptor = field.metadata?.descriptor
val descriptor = (field.metadata as? MetadataSource.Property)?.descriptor
if (descriptor != null) {
state.globalSerializationBindings.put(JvmSerializationBindings.FIELD_FOR_PROPERTY, descriptor, fieldType to fieldName)
}
@@ -17,7 +17,7 @@ class IrFieldBuilder : IrDeclarationBuilder() {
var isExternal: Boolean = false
var isStatic: Boolean = false
var isFakeOverride: Boolean = false
var metadata: MetadataSource.Property? = null
var metadata: MetadataSource? = null
fun updateFrom(from: IrField) {
super.updateFrom(from)
@@ -27,5 +27,5 @@ interface IrField :
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
set(v) {
if (metadata !== v) {
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
interface FieldCarrier : DeclarationCarrier<FieldCarrier> {
var initializerField: IrExpressionBody?
var correspondingPropertySymbolField: IrPropertySymbol?
var metadataField: MetadataSource.Property?
var metadataField: MetadataSource?
var overridenSymbolsField: List<IrFieldSymbol>
override fun clone(): FieldCarrier {
@@ -40,6 +40,6 @@ class FieldCarrierImpl(
override var annotationsField: List<IrConstructorCall>,
override var initializerField: IrExpressionBody?,
override var correspondingPropertySymbolField: IrPropertySymbol?,
override var metadataField: MetadataSource.Property?,
override var metadataField: MetadataSource?,
override var overridenSymbolsField: List<IrFieldSymbol>
): FieldCarrier