IR: make IrMetadataSourceOwner.metadata mutable

To avoid casting to specific Ir*Impl elements at call sites.

Also inherit from IrMetadataSourceOwner only where it's needed: class,
file, function, property. Previously this field was always null and took
some space for things like value parameters, type parameters, etc.
This commit is contained in:
Alexander Udalov
2020-07-07 16:49:57 +02:00
parent 689887c94d
commit dbad81473e
32 changed files with 86 additions and 86 deletions
@@ -37,7 +37,6 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -94,7 +93,7 @@ class Fir2IrVisitor(
it.accept(this@Fir2IrVisitor, data) as? IrConstructorCall
}
(this as IrFileImpl).metadata = FirMetadataSource.File(file, components.session)
metadata = FirMetadataSource.File(file, components.session)
}
}
@@ -39,10 +39,6 @@ abstract class AbstractFir2IrLazyDeclaration<F : FirMemberDeclaration, D : IrSym
lateinit var typeParameters: List<IrTypeParameter>
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
override lateinit var parent: IrDeclarationParent
@ObsoleteDescriptorBasedAPI
@@ -54,4 +50,4 @@ abstract class AbstractFir2IrLazyDeclaration<F : FirMemberDeclaration, D : IrSym
callGenerator.convertToIrConstructorCall(it) as? IrConstructorCall
}
}
}
}
@@ -170,6 +170,10 @@ class Fir2IrLazyClass(
result
}
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
private fun FirNamedFunctionSymbol.isAbstractMethodOfAny(): Boolean {
val fir = fir
if (fir.modality != Modality.ABSTRACT) return false
@@ -194,4 +198,4 @@ class Fir2IrLazyClass(
typeParameters = typeParameters.transformIfNeeded(transformer, data)
declarations.transform { it.transform(transformer, data) }
}
}
}
@@ -13,10 +13,7 @@ import org.jetbrains.kotlin.fir.backend.toIrType
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.symbols.Fir2IrConstructorSymbol
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.types.IrType
@@ -110,6 +107,10 @@ class Fir2IrLazyConstructor(
}
}
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitConstructor(this, data)
}
@@ -133,4 +134,4 @@ class Fir2IrLazyConstructor(
body = body?.transform(transformer, data)
}
}
}
@@ -150,6 +150,10 @@ class Fir2IrLazyProperty(
)
}
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitProperty(this, data)
}
@@ -165,4 +169,4 @@ class Fir2IrLazyProperty(
getter = getter?.run { transform(transformer, data) as IrSimpleFunction }
setter = setter?.run { transform(transformer, data) as IrSimpleFunction }
}
}
}
@@ -132,6 +132,10 @@ class Fir2IrLazySimpleFunction(
?.filterIsInstance<IrSimpleFunctionSymbol>().orEmpty()
}
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitSimpleFunction(this, data)
}
@@ -155,4 +159,4 @@ class Fir2IrLazySimpleFunction(
body = body?.transform(transformer, data)
}
}
}
@@ -47,7 +47,7 @@ class DescriptorBasedClassCodegen internal constructor(
state.bindingTrace.record(
CodegenBinding.DELEGATED_PROPERTIES_WITH_METADATA,
type,
localDelegatedProperties.mapNotNull { it.owner.metadata?.descriptor }
localDelegatedProperties.mapNotNull { (it.owner.metadata as? MetadataSource.LocalDelegatedProperty)?.descriptor }
)
}
@@ -141,4 +141,4 @@ class DescriptorBasedClassCodegen internal constructor(
state.globalSerializationBindings.put(JvmSerializationBindings.FIELD_FOR_PROPERTY, descriptor, fieldType to fieldName)
}
}
}
}
@@ -67,7 +67,7 @@ private class FileClassLowering(val context: JvmBackendContext) : FileLoweringPa
fileClassMembers.add(it)
}
if (fileClassMembers.isEmpty() && irFile.metadata?.descriptors.isNullOrEmpty()) return
if (fileClassMembers.isEmpty() && (irFile.metadata as? MetadataSource.File)?.descriptors.isNullOrEmpty()) return
val irFileClass = createFileClass(irFile, fileClassMembers)
classes.add(irFileClass)
@@ -82,7 +82,7 @@ private class FileClassLowering(val context: JvmBackendContext) : FileLoweringPa
val descriptor: ClassDescriptor
when (fileEntry) {
is PsiSourceManager.PsiFileEntry -> {
val ktFile = context.psiSourceManager.getKtFile(fileEntry as PsiSourceManager.PsiFileEntry)
val ktFile = context.psiSourceManager.getKtFile(fileEntry)
?: throw AssertionError("Unexpected file entry: $fileEntry")
fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(ktFile)
descriptor = WrappedClassDescriptor(sourceElement = KotlinSourceElement(ktFile))
@@ -17,9 +17,11 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.*
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
import org.jetbrains.kotlin.ir.builders.declarations.addFunction
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrClassReferenceImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl
@@ -187,7 +189,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
createImplicitParameterDeclarationWithWrappedDescriptor()
copyAttributes(irFunctionReference)
if (isLambda) {
(this as IrClassImpl).metadata = irFunctionReference.symbol.owner.metadata
metadata = irFunctionReference.symbol.owner.metadata
}
}
@@ -37,7 +37,6 @@ import org.jetbrains.kotlin.load.java.JavaVisibilities
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrElementTransformerVoidWithContext(), FileLoweringPass {
data class LambdaCallSite(val scope: IrDeclaration, val crossinline: Boolean)
@@ -229,8 +228,10 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
// signature of the accessor. We implement this special case in the JVM IR backend by
// attaching the metadata directly to the accessor. We also have to move all annotations
// to the accessor. Parameter annotations are already moved by the copyTo method.
accessor.metadata = declaration.metadata
declaration.safeAs<IrConstructorImpl>()?.metadata = null
if (declaration.metadata != null) {
accessor.metadata = declaration.metadata
declaration.metadata = null
}
accessor.annotations += declaration.annotations
declaration.annotations = emptyList()
declaration.valueParameters.forEach { it.annotations = emptyList() }
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.backend.jvm.lower
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.name.Name
internal val typeAliasAnnotationMethodsPhase = makeIrFilePhase(
::TypeAliasAnnotationMethodsLowering,
name = "TypeAliasAnnotationMethodsLowering",
@@ -51,8 +50,7 @@ class TypeAliasAnnotationMethodsLowering(val context: CommonBackendContext) :
}.apply {
body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET)
annotations += alias.annotations
metadata = alias.metadata
}
}
}
}
}
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.backend.common.CodegenUtil
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.expressions.mapValueParameters
@@ -89,7 +88,7 @@ class ClassGenerator(
startOffset, endOffset, IrDeclarationOrigin.DEFINED, it, classDescriptor,
context.symbolTable.nameProvider.nameForDeclaration(classDescriptor), visibility, modality
).apply {
(this as IrClassImpl).metadata = MetadataSource.Class(it.descriptor)
metadata = MetadataSource.Class(it.descriptor)
}
}.buildWithScope { irClass ->
declarationGenerator.generateGlobalTypeParametersDeclarations(irClass, classDescriptor.declaredTypeParameters)
@@ -79,7 +79,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
val irClass = createIrClassFromDescriptor(startOffset, endOffset, origin, symbol, descriptor)
symbolTable.withScope(irClass) {
(irClass as IrClassImpl).metadata = MetadataSource.Class(descriptor)
irClass.metadata = MetadataSource.Class(descriptor)
generateGlobalTypeParametersDeclarations(irClass, descriptor.declaredTypeParameters)
irClass.superTypes = descriptor.typeConstructor.supertypes.map {
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.types.IrType
interface IrClass :
IrSymbolDeclaration<IrClassSymbol>, IrDeclarationWithName, IrDeclarationWithVisibility,
IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer {
IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer, IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI
override val descriptor: ClassDescriptor
@@ -31,10 +31,10 @@ interface IrSymbolOwner : IrElement {
}
interface IrMetadataSourceOwner : IrElement {
val metadata: MetadataSource?
var metadata: MetadataSource?
}
interface IrDeclaration : IrStatement, IrMutableAnnotationContainer, IrMetadataSourceOwner {
interface IrDeclaration : IrStatement, IrMutableAnnotationContainer {
@ObsoleteDescriptorBasedAPI
val descriptor: DeclarationDescriptor
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.types.IrType
interface IrField :
IrSymbolDeclaration<IrFieldSymbol>,
IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent {
IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent, IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor
@@ -27,6 +27,4 @@ interface IrField :
var initializer: IrExpressionBody?
var correspondingPropertySymbol: IrPropertySymbol?
override val metadata: MetadataSource?
}
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.SourceManager
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol
@@ -45,8 +44,6 @@ interface IrFile : IrPackageFragment, IrMutableAnnotationContainer, IrMetadataSo
val fileEntry: SourceManager.FileEntry
override val metadata: MetadataSource.File?
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrFile =
accept(transformer, data) as IrFile
}
@@ -25,7 +25,8 @@ import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.types.IrType
interface IrFunction :
IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget {
IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget,
IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI
override val descriptor: FunctionDescriptor
@@ -42,8 +43,6 @@ interface IrFunction :
var valueParameters: List<IrValueParameter>
var body: IrBody?
override var metadata: MetadataSource?
}
@ObsoleteDescriptorBasedAPI
@@ -23,7 +23,8 @@ import org.jetbrains.kotlin.ir.types.IrType
interface IrLocalDelegatedProperty :
IrDeclarationWithName,
IrSymbolOwner {
IrSymbolOwner,
IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI
override val descriptor: VariableDescriptorWithAccessors
@@ -35,6 +36,4 @@ interface IrLocalDelegatedProperty :
var delegate: IrVariable
var getter: IrFunction
var setter: IrFunction?
override val metadata: MetadataSource.LocalDelegatedProperty?
}
@@ -20,11 +20,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
interface IrProperty :
IrDeclarationWithName,
IrDeclarationWithVisibility,
IrOverridableMember,
IrSymbolOwner {
interface IrProperty : IrDeclarationWithName, IrDeclarationWithVisibility, IrOverridableMember, IrSymbolOwner, IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor
@@ -41,4 +37,4 @@ interface IrProperty :
var backingField: IrField?
var getter: IrSimpleFunction?
var setter: IrSimpleFunction?
}
}
@@ -16,17 +16,16 @@ interface MetadataSource {
get() = descriptor.name
}
open class Class(descriptor: ClassDescriptor) : DescriptorBased<ClassDescriptor>(descriptor)
class Class(descriptor: ClassDescriptor) : DescriptorBased<ClassDescriptor>(descriptor)
open class File(val descriptors: List<DeclarationDescriptor>) : MetadataSource {
override val name: Name?
get() = null
}
open class Function(descriptor: FunctionDescriptor) : DescriptorBased<FunctionDescriptor>(descriptor)
class Function(descriptor: FunctionDescriptor) : DescriptorBased<FunctionDescriptor>(descriptor)
open class Property(descriptor: PropertyDescriptor) : DescriptorBased<PropertyDescriptor>(descriptor)
class Property(descriptor: PropertyDescriptor) : DescriptorBased<PropertyDescriptor>(descriptor)
open class LocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) :
DescriptorBased<VariableDescriptorWithAccessors>(descriptor)
class LocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) : DescriptorBased<VariableDescriptorWithAccessors>(descriptor)
}
@@ -65,9 +65,6 @@ abstract class IrDeclarationBase<T : DeclarationCarrier>(
}
}
override val metadata: MetadataSource?
get() = null
override fun ensureLowered() {
if (stageController.currentStage > loweredUpTo) {
stageController.lazyLower(this)
@@ -17,10 +17,12 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.SourceManager
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.MetadataSource
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
@@ -52,7 +54,7 @@ class IrFileImpl(
override var annotations: List<IrConstructorCall> = ArrayList()
override var metadata: MetadataSource.File? = null
override var metadata: MetadataSource? = null
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitFile(this, data)
@@ -78,9 +78,9 @@ class IrLocalDelegatedPropertyImpl(
}
}
override var metadataField: MetadataSource.LocalDelegatedProperty? = null
override var metadataField: MetadataSource? = null
override var metadata: MetadataSource.LocalDelegatedProperty?
override var metadata: MetadataSource?
get() = getCarrier().metadataField
set(v) {
if (metadata !== v) {
@@ -6,8 +6,8 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
@@ -37,7 +37,6 @@ class IrScriptImpl(
}
override var annotations: List<IrConstructorCall> = SmartList()
override val metadata: MetadataSource? get() = null
override val declarations: MutableList<IrDeclaration> = mutableListOf()
override val statements: MutableList<IrStatement> = mutableListOf()
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.declarations.MetadataSource
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
@@ -51,7 +50,6 @@ class IrVariableImpl(
}
override var annotations: List<IrConstructorCall> = emptyList()
override val metadata: MetadataSource? get() = null
init {
symbol.bind(this)
@@ -12,7 +12,7 @@ interface LocalDelegatedPropertyCarrier : DeclarationCarrier {
var delegateField: IrVariable?
var getterField: IrFunction?
var setterField: IrFunction?
var metadataField: MetadataSource.LocalDelegatedProperty?
var metadataField: MetadataSource?
override fun clone(): LocalDelegatedPropertyCarrier {
return LocalDelegatedPropertyCarrierImpl(
@@ -36,5 +36,5 @@ class LocalDelegatedPropertyCarrierImpl(
override var delegateField: IrVariable?,
override var getterField: IrFunction?,
override var setterField: IrFunction?,
override var metadataField: MetadataSource.LocalDelegatedProperty?
) : LocalDelegatedPropertyCarrier
override var metadataField: MetadataSource?
) : LocalDelegatedPropertyCarrier
@@ -91,6 +91,10 @@ class IrLazyClass(
val nameResolver: NameResolver? get() = (descriptor as? DeserializedClassDescriptor)?.c?.nameResolver
override val source: SourceElement get() = descriptor.source
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitClass(this, data)
@@ -56,9 +56,6 @@ abstract class IrLazyDeclarationBase(
descriptor.annotations.mapNotNull(typeTranslator.constantValueGenerator::generateAnnotationConstructorCall).toMutableList()
}
override val metadata: MetadataSource?
get() = null
private fun createLazyParent(): IrDeclarationParent? {
val currentDescriptor = descriptor
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.MetadataSource
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
@@ -66,6 +67,10 @@ class IrLazyField(
stubGenerator.generatePropertyStub(descriptor).symbol
}
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitField(this, data)
}
@@ -9,10 +9,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.IrProperty
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
import org.jetbrains.kotlin.ir.util.TypeTranslator
@@ -60,17 +57,23 @@ class IrLazyProperty(
}
} else null
}
override var getter: IrSimpleFunction? by lazyVar {
descriptor.getter?.let { stubGenerator.generateFunctionStub(it, createPropertyIfNeeded = false) }?.apply {
correspondingPropertySymbol = this@IrLazyProperty.symbol
}
}
override var setter: IrSimpleFunction? by lazyVar {
descriptor.setter?.let { stubGenerator.generateFunctionStub(it, createPropertyIfNeeded = false) }?.apply {
correspondingPropertySymbol = this@IrLazyProperty.symbol
}
}
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitProperty(this, data)
@@ -16,13 +16,12 @@ import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.*
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
@@ -122,7 +121,7 @@ class ParcelableIrTransformer(private val context: IrPluginContext, private val
irExprBody(irInt(flags))
}
(this as IrFunctionImpl).metadata = MetadataSource.Function(
metadata = MetadataSource.Function(
declaration.descriptor.findFunction(ParcelableSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS)!!
)
}
@@ -177,7 +176,7 @@ class ParcelableIrTransformer(private val context: IrPluginContext, private val
}
}
(this as IrFunctionImpl).metadata = MetadataSource.Function(
metadata = MetadataSource.Function(
declaration.descriptor.findFunction(ParcelableSyntheticComponent.ComponentKind.WRITE_TO_PARCEL)!!
)
}