IR: move containerSource from descriptor to IrFunction, IrProperty

This commit is contained in:
Georgy Bronnikov
2020-08-09 13:29:11 +03:00
parent 4669e019d1
commit 04d93dfbce
41 changed files with 178 additions and 93 deletions
@@ -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,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 {