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 b67b0022c6c..fbded6204e4 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 @@ -367,7 +367,7 @@ class Fir2IrDeclarationStorage( ): IrSimpleFunction { if (signature == null) { val descriptor = - if (containerSource != null) WrappedFunctionDescriptorWithContainerSource(containerSource) + if (containerSource != null) WrappedFunctionDescriptorWithContainerSource() else WrappedSimpleFunctionDescriptor() return symbolTable.declareSimpleFunction(descriptor, factory).apply { descriptor.bind(this) } } @@ -411,7 +411,8 @@ class Fir2IrDeclarationStorage( isExpect = simpleFunction?.isExpect == true, isFakeOverride = updatedOrigin == IrDeclarationOrigin.FAKE_OVERRIDE, isOperator = simpleFunction?.isOperator == true, - isInfix = simpleFunction?.isInfix == true + isInfix = simpleFunction?.isInfix == true, + containerSource = simpleFunction?.containerSource, ).apply { metadata = FirMetadataSource.Function(function) convertAnnotationsFromLibrary(function) @@ -522,9 +523,11 @@ class Fir2IrDeclarationStorage( ): IrSimpleFunction { val prefix = if (isSetter) "set" else "get" val signature = if (isLocal) null else signatureComposer.composeAccessorSignature(property, isSetter) + val containerSource = + (correspondingProperty.descriptor as? WrappedPropertyDescriptorWithContainerSource)?.containerSource return declareIrAccessor( signature, - (correspondingProperty.descriptor as? WrappedPropertyDescriptorWithContainerSource)?.containerSource, + containerSource, isGetter = !isSetter ) { symbol -> val accessorReturnType = if (isSetter) irBuiltIns.unitType else propertyType @@ -535,9 +538,10 @@ class Fir2IrDeclarationStorage( correspondingProperty.modality, accessorReturnType, isInline = propertyAccessor?.isInline == true, isExternal = propertyAccessor?.isExternal == true, - isTailrec = false, isSuspend = false, isExpect = false, - isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE, - isOperator = false, isInfix = false + isTailrec = false, isSuspend = false, isOperator = false, + isInfix = false, + isExpect = false, isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE, + containerSource = containerSource, ).apply { correspondingPropertySymbol = correspondingProperty.symbol if (propertyAccessor != null) { @@ -618,7 +622,7 @@ class Fir2IrDeclarationStorage( ): IrProperty { if (signature == null) { val descriptor = - if (containerSource != null) WrappedPropertyDescriptorWithContainerSource(containerSource) + if (containerSource != null) WrappedPropertyDescriptorWithContainerSource() else WrappedPropertyDescriptor() return symbolTable.declareProperty(0, 0, IrDeclarationOrigin.DEFINED, descriptor, isDelegated = false, factory).apply { descriptor.bind(this) @@ -647,7 +651,8 @@ class Fir2IrDeclarationStorage( isDelegated = property.delegate != null, isExternal = property.isExternal, isExpect = property.isExpect, - isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE + isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE, + containerSource = property.containerSource, ).apply { metadata = FirMetadataSource.Variable(property) convertAnnotationsFromLibrary(property) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt index d4636cb52fe..a6af54a0f8e 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt @@ -237,8 +237,8 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) { return components.declarationStorage.declareIrSimpleFunction(signature, null) { symbol -> components.irFactory.createFunction( UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, symbol, name, Visibilities.PUBLIC, Modality.OPEN, returnType, - isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false, - isFakeOverride = false, isOperator = false, isInfix = false, + isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isOperator = false, + isInfix = false, isExpect = false, isFakeOverride = false, ).apply { if (otherParameterNeeded) { val irValueParameter = createSyntheticIrParameter( diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt index 1ccabb3a3e6..3cece785565 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.parentClassOrNull import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource class Fir2IrLazyConstructor( components: Fir2IrComponents, @@ -109,6 +110,9 @@ class Fir2IrLazyConstructor( get() = null set(_) = error("We should never need to store metadata of external declarations.") + override val containerSource: DeserializedContainerSource? + get() = fir.containerSource + override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitConstructor(this, data) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt index f737e2c83b9..0a6180bb70e 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.types.IrErrorType import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.isInterface import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource class Fir2IrLazyProperty( components: Fir2IrComponents, @@ -149,4 +150,7 @@ class Fir2IrLazyProperty( override var metadata: MetadataSource? get() = null set(_) = error("We should never need to store metadata of external declarations.") + + override val containerSource: DeserializedContainerSource? + get() = fir.containerSource } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt index 461d24b3bfa..323767098a8 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource class Fir2IrLazySimpleFunction( components: Fir2IrComponents, @@ -137,4 +138,7 @@ class Fir2IrLazySimpleFunction( override var metadata: MetadataSource? get() = null set(_) = error("We should never need to store metadata of external declarations.") + + override val containerSource: DeserializedContainerSource? + get() = fir.containerSource } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt index 7285dc7961c..0e51957db24 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt @@ -45,7 +45,7 @@ abstract class Fir2IrBindableSymbol WrappedClassConstructorDescriptor().apply { bind(owner) } is IrSimpleFunction -> when { containerSource != null -> - WrappedFunctionDescriptorWithContainerSource(containerSource) + WrappedFunctionDescriptorWithContainerSource() owner.name.isSpecial && owner.name.asString().startsWith(GETTER_PREFIX) -> WrappedPropertyGetterDescriptor(Annotations.EMPTY, SourceElement.NO_SOURCE) owner.name.isSpecial && owner.name.asString().startsWith(SETTER_PREFIX) -> @@ -57,7 +57,7 @@ abstract class Fir2IrBindableSymbol WrappedValueParameterDescriptor().apply { bind(owner) } is IrTypeParameter -> WrappedTypeParameterDescriptor().apply { bind(owner) } is IrProperty -> if (containerSource != null) { - WrappedPropertyDescriptorWithContainerSource(containerSource) + WrappedPropertyDescriptorWithContainerSource() } else { WrappedPropertyDescriptor() }.apply { bind(owner) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 038a54ba276..38adcd344d8 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -508,7 +508,7 @@ fun IrFactory.createStaticFunctionWithReceivers( typeParametersFromContext: List = listOf() ): IrSimpleFunction { val descriptor = (oldFunction.descriptor as? DescriptorWithContainerSource)?.let { - WrappedFunctionDescriptorWithContainerSource(it.containerSource) + WrappedFunctionDescriptorWithContainerSource() } ?: WrappedSimpleFunctionDescriptor(Annotations.EMPTY, oldFunction.descriptor.source) return createFunction( oldFunction.startOffset, oldFunction.endOffset, @@ -525,7 +525,8 @@ fun IrFactory.createStaticFunctionWithReceivers( isExpect = oldFunction.isExpect, isFakeOverride = isFakeOverride, isOperator = oldFunction is IrSimpleFunction && oldFunction.isOperator, - isInfix = oldFunction is IrSimpleFunction && oldFunction.isInfix + isInfix = oldFunction is IrSimpleFunction && oldFunction.isInfix, + containerSource = oldFunction.containerSource, ).apply { descriptor.bind(this) parent = irParent diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt index c5880598a79..86b38091a0e 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt @@ -537,7 +537,7 @@ private fun IrFunction.generateDefaultsFunctionImpl( visibility = newVisibility } is IrSimpleFunction -> - factory.buildFun(descriptor) { + factory.buildFun { updateFrom(this@generateDefaultsFunctionImpl) name = Name.identifier("${this@generateDefaultsFunctionImpl.name}\$default") origin = newOrigin diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index e79195dbccd..4604ae0aac4 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -595,7 +595,7 @@ class LocalDeclarationsLowering( // TODO: consider using fields to access the closure of enclosing class. val (capturedValues, capturedTypeParameters) = localFunctionContext.closure - val newDeclaration = context.irFactory.buildFun(oldDeclaration.descriptor) { + val newDeclaration = context.irFactory.buildFun { updateFrom(oldDeclaration) name = newName visibility = Visibilities.PRIVATE @@ -694,7 +694,7 @@ class LocalDeclarationsLowering( val localClassContext = localClasses[oldDeclaration.parent]!! val capturedValues = localClassContext.closure.capturedValues - val newDeclaration = context.irFactory.buildConstructor(oldDeclaration.descriptor) { + val newDeclaration = context.irFactory.buildConstructor { updateFrom(oldDeclaration) visibility = visibilityPolicy.forConstructor(oldDeclaration, constructorContext.inInlineFunctionScope) returnType = oldDeclaration.returnType diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt index 3880194f28c..b9a0d40678f 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt @@ -10,6 +10,8 @@ import org.jetbrains.kotlin.backend.common.ir.copyTo import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl +import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunction +import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyProperty import org.jetbrains.kotlin.ir.descriptors.* import org.jetbrains.kotlin.ir.symbols.impl.* import org.jetbrains.kotlin.ir.types.IrType @@ -74,32 +76,30 @@ fun IrClass.addField(fieldName: String, fieldType: IrType, fieldVisibility: Visi addField(Name.identifier(fieldName), fieldType, fieldVisibility) @PublishedApi -internal fun IrFactory.buildProperty( - builder: IrPropertyBuilder, - originalDescriptor: PropertyDescriptor? = null -): IrProperty = with(builder) { - val wrappedDescriptor = when (originalDescriptor) { - is DescriptorWithContainerSource -> WrappedPropertyDescriptorWithContainerSource(originalDescriptor.containerSource) - else -> WrappedPropertyDescriptor() - } +internal fun IrFactory.buildProperty(builder: IrPropertyBuilder): IrProperty = with(builder) { + val wrappedDescriptor = if (originalDeclaration is IrLazyProperty || containerSource != null) + WrappedPropertyDescriptorWithContainerSource() + else WrappedPropertyDescriptor() + createProperty( startOffset, endOffset, origin, IrPropertySymbolImpl(wrappedDescriptor), name, visibility, modality, - isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride + isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride, + containerSource, ).also { wrappedDescriptor.bind(it) } } -inline fun IrFactory.buildProperty(originalDescriptor: PropertyDescriptor? = null, builder: IrPropertyBuilder.() -> Unit) = +inline fun IrFactory.buildProperty(builder: IrPropertyBuilder.() -> Unit) = IrPropertyBuilder().run { builder() - buildProperty(this, originalDescriptor) + buildProperty(this) } -inline fun IrClass.addProperty(originalDescriptor: PropertyDescriptor? = null, builder: IrPropertyBuilder.() -> Unit): IrProperty = - factory.buildProperty(originalDescriptor, builder).also { property -> +inline fun IrClass.addProperty(builder: IrPropertyBuilder.() -> Unit): IrProperty = + factory.buildProperty(builder).also { property -> declarations.add(property) property.parent = this@addProperty } @@ -116,57 +116,44 @@ inline fun IrProperty.addGetter(builder: IrFunctionBuilder.() -> Unit = {}): IrS } @PublishedApi -internal fun IrFactory.buildFunction( - builder: IrFunctionBuilder, - originalDescriptor: FunctionDescriptor? = null -): IrSimpleFunction = with(builder) { - // Inlining relies on descriptors for external declarations. When replacing a potentially external function (e.g. in an IrCall), - // we have to ensure that we keep information from the original descriptor so as not to break inlining. - val wrappedDescriptor = when (originalDescriptor) { - is DescriptorWithContainerSource -> WrappedFunctionDescriptorWithContainerSource(originalDescriptor.containerSource) - is PropertyGetterDescriptor -> WrappedPropertyGetterDescriptor(originalDescriptor.annotations, originalDescriptor.source) - is PropertySetterDescriptor -> WrappedPropertySetterDescriptor(originalDescriptor.annotations, originalDescriptor.source) - null -> WrappedSimpleFunctionDescriptor() - else -> WrappedSimpleFunctionDescriptor(originalDescriptor) - } +internal fun IrFactory.buildFunction(builder: IrFunctionBuilder): IrSimpleFunction = with(builder) { + val wrappedDescriptor = if (originalDeclaration is IrLazyFunction || containerSource != null) + WrappedFunctionDescriptorWithContainerSource() + else WrappedSimpleFunctionDescriptor() createFunction( startOffset, endOffset, origin, IrSimpleFunctionSymbolImpl(wrappedDescriptor), name, visibility, modality, returnType, - isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride + isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride, + containerSource, ).also { wrappedDescriptor.bind(it) } } @PublishedApi -internal fun IrFactory.buildConstructor( - builder: IrFunctionBuilder, originalDescriptor: ConstructorDescriptor? -): IrConstructor = with(builder) { - val wrappedDescriptor = - if (originalDescriptor != null) WrappedClassConstructorDescriptor(originalDescriptor.annotations, originalDescriptor.source) - else WrappedClassConstructorDescriptor() +internal fun IrFactory.buildConstructor(builder: IrFunctionBuilder): IrConstructor = with(builder) { + val wrappedDescriptor = WrappedClassConstructorDescriptor() return createConstructor( startOffset, endOffset, origin, IrConstructorSymbolImpl(wrappedDescriptor), Name.special(""), visibility, returnType, - isInline = isInline, isExternal = isExternal, isPrimary = isPrimary, isExpect = isExpect + isInline = isInline, isExternal = isExternal, isPrimary = isPrimary, isExpect = isExpect, + containerSource = containerSource ).also { wrappedDescriptor.bind(it) } } -inline fun IrFactory.buildFun( - originalDescriptor: FunctionDescriptor? = null, builder: IrFunctionBuilder.() -> Unit -): IrSimpleFunction = +inline fun IrFactory.buildFun(builder: IrFunctionBuilder.() -> Unit): IrSimpleFunction = IrFunctionBuilder().run { builder() - buildFunction(this, originalDescriptor) + buildFunction(this) } inline fun IrFactory.addFunction(klass: IrDeclarationContainer, builder: IrFunctionBuilder.() -> Unit): IrSimpleFunction = - buildFun(null, builder).also { function -> + buildFun(builder).also { function -> klass.declarations.add(function) function.parent = klass } @@ -198,13 +185,10 @@ fun IrClass.addFunction( } } -inline fun IrFactory.buildConstructor( - originalDescriptor: ConstructorDescriptor? = null, - builder: IrFunctionBuilder.() -> Unit -): IrConstructor = +inline fun IrFactory.buildConstructor(builder: IrFunctionBuilder.() -> Unit): IrConstructor = IrFunctionBuilder().run { builder() - buildConstructor(this, originalDescriptor) + buildConstructor(this) } inline fun IrClass.addConstructor(builder: IrFunctionBuilder.() -> Unit = {}): IrConstructor = diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt index eecba68a804..9509b3e6b33 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt @@ -309,7 +309,7 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod val superProperty = superFunctionInterface.declarations.filterIsInstance().single() val supperGetter = superProperty.getter ?: error("Expected getter for KFunction.name property") - val nameProperty = clazz.addProperty { + val nameProperty = clazz.addProperty() { visibility = superProperty.visibility name = superProperty.name origin = GENERATED_MEMBER_IN_CALLABLE_REFERENCE diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsInnerClassesSupport.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsInnerClassesSupport.kt index fbc3b54cb0a..3150fd62807 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsInnerClassesSupport.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsInnerClassesSupport.kt @@ -75,7 +75,7 @@ class JsInnerClassesSupport(mapping: JsMapping, private val irFactory: IrFactory val irClass = oldConstructor.parent as IrClass val outerThisType = (irClass.parent as IrClass).defaultType - val newConstructor = irFactory.buildConstructor(oldConstructor.descriptor) { + val newConstructor = irFactory.buildConstructor { updateFrom(oldConstructor) returnType = oldConstructor.returnType }.also { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt index 5e57c9133e9..d80ddd33101 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt @@ -203,7 +203,7 @@ class JvmCachedDeclarations( defaultImplsRedirections.getOrPut(fakeOverride) { assert(fakeOverride.isFakeOverride) val irClass = fakeOverride.parentAsClass - context.irFactory.buildFun(fakeOverride.descriptor) { + context.irFactory.buildFun { origin = JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE name = fakeOverride.name visibility = fakeOverride.visibility diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt index 707f869dac1..ebc7800f9a9 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt @@ -444,7 +444,7 @@ class JvmSymbols( } val receiverFieldName = Name.identifier("receiver") - klass.addProperty { + klass.addProperty() { name = receiverFieldName }.apply { backingField = irFactory.buildField { @@ -570,7 +570,7 @@ class JvmSymbols( collectionToArrayClass.functions.single { it.owner.name.asString() == "toArray" && it.owner.valueParameters.size == 2 } val kClassJava: IrPropertySymbol = - irFactory.buildProperty { + irFactory.buildProperty() { name = Name.identifier("java") }.apply { parent = kotlinJvmPackage diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt index 451fda79750..de81ef14ebb 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt @@ -320,7 +320,7 @@ fun IrSimpleFunction.copyCorrespondingPropertyFrom(source: IrSimpleFunction) { val property = source.correspondingPropertySymbol?.owner ?: return val target = this - correspondingPropertySymbol = factory.buildProperty(property.symbol.descriptor) { + correspondingPropertySymbol = factory.buildProperty() { name = property.name updateFrom(property) }.apply { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt index b98539ba43f..b9388740b20 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt @@ -597,7 +597,8 @@ private class AddContinuationLowering(private val context: JvmBackendContext) : if (function.body == null || !function.hasContinuation()) return result if (flag.capturesCrossinline || function.isInline) { - result += context.irFactory.buildFun(view.descriptor) { + result += context.irFactory.buildFun { + containerSource = view.containerSource name = Name.identifier(view.name.asString() + FOR_INLINE_SUFFIX) returnType = view.returnType modality = view.modality @@ -665,7 +666,7 @@ internal fun IrFunction.suspendFunctionOriginal(): IrFunction = private fun IrFunction.createSuspendFunctionStub(context: JvmBackendContext): IrFunction { require(this.isSuspend && this is IrSimpleFunction) - return factory.buildFun(descriptor) { + return factory.buildFun { updateFrom(this@createSuspendFunctionStub) name = this@createSuspendFunctionStub.name origin = this@createSuspendFunctionStub.origin diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInnerClassesSupport.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInnerClassesSupport.kt index 3a7acb82df9..005e4e8cb92 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInnerClassesSupport.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInnerClassesSupport.kt @@ -63,7 +63,7 @@ class JvmInnerClassesSupport(private val irFactory: IrFactory) : InnerClassesSup } private fun createInnerClassConstructorWithOuterThisParameter(oldConstructor: IrConstructor): IrConstructor = - irFactory.buildConstructor(oldConstructor.descriptor) { + irFactory.buildConstructor { updateFrom(oldConstructor) returnType = oldConstructor.returnType }.apply { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOverloadsAnnotationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOverloadsAnnotationLowering.kt index 3ee8671e901..3b8121eaea3 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOverloadsAnnotationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOverloadsAnnotationLowering.kt @@ -117,7 +117,7 @@ private class JvmOverloadsAnnotationLowering(val context: JvmBackendContext) : C private fun IrFactory.generateWrapperHeader(oldFunction: IrFunction, numDefaultParametersToExpect: Int): IrFunction { val res = when (oldFunction) { is IrConstructor -> { - buildConstructor(oldFunction.descriptor) { + buildConstructor { origin = JvmLoweredDeclarationOrigin.JVM_OVERLOADS_WRAPPER name = oldFunction.name visibility = oldFunction.visibility @@ -125,7 +125,7 @@ private class JvmOverloadsAnnotationLowering(val context: JvmBackendContext) : C isInline = oldFunction.isInline } } - is IrSimpleFunction -> buildFun(oldFunction.descriptor) { + is IrSimpleFunction -> buildFun { origin = JvmLoweredDeclarationOrigin.JVM_OVERLOADS_WRAPPER name = oldFunction.name visibility = oldFunction.visibility diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt index 047ad3c16fe..ffba06f40d9 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt @@ -192,7 +192,7 @@ private class MakeCallsStatic( } private fun IrSimpleFunction.copyRemovingDispatchReceiver(): IrSimpleFunction = - factory.buildFun(descriptor) { + factory.buildFun { updateFrom(this@copyRemovingDispatchReceiver) name = this@copyRemovingDispatchReceiver.name returnType = this@copyRemovingDispatchReceiver.returnType diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt index b76d44286f0..d2eb759ae2d 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt @@ -107,7 +107,7 @@ private class MoveOrCopyCompanionObjectFieldsLowering(val context: JvmBackendCon } private fun copyConstProperty(oldProperty: IrProperty, newParent: IrClass): IrProperty = - newParent.addProperty { + newParent.addProperty() { updateFrom(oldProperty) name = oldProperty.name isConst = true diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt index 9c079aa6ed5..be12ed9ff75 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt @@ -184,7 +184,7 @@ class MemoizedInlineClassReplacements(private val mangleReturnTypes: Boolean, pr replacementOrigin: IrDeclarationOrigin, noFakeOverride: Boolean = false, body: IrFunction.() -> Unit - ): IrSimpleFunction = irFactory.buildFun(function.descriptor) { + ): IrSimpleFunction = irFactory.buildFun { updateFrom(function) if (function is IrConstructor) { // The [updateFrom] call will set the modality to FINAL for constructors, while the JVM backend would use OPEN here. @@ -216,7 +216,7 @@ class MemoizedInlineClassReplacements(private val mangleReturnTypes: Boolean, pr val propertySymbol = function.correspondingPropertySymbol if (propertySymbol != null) { val property = propertyMap.getOrPut(propertySymbol) { - irFactory.buildProperty(propertySymbol.descriptor) { + irFactory.buildProperty() { name = propertySymbol.owner.name updateFrom(propertySymbol.owner) }.apply { diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt index aa3f8c7a30f..0f7a72c8f86 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource class IrConstructorImpl( override val startOffset: Int, @@ -38,6 +39,7 @@ class IrConstructorImpl( override val isExternal: Boolean, override val isPrimary: Boolean, override val isExpect: Boolean, + override val containerSource: DeserializedContainerSource? = null, ) : IrConstructor() { init { symbol.bind(this) diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt index 4a5a5dffb40..3648c038655 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl 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 object IrFactoryImpl : IrFactory { @@ -63,8 +64,12 @@ object IrFactoryImpl : IrFactory { isExternal: Boolean, isPrimary: Boolean, isExpect: Boolean, + containerSource: DeserializedContainerSource?, ): IrConstructor = - IrConstructorImpl(startOffset, endOffset, origin, symbol, name, visibility, returnType, isInline, isExternal, isPrimary, isExpect) + IrConstructorImpl( + startOffset, endOffset, origin, symbol, name, visibility, returnType, isInline, isExternal, isPrimary, isExpect, + containerSource, + ) override fun createEnumEntry( startOffset: Int, @@ -113,10 +118,12 @@ object IrFactoryImpl : IrFactory { isInfix: Boolean, isExpect: Boolean, isFakeOverride: Boolean, + containerSource: DeserializedContainerSource?, ): IrSimpleFunction = IrFunctionImpl( startOffset, endOffset, origin, symbol, name, visibility, modality, returnType, isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride, + containerSource ) override fun createFakeOverrideFunction( @@ -166,10 +173,12 @@ object IrFactoryImpl : IrFactory { isExternal: Boolean, isExpect: Boolean, isFakeOverride: Boolean, + containerSource: DeserializedContainerSource?, ): IrProperty = IrPropertyImpl( startOffset, endOffset, origin, symbol, name, visibility, modality, isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride, + containerSource, ) override fun createFakeOverrideProperty( diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt index f06148db751..f3fd898ec5f 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource abstract class IrFunctionCommonImpl( override val startOffset: Int, @@ -32,6 +33,7 @@ abstract class IrFunctionCommonImpl( override val isOperator: Boolean, override val isInfix: Boolean, override val isExpect: Boolean, + override val containerSource: DeserializedContainerSource?, ) : IrSimpleFunction() { override val factory: IrFactory get() = IrFactoryImpl @@ -82,9 +84,11 @@ class IrFunctionImpl( isInfix: Boolean, isExpect: Boolean, override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE, + containerSource: DeserializedContainerSource? = null, ) : IrFunctionCommonImpl( startOffset, endOffset, origin, name, visibility, returnType, isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, + containerSource, ) { @ObsoleteDescriptorBasedAPI override val descriptor: FunctionDescriptor @@ -113,6 +117,7 @@ class IrFakeOverrideFunctionImpl( ) : IrFunctionCommonImpl( startOffset, endOffset, origin, name, visibility, returnType, isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, + containerSource = null, ), IrFakeOverrideFunction { override val isFakeOverride: Boolean get() = true diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt index 2ad8044a6ed..2dc6ffdbdf7 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource abstract class IrPropertyCommonImpl( override val startOffset: Int, @@ -38,6 +39,7 @@ abstract class IrPropertyCommonImpl( override val isDelegated: Boolean, override val isExternal: Boolean, override val isExpect: Boolean, + override val containerSource: DeserializedContainerSource?, ) : IrProperty() { override val factory: IrFactory get() = IrFactoryImpl @@ -69,8 +71,10 @@ class IrPropertyImpl( isExternal: Boolean, isExpect: Boolean = false, override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE, + containerSource: DeserializedContainerSource? = null, ) : IrPropertyCommonImpl( startOffset, endOffset, origin, name, visibility, isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, + containerSource ) { init { symbol.bind(this) @@ -96,6 +100,7 @@ class IrFakeOverridePropertyImpl( isExpect: Boolean, ) : IrPropertyCommonImpl( startOffset, endOffset, origin, name, visibility, isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, + containerSource = null, ), IrFakeOverrideProperty { override val isFakeOverride: Boolean get() = true diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt index b17c289ced8..4c50c67e73d 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource internal class PersistentIrConstructor( override val startOffset: Int, @@ -39,7 +40,8 @@ internal class PersistentIrConstructor( override val isInline: Boolean, override val isExternal: Boolean, override val isPrimary: Boolean, - override val isExpect: Boolean + override val isExpect: Boolean, + override val containerSource: DeserializedContainerSource? ) : IrConstructor(), PersistentIrDeclarationBase, ConstructorCarrier { diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt index 87b94c58861..574ee4cff37 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.expressions.persistent.PersistentIrExpressionBody 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 object PersistentIrFactory : IrFactory { @@ -63,9 +64,11 @@ object PersistentIrFactory : IrFactory { isExternal: Boolean, isPrimary: Boolean, isExpect: Boolean, + containerSource: DeserializedContainerSource?, ): IrConstructor = PersistentIrConstructor( - startOffset, endOffset, origin, symbol, name, visibility, returnType, isInline, isExternal, isPrimary, isExpect + startOffset, endOffset, origin, symbol, name, visibility, returnType, isInline, isExternal, isPrimary, isExpect, + containerSource, ) override fun createEnumEntry( @@ -115,10 +118,12 @@ object PersistentIrFactory : IrFactory { isInfix: Boolean, isExpect: Boolean, isFakeOverride: Boolean, + containerSource: DeserializedContainerSource?, ): IrSimpleFunction = PersistentIrFunction( startOffset, endOffset, origin, symbol, name, visibility, modality, returnType, isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride, + containerSource ) override fun createFakeOverrideFunction( @@ -170,10 +175,12 @@ object PersistentIrFactory : IrFactory { isExternal: Boolean, isExpect: Boolean, isFakeOverride: Boolean, + containerSource: DeserializedContainerSource?, ): IrProperty = PersistentIrProperty( startOffset, endOffset, origin, symbol, name, visibility, modality, isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride, + containerSource ) override fun createFakeOverrideProperty( diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt index 5ecba9a58e6..b2570b021d7 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource internal abstract class PersistentIrFunctionCommon( override val startOffset: Int, @@ -34,6 +35,7 @@ internal abstract class PersistentIrFunctionCommon( override val isOperator: Boolean, override val isInfix: Boolean, override val isExpect: Boolean, + override val containerSource: DeserializedContainerSource? = null ) : IrSimpleFunction(), PersistentIrDeclarationBase, FunctionCarrier { @@ -189,9 +191,11 @@ internal class PersistentIrFunction( isInfix: Boolean, isExpect: Boolean, override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE, + containerSource: DeserializedContainerSource? ) : PersistentIrFunctionCommon( startOffset, endOffset, origin, name, visibility, returnType, isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, + containerSource ) { @ObsoleteDescriptorBasedAPI override val descriptor: FunctionDescriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt index 8ba511968b1..9ca35fafdab 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource internal abstract class PersistentIrPropertyCommon( override val startOffset: Int, @@ -40,6 +41,7 @@ internal abstract class PersistentIrPropertyCommon( override val isDelegated: Boolean, override val isExternal: Boolean, override val isExpect: Boolean, + override val containerSource: DeserializedContainerSource?, ) : IrProperty(), PersistentIrDeclarationBase, PropertyCarrier { @@ -110,8 +112,10 @@ internal class PersistentIrProperty( isExternal: Boolean, isExpect: Boolean = false, override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE, + containerSource: DeserializedContainerSource?, ) : PersistentIrPropertyCommon( startOffset, endOffset, origin, name, visibility, isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, + containerSource, ) { init { symbol.bind(this) @@ -137,7 +141,8 @@ internal class PersistentIrFakeOverrideProperty( isExpect: Boolean, ) : PersistentIrPropertyCommon( startOffset, endOffset, origin, name, visibility, isVar, isConst, isLateinit, - isDelegated, isExternal, isExpect + isDelegated, isExternal, isExpect, + containerSource = null, ), IrFakeOverrideProperty { override val isFakeOverride: Boolean get() = true diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFunctionBuilder.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFunctionBuilder.kt index fd4557f7eac..da9f86085b1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFunctionBuilder.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFunctionBuilder.kt @@ -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 diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrPropertyBuilder.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrPropertyBuilder.kt index 7abaabe0f00..9678ae65d90 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrPropertyBuilder.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrPropertyBuilder.kt @@ -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 } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt index 726b3420e30..67a4dba24f7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt @@ -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( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt index 21ee57791ac..83790155c5a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt @@ -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 acceptChildren(visitor: IrElementVisitor, data: D) { typeParameters.forEach { it.accept(visitor, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt index 8a472aa06be..f2962f8311b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt @@ -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 accept(visitor: IrElementVisitor, data: D): R = visitor.visitProperty(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyConstructor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyConstructor.kt index 54455a95e9f..154c37d53e3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyConstructor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyConstructor.kt @@ -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) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt index 7707312d5d6..764794ddb48 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt @@ -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) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt index fbe6ac071c3..ad21ec031d6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt @@ -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.") diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt index 02c8aa4e042..eef51375105 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt @@ -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 getUserData(key: CallableDescriptor.UserDataKey?): 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) : diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index f3fe88aaf76..c3dee986f00 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -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 { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index d2dd2d9685a..ebe6be25bf5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -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 { diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt index 21199c12227..c26a1325f9b 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt @@ -130,7 +130,7 @@ class AndroidSymbols( } }.symbol - val kotlinKClassJava: IrPropertySymbol = irFactory.buildProperty { + val kotlinKClassJava: IrPropertySymbol = irFactory.buildProperty() { name = Name.identifier("java") }.apply { parent = kotlinJvm