IR: move containerSource from descriptor to IrFunction, IrProperty
This commit is contained in:
+13
-8
@@ -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)
|
||||
|
||||
+2
-2
@@ -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(
|
||||
|
||||
@@ -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 <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||
return visitor.visitConstructor(this, data)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ abstract class Fir2IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolO
|
||||
is IrConstructor -> 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<out D : DeclarationDescriptor, B : IrSymbolO
|
||||
is IrValueParameter -> WrappedValueParameterDescriptor().apply { bind(owner) }
|
||||
is IrTypeParameter -> WrappedTypeParameterDescriptor().apply { bind(owner) }
|
||||
is IrProperty -> if (containerSource != null) {
|
||||
WrappedPropertyDescriptorWithContainerSource(containerSource)
|
||||
WrappedPropertyDescriptorWithContainerSource()
|
||||
} else {
|
||||
WrappedPropertyDescriptor()
|
||||
}.apply { bind(owner) }
|
||||
|
||||
@@ -508,7 +508,7 @@ fun IrFactory.createStaticFunctionWithReceivers(
|
||||
typeParametersFromContext: List<IrTypeParameter> = 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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+28
-44
@@ -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("<init>"),
|
||||
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 =
|
||||
|
||||
+1
-1
@@ -309,7 +309,7 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod
|
||||
val superProperty = superFunctionInterface.declarations.filterIsInstance<IrProperty>().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
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
+3
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+2
-2
@@ -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 {
|
||||
|
||||
+2
@@ -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)
|
||||
|
||||
+10
-1
@@ -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(
|
||||
|
||||
+5
@@ -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
|
||||
|
||||
+5
@@ -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
|
||||
|
||||
+3
-1
@@ -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>,
|
||||
ConstructorCarrier {
|
||||
|
||||
+8
-1
@@ -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(
|
||||
|
||||
+4
@@ -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>,
|
||||
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
|
||||
|
||||
+6
-1
@@ -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>,
|
||||
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
|
||||
|
||||
+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 {
|
||||
|
||||
+1
-1
@@ -130,7 +130,7 @@ class AndroidSymbols(
|
||||
}
|
||||
}.symbol
|
||||
|
||||
val kotlinKClassJava: IrPropertySymbol = irFactory.buildProperty {
|
||||
val kotlinKClassJava: IrPropertySymbol = irFactory.buildProperty() {
|
||||
name = Name.identifier("java")
|
||||
}.apply {
|
||||
parent = kotlinJvm
|
||||
|
||||
Reference in New Issue
Block a user