JVM_IR: use MetadataSource for local delegated properties
This commit is contained in:
+3
-1
@@ -45,7 +45,9 @@ class DescriptorBasedClassCodegen internal constructor(
|
||||
val localDelegatedProperties = (irClass.attributeOwnerId as? IrClass)?.let(context.localDelegatedProperties::get)
|
||||
if (localDelegatedProperties != null && localDelegatedProperties.isNotEmpty()) {
|
||||
state.bindingTrace.record(
|
||||
CodegenBinding.DELEGATED_PROPERTIES_WITH_METADATA, type, localDelegatedProperties.map { it.descriptor }
|
||||
CodegenBinding.DELEGATED_PROPERTIES_WITH_METADATA,
|
||||
type,
|
||||
localDelegatedProperties.mapNotNull { it.owner.metadata?.descriptor }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -35,4 +35,6 @@ interface IrLocalDelegatedProperty :
|
||||
var delegate: IrVariable
|
||||
var getter: IrFunction
|
||||
var setter: IrFunction?
|
||||
|
||||
override val metadata: MetadataSource.LocalDelegatedProperty?
|
||||
}
|
||||
|
||||
@@ -5,10 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
interface MetadataSource {
|
||||
@@ -29,4 +26,7 @@ interface MetadataSource {
|
||||
open class Function(descriptor: FunctionDescriptor) : DescriptorBased<FunctionDescriptor>(descriptor)
|
||||
|
||||
open class Property(descriptor: PropertyDescriptor) : DescriptorBased<PropertyDescriptor>(descriptor)
|
||||
|
||||
open class LocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) :
|
||||
DescriptorBased<VariableDescriptorWithAccessors>(descriptor)
|
||||
}
|
||||
|
||||
+10
@@ -78,6 +78,16 @@ class IrLocalDelegatedPropertyImpl(
|
||||
}
|
||||
}
|
||||
|
||||
override var metadataField: MetadataSource.LocalDelegatedProperty? = null
|
||||
|
||||
override var metadata: MetadataSource.LocalDelegatedProperty?
|
||||
get() = getCarrier().metadataField
|
||||
set(v) {
|
||||
if (metadata !== v) {
|
||||
setCarrier().metadataField = v
|
||||
}
|
||||
}
|
||||
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||
visitor.visitLocalDelegatedProperty(this, data)
|
||||
|
||||
|
||||
+6
-6
@@ -5,16 +5,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
|
||||
interface LocalDelegatedPropertyCarrier : DeclarationCarrier<LocalDelegatedPropertyCarrier> {
|
||||
var delegateField: IrVariable?
|
||||
var getterField: IrFunction?
|
||||
var setterField: IrFunction?
|
||||
var metadataField: MetadataSource.LocalDelegatedProperty?
|
||||
|
||||
override fun clone(): LocalDelegatedPropertyCarrier {
|
||||
return LocalDelegatedPropertyCarrierImpl(
|
||||
@@ -24,7 +22,8 @@ interface LocalDelegatedPropertyCarrier : DeclarationCarrier<LocalDelegatedPrope
|
||||
annotationsField,
|
||||
delegateField,
|
||||
getterField,
|
||||
setterField
|
||||
setterField,
|
||||
metadataField
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -36,5 +35,6 @@ class LocalDelegatedPropertyCarrierImpl(
|
||||
override var annotationsField: List<IrConstructorCall>,
|
||||
override var delegateField: IrVariable?,
|
||||
override var getterField: IrFunction?,
|
||||
override var setterField: IrFunction?
|
||||
override var setterField: IrFunction?,
|
||||
override var metadataField: MetadataSource.LocalDelegatedProperty?
|
||||
) : LocalDelegatedPropertyCarrier
|
||||
@@ -958,7 +958,9 @@ open class SymbolTable(
|
||||
) {
|
||||
IrLocalDelegatedPropertyImpl(
|
||||
startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(descriptor), type, descriptor.isVar
|
||||
)
|
||||
).apply {
|
||||
metadata = MetadataSource.LocalDelegatedProperty(descriptor)
|
||||
}
|
||||
}
|
||||
|
||||
fun referenceLocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) =
|
||||
|
||||
Reference in New Issue
Block a user