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)
|
val localDelegatedProperties = (irClass.attributeOwnerId as? IrClass)?.let(context.localDelegatedProperties::get)
|
||||||
if (localDelegatedProperties != null && localDelegatedProperties.isNotEmpty()) {
|
if (localDelegatedProperties != null && localDelegatedProperties.isNotEmpty()) {
|
||||||
state.bindingTrace.record(
|
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 delegate: IrVariable
|
||||||
var getter: IrFunction
|
var getter: IrFunction
|
||||||
var setter: IrFunction?
|
var setter: IrFunction?
|
||||||
|
|
||||||
|
override val metadata: MetadataSource.LocalDelegatedProperty?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.declarations
|
package org.jetbrains.kotlin.ir.declarations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
interface MetadataSource {
|
interface MetadataSource {
|
||||||
@@ -29,4 +26,7 @@ interface MetadataSource {
|
|||||||
open class Function(descriptor: FunctionDescriptor) : DescriptorBased<FunctionDescriptor>(descriptor)
|
open class Function(descriptor: FunctionDescriptor) : DescriptorBased<FunctionDescriptor>(descriptor)
|
||||||
|
|
||||||
open class Property(descriptor: PropertyDescriptor) : DescriptorBased<PropertyDescriptor>(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 =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitLocalDelegatedProperty(this, data)
|
visitor.visitLocalDelegatedProperty(this, data)
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -5,16 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
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.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
|
||||||
interface LocalDelegatedPropertyCarrier : DeclarationCarrier<LocalDelegatedPropertyCarrier> {
|
interface LocalDelegatedPropertyCarrier : DeclarationCarrier<LocalDelegatedPropertyCarrier> {
|
||||||
var delegateField: IrVariable?
|
var delegateField: IrVariable?
|
||||||
var getterField: IrFunction?
|
var getterField: IrFunction?
|
||||||
var setterField: IrFunction?
|
var setterField: IrFunction?
|
||||||
|
var metadataField: MetadataSource.LocalDelegatedProperty?
|
||||||
|
|
||||||
override fun clone(): LocalDelegatedPropertyCarrier {
|
override fun clone(): LocalDelegatedPropertyCarrier {
|
||||||
return LocalDelegatedPropertyCarrierImpl(
|
return LocalDelegatedPropertyCarrierImpl(
|
||||||
@@ -24,7 +22,8 @@ interface LocalDelegatedPropertyCarrier : DeclarationCarrier<LocalDelegatedPrope
|
|||||||
annotationsField,
|
annotationsField,
|
||||||
delegateField,
|
delegateField,
|
||||||
getterField,
|
getterField,
|
||||||
setterField
|
setterField,
|
||||||
|
metadataField
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -36,5 +35,6 @@ class LocalDelegatedPropertyCarrierImpl(
|
|||||||
override var annotationsField: List<IrConstructorCall>,
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
override var delegateField: IrVariable?,
|
override var delegateField: IrVariable?,
|
||||||
override var getterField: IrFunction?,
|
override var getterField: IrFunction?,
|
||||||
override var setterField: IrFunction?
|
override var setterField: IrFunction?,
|
||||||
|
override var metadataField: MetadataSource.LocalDelegatedProperty?
|
||||||
) : LocalDelegatedPropertyCarrier
|
) : LocalDelegatedPropertyCarrier
|
||||||
@@ -958,7 +958,9 @@ open class SymbolTable(
|
|||||||
) {
|
) {
|
||||||
IrLocalDelegatedPropertyImpl(
|
IrLocalDelegatedPropertyImpl(
|
||||||
startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(descriptor), type, descriptor.isVar
|
startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(descriptor), type, descriptor.isVar
|
||||||
)
|
).apply {
|
||||||
|
metadata = MetadataSource.LocalDelegatedProperty(descriptor)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun referenceLocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) =
|
fun referenceLocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) =
|
||||||
|
|||||||
Reference in New Issue
Block a user