IR: move containerSource from descriptor to IrFunction, IrProperty
This commit is contained in:
+6
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
|
||||
class IrFunctionBuilder : IrDeclarationBuilder() {
|
||||
|
||||
@@ -30,9 +31,14 @@ class IrFunctionBuilder : IrDeclarationBuilder() {
|
||||
|
||||
var isFakeOverride: Boolean = false
|
||||
|
||||
var originalDeclaration: IrFunction? = null
|
||||
var containerSource: DeserializedContainerSource? = null
|
||||
|
||||
fun updateFrom(from: IrFunction) {
|
||||
super.updateFrom(from)
|
||||
|
||||
containerSource = from.containerSource
|
||||
|
||||
isInline = from.isInline
|
||||
isExternal = from.isExternal
|
||||
isExpect = from.isExpect
|
||||
|
||||
+7
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.builders.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
|
||||
class IrPropertyBuilder : IrDeclarationBuilder() {
|
||||
var modality: Modality = Modality.FINAL
|
||||
@@ -19,6 +20,9 @@ class IrPropertyBuilder : IrDeclarationBuilder() {
|
||||
var isExpect: Boolean = false
|
||||
var isFakeOverride: Boolean = false
|
||||
|
||||
var originalDeclaration: IrProperty? = null
|
||||
var containerSource: DeserializedContainerSource? = null
|
||||
|
||||
fun updateFrom(from: IrProperty) {
|
||||
super.updateFrom(from)
|
||||
|
||||
@@ -29,5 +33,8 @@ class IrPropertyBuilder : IrDeclarationBuilder() {
|
||||
isExternal = from.isExternal
|
||||
isExpect = from.isExpect
|
||||
isFakeOverride = from.isFakeOverride
|
||||
|
||||
originalDeclaration = from
|
||||
containerSource = from.containerSource
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
interface IrFactory {
|
||||
@@ -55,6 +56,7 @@ interface IrFactory {
|
||||
isExternal: Boolean,
|
||||
isPrimary: Boolean,
|
||||
isExpect: Boolean,
|
||||
containerSource: DeserializedContainerSource? = null
|
||||
): IrConstructor
|
||||
|
||||
fun createEnumEntry(
|
||||
@@ -101,6 +103,7 @@ interface IrFactory {
|
||||
isInfix: Boolean,
|
||||
isExpect: Boolean,
|
||||
isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||
containerSource: DeserializedContainerSource? = null,
|
||||
): IrSimpleFunction
|
||||
|
||||
fun createFakeOverrideFunction(
|
||||
@@ -145,6 +148,7 @@ interface IrFactory {
|
||||
isExternal: Boolean,
|
||||
isExpect: Boolean = false,
|
||||
isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||
containerSource: DeserializedContainerSource? = null
|
||||
): IrProperty
|
||||
|
||||
fun createFakeOverrideProperty(
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.util.transformIfNeeded
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
|
||||
abstract class IrFunction :
|
||||
IrDeclarationBase(),
|
||||
@@ -48,6 +49,8 @@ abstract class IrFunction :
|
||||
|
||||
abstract var body: IrBody?
|
||||
|
||||
abstract val containerSource: DeserializedContainerSource?
|
||||
|
||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||
typeParameters.forEach { it.accept(visitor, data) }
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
|
||||
abstract class IrProperty : IrDeclarationBase(), IrOverridableMember, IrMetadataSourceOwner {
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
@@ -39,6 +40,8 @@ abstract class IrProperty : IrDeclarationBase(), IrOverridableMember, IrMetadata
|
||||
abstract var getter: IrSimpleFunction?
|
||||
abstract var setter: IrSimpleFunction?
|
||||
|
||||
abstract val containerSource: DeserializedContainerSource?
|
||||
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||
visitor.visitProperty(this, data)
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||
import org.jetbrains.kotlin.ir.util.withScope
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
class IrLazyConstructor(
|
||||
@@ -66,6 +68,9 @@ class IrLazyConstructor(
|
||||
}
|
||||
}
|
||||
|
||||
override val containerSource: DeserializedContainerSource?
|
||||
get() = (descriptor as? DescriptorWithContainerSource)?.containerSource
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@ import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||
import org.jetbrains.kotlin.ir.util.withScope
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
class IrLazyFunction(
|
||||
@@ -88,6 +90,9 @@ class IrLazyFunction(
|
||||
|
||||
override var correspondingPropertySymbol: IrPropertySymbol? = null
|
||||
|
||||
override val containerSource: DeserializedContainerSource?
|
||||
get() = (descriptor as? DescriptorWithContainerSource)?.containerSource
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.hasBackingField
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor
|
||||
|
||||
class IrLazyProperty(
|
||||
override val startOffset: Int,
|
||||
@@ -70,6 +72,9 @@ class IrLazyProperty(
|
||||
}
|
||||
}
|
||||
|
||||
override val containerSource: DeserializedContainerSource?
|
||||
get() = (descriptor as? DeserializedPropertyDescriptor)?.containerSource
|
||||
|
||||
override var metadata: MetadataSource?
|
||||
get() = null
|
||||
set(_) = error("We should never need to store metadata of external declarations.")
|
||||
|
||||
@@ -463,9 +463,10 @@ open class WrappedSimpleFunctionDescriptor(
|
||||
}
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
class WrappedFunctionDescriptorWithContainerSource(
|
||||
override val containerSource: DeserializedContainerSource?
|
||||
) : WrappedSimpleFunctionDescriptor(), DescriptorWithContainerSource
|
||||
class WrappedFunctionDescriptorWithContainerSource : WrappedSimpleFunctionDescriptor(), DescriptorWithContainerSource {
|
||||
override val containerSource
|
||||
get() = owner.containerSource
|
||||
}
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
open class WrappedClassConstructorDescriptor(
|
||||
@@ -883,9 +884,10 @@ open class WrappedPropertyDescriptor(
|
||||
override fun <V : Any?> getUserData(key: CallableDescriptor.UserDataKey<V>?): V? = null
|
||||
}
|
||||
|
||||
class WrappedPropertyDescriptorWithContainerSource(
|
||||
override var containerSource: DeserializedContainerSource?
|
||||
) : WrappedPropertyDescriptor(), DescriptorWithContainerSource
|
||||
class WrappedPropertyDescriptorWithContainerSource : WrappedPropertyDescriptor(), DescriptorWithContainerSource {
|
||||
override val containerSource: DeserializedContainerSource?
|
||||
get() = owner.containerSource
|
||||
}
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
abstract class WrappedPropertyAccessorDescriptor(annotations: Annotations, sourceElement: SourceElement) :
|
||||
|
||||
@@ -163,10 +163,11 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
isExternal = declaration.isExternal,
|
||||
isTailrec = declaration.isTailrec,
|
||||
isSuspend = declaration.isSuspend,
|
||||
isOperator = declaration.isOperator,
|
||||
isInfix = declaration.isInfix,
|
||||
isExpect = declaration.isExpect,
|
||||
isFakeOverride = declaration.isFakeOverride,
|
||||
isOperator = declaration.isOperator,
|
||||
isInfix = declaration.isInfix
|
||||
containerSource = declaration.containerSource,
|
||||
).apply {
|
||||
overriddenSymbols = declaration.overriddenSymbols.map {
|
||||
symbolRemapper.getReferencedFunction(it) as IrSimpleFunctionSymbol
|
||||
@@ -186,7 +187,8 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
isInline = declaration.isInline,
|
||||
isExternal = declaration.isExternal,
|
||||
isPrimary = declaration.isPrimary,
|
||||
isExpect = declaration.isExpect
|
||||
isExpect = declaration.isExpect,
|
||||
containerSource = declaration.containerSource,
|
||||
).apply {
|
||||
transformFunctionChildren(declaration)
|
||||
}
|
||||
@@ -220,8 +222,9 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
isConst = declaration.isConst,
|
||||
isLateinit = declaration.isLateinit,
|
||||
isDelegated = declaration.isDelegated,
|
||||
isExternal = declaration.isExternal,
|
||||
isExpect = declaration.isExpect,
|
||||
isExternal = declaration.isExternal
|
||||
containerSource = declaration.containerSource,
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
this.backingField = declaration.backingField?.transform()?.also {
|
||||
|
||||
@@ -650,13 +650,13 @@ class SymbolTable(
|
||||
isDelegated: Boolean = descriptor.isDelegated,
|
||||
propertyFactory: (IrPropertySymbol) -> IrProperty = { symbol ->
|
||||
irFactory.createProperty(
|
||||
startOffset, endOffset, origin, symbol, isDelegated = isDelegated,
|
||||
name = nameProvider.nameForDeclaration(descriptor),
|
||||
startOffset, endOffset, origin, symbol, name = nameProvider.nameForDeclaration(descriptor),
|
||||
visibility = descriptor.visibility,
|
||||
modality = descriptor.modality,
|
||||
isVar = descriptor.isVar,
|
||||
isConst = descriptor.isConst,
|
||||
isLateinit = descriptor.isLateInit,
|
||||
isDelegated = isDelegated,
|
||||
isExternal = descriptor.isEffectivelyExternal(),
|
||||
isExpect = descriptor.isExpect
|
||||
).apply {
|
||||
|
||||
Reference in New Issue
Block a user