From 261ed46341595d2268d971cf56aaf5aa9aa48687 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 8 Jun 2020 14:30:34 +0300 Subject: [PATCH] IR metadata source: do not require descriptor in property metadata --- .../fir/backend/Fir2IrDeclarationStorage.kt | 6 +++--- .../kotlin/fir/backend/FirMetadataSource.kt | 16 ++++++++++------ .../jvm/codegen/DescriptorBasedClassCodegen.kt | 2 +- .../ir/builders/declarations/IrFieldBuilder.kt | 2 +- .../jetbrains/kotlin/ir/declarations/IrField.kt | 2 +- .../kotlin/ir/declarations/impl/IrFieldImpl.kt | 4 ++-- .../declarations/impl/carriers/FieldCarrier.kt | 4 ++-- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 32bb05a0869..e957124010c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -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 } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt index 3cf1b46ff33..01e4feccc9c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt @@ -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 } } \ No newline at end of file diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorBasedClassCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorBasedClassCodegen.kt index 4094f525c11..a9ec5787a9d 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorBasedClassCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorBasedClassCodegen.kt @@ -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) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFieldBuilder.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFieldBuilder.kt index 6c062a432d5..85daf655cf9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFieldBuilder.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFieldBuilder.kt @@ -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) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt index 546cfd53b2b..10b39636bce 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt @@ -27,5 +27,5 @@ interface IrField : var correspondingPropertySymbol: IrPropertySymbol? - override val metadata: MetadataSource.Property? + override val metadata: MetadataSource? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt index 880b7f4e50a..7c52fcd577e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt @@ -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) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FieldCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FieldCarrier.kt index 2f19b8846f9..559ba74dffb 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FieldCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FieldCarrier.kt @@ -16,7 +16,7 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol interface FieldCarrier : DeclarationCarrier { var initializerField: IrExpressionBody? var correspondingPropertySymbolField: IrPropertySymbol? - var metadataField: MetadataSource.Property? + var metadataField: MetadataSource? var overridenSymbolsField: List override fun clone(): FieldCarrier { @@ -40,6 +40,6 @@ class FieldCarrierImpl( override var annotationsField: List, override var initializerField: IrExpressionBody?, override var correspondingPropertySymbolField: IrPropertySymbol?, - override var metadataField: MetadataSource.Property?, + override var metadataField: MetadataSource?, override var overridenSymbolsField: List ): FieldCarrier \ No newline at end of file