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.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.* 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.*
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -94,7 +93,7 @@ class Fir2IrVisitor(
it.accept(this@Fir2IrVisitor, data) as? IrConstructorCall 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> 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 override lateinit var parent: IrDeclarationParent
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
@@ -170,6 +170,10 @@ class Fir2IrLazyClass(
result result
} }
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
private fun FirNamedFunctionSymbol.isAbstractMethodOfAny(): Boolean { private fun FirNamedFunctionSymbol.isAbstractMethodOfAny(): Boolean {
val fir = fir val fir = fir
if (fir.modality != Modality.ABSTRACT) return false if (fir.modality != Modality.ABSTRACT) return false
@@ -13,10 +13,7 @@ import org.jetbrains.kotlin.fir.backend.toIrType
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.symbols.Fir2IrConstructorSymbol import org.jetbrains.kotlin.fir.symbols.Fir2IrConstructorSymbol
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.*
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.lazy.lazyVar import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.types.IrType 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 { override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitConstructor(this, data) return visitor.visitConstructor(this, 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 { override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitProperty(this, data) return visitor.visitProperty(this, data)
} }
@@ -132,6 +132,10 @@ class Fir2IrLazySimpleFunction(
?.filterIsInstance<IrSimpleFunctionSymbol>().orEmpty() ?.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 { override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitSimpleFunction(this, data) return visitor.visitSimpleFunction(this, data)
} }
@@ -47,7 +47,7 @@ class DescriptorBasedClassCodegen internal constructor(
state.bindingTrace.record( state.bindingTrace.record(
CodegenBinding.DELEGATED_PROPERTIES_WITH_METADATA, CodegenBinding.DELEGATED_PROPERTIES_WITH_METADATA,
type, type,
localDelegatedProperties.mapNotNull { it.owner.metadata?.descriptor } localDelegatedProperties.mapNotNull { (it.owner.metadata as? MetadataSource.LocalDelegatedProperty)?.descriptor }
) )
} }
@@ -67,7 +67,7 @@ private class FileClassLowering(val context: JvmBackendContext) : FileLoweringPa
fileClassMembers.add(it) 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) val irFileClass = createFileClass(irFile, fileClassMembers)
classes.add(irFileClass) classes.add(irFileClass)
@@ -82,7 +82,7 @@ private class FileClassLowering(val context: JvmBackendContext) : FileLoweringPa
val descriptor: ClassDescriptor val descriptor: ClassDescriptor
when (fileEntry) { when (fileEntry) {
is PsiSourceManager.PsiFileEntry -> { is PsiSourceManager.PsiFileEntry -> {
val ktFile = context.psiSourceManager.getKtFile(fileEntry as PsiSourceManager.PsiFileEntry) val ktFile = context.psiSourceManager.getKtFile(fileEntry)
?: throw AssertionError("Unexpected file entry: $fileEntry") ?: throw AssertionError("Unexpected file entry: $fileEntry")
fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(ktFile) fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(ktFile)
descriptor = WrappedClassDescriptor(sourceElement = KotlinSourceElement(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.descriptors.Visibilities
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.* 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.*
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrClassReferenceImpl import org.jetbrains.kotlin.ir.expressions.impl.IrClassReferenceImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl
@@ -187,7 +189,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
createImplicitParameterDeclarationWithWrappedDescriptor() createImplicitParameterDeclarationWithWrappedDescriptor()
copyAttributes(irFunctionReference) copyAttributes(irFunctionReference)
if (isLambda) { 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.load.java.JvmAbi
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrElementTransformerVoidWithContext(), FileLoweringPass { internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrElementTransformerVoidWithContext(), FileLoweringPass {
data class LambdaCallSite(val scope: IrDeclaration, val crossinline: Boolean) 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 // 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 // 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. // to the accessor. Parameter annotations are already moved by the copyTo method.
accessor.metadata = declaration.metadata if (declaration.metadata != null) {
declaration.safeAs<IrConstructorImpl>()?.metadata = null accessor.metadata = declaration.metadata
declaration.metadata = null
}
accessor.annotations += declaration.annotations accessor.annotations += declaration.annotations
declaration.annotations = emptyList() declaration.annotations = emptyList()
declaration.valueParameters.forEach { it.annotations = emptyList() } declaration.valueParameters.forEach { it.annotations = emptyList() }
@@ -1,7 +1,7 @@
/* /*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. * 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. * 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 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.load.java.JvmAbi
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal val typeAliasAnnotationMethodsPhase = makeIrFilePhase( internal val typeAliasAnnotationMethodsPhase = makeIrFilePhase(
::TypeAliasAnnotationMethodsLowering, ::TypeAliasAnnotationMethodsLowering,
name = "TypeAliasAnnotationMethodsLowering", name = "TypeAliasAnnotationMethodsLowering",
@@ -51,7 +50,6 @@ class TypeAliasAnnotationMethodsLowering(val context: CommonBackendContext) :
}.apply { }.apply {
body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET)
annotations += alias.annotations 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.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.declarations.* 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.descriptors.IrImplementingDelegateDescriptorImpl
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.expressions.mapValueParameters import org.jetbrains.kotlin.ir.expressions.mapValueParameters
@@ -89,7 +88,7 @@ class ClassGenerator(
startOffset, endOffset, IrDeclarationOrigin.DEFINED, it, classDescriptor, startOffset, endOffset, IrDeclarationOrigin.DEFINED, it, classDescriptor,
context.symbolTable.nameProvider.nameForDeclaration(classDescriptor), visibility, modality context.symbolTable.nameProvider.nameForDeclaration(classDescriptor), visibility, modality
).apply { ).apply {
(this as IrClassImpl).metadata = MetadataSource.Class(it.descriptor) metadata = MetadataSource.Class(it.descriptor)
} }
}.buildWithScope { irClass -> }.buildWithScope { irClass ->
declarationGenerator.generateGlobalTypeParametersDeclarations(irClass, classDescriptor.declaredTypeParameters) declarationGenerator.generateGlobalTypeParametersDeclarations(irClass, classDescriptor.declaredTypeParameters)
@@ -79,7 +79,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
val irClass = createIrClassFromDescriptor(startOffset, endOffset, origin, symbol, descriptor) val irClass = createIrClassFromDescriptor(startOffset, endOffset, origin, symbol, descriptor)
symbolTable.withScope(irClass) { symbolTable.withScope(irClass) {
(irClass as IrClassImpl).metadata = MetadataSource.Class(descriptor) irClass.metadata = MetadataSource.Class(descriptor)
generateGlobalTypeParametersDeclarations(irClass, descriptor.declaredTypeParameters) generateGlobalTypeParametersDeclarations(irClass, descriptor.declaredTypeParameters)
irClass.superTypes = descriptor.typeConstructor.supertypes.map { irClass.superTypes = descriptor.typeConstructor.supertypes.map {
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.types.IrType
interface IrClass : interface IrClass :
IrSymbolDeclaration<IrClassSymbol>, IrDeclarationWithName, IrDeclarationWithVisibility, IrSymbolDeclaration<IrClassSymbol>, IrDeclarationWithName, IrDeclarationWithVisibility,
IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer { IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer, IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
@@ -31,10 +31,10 @@ interface IrSymbolOwner : IrElement {
} }
interface IrMetadataSourceOwner : IrElement { interface IrMetadataSourceOwner : IrElement {
val metadata: MetadataSource? var metadata: MetadataSource?
} }
interface IrDeclaration : IrStatement, IrMutableAnnotationContainer, IrMetadataSourceOwner { interface IrDeclaration : IrStatement, IrMutableAnnotationContainer {
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
val descriptor: DeclarationDescriptor val descriptor: DeclarationDescriptor
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.types.IrType
interface IrField : interface IrField :
IrSymbolDeclaration<IrFieldSymbol>, IrSymbolDeclaration<IrFieldSymbol>,
IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent { IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent, IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor override val descriptor: PropertyDescriptor
@@ -27,6 +27,4 @@ interface IrField :
var initializer: IrExpressionBody? var initializer: IrExpressionBody?
var correspondingPropertySymbol: IrPropertySymbol? 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.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.SourceManager 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.IrExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol
@@ -45,8 +44,6 @@ interface IrFile : IrPackageFragment, IrMutableAnnotationContainer, IrMetadataSo
val fileEntry: SourceManager.FileEntry val fileEntry: SourceManager.FileEntry
override val metadata: MetadataSource.File?
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrFile = override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrFile =
accept(transformer, data) as IrFile accept(transformer, data) as IrFile
} }
@@ -25,7 +25,8 @@ import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
interface IrFunction : interface IrFunction :
IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget { IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget,
IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: FunctionDescriptor override val descriptor: FunctionDescriptor
@@ -42,8 +43,6 @@ interface IrFunction :
var valueParameters: List<IrValueParameter> var valueParameters: List<IrValueParameter>
var body: IrBody? var body: IrBody?
override var metadata: MetadataSource?
} }
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
@@ -23,7 +23,8 @@ import org.jetbrains.kotlin.ir.types.IrType
interface IrLocalDelegatedProperty : interface IrLocalDelegatedProperty :
IrDeclarationWithName, IrDeclarationWithName,
IrSymbolOwner { IrSymbolOwner,
IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: VariableDescriptorWithAccessors override val descriptor: VariableDescriptorWithAccessors
@@ -35,6 +36,4 @@ interface IrLocalDelegatedProperty :
var delegate: IrVariable var delegate: IrVariable
var getter: IrFunction var getter: IrFunction
var setter: 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.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
interface IrProperty : interface IrProperty : IrDeclarationWithName, IrDeclarationWithVisibility, IrOverridableMember, IrSymbolOwner, IrMetadataSourceOwner {
IrDeclarationWithName,
IrDeclarationWithVisibility,
IrOverridableMember,
IrSymbolOwner {
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor override val descriptor: PropertyDescriptor
@@ -16,17 +16,16 @@ interface MetadataSource {
get() = descriptor.name 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 { open class File(val descriptors: List<DeclarationDescriptor>) : MetadataSource {
override val name: Name? override val name: Name?
get() = null 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) : class LocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) : DescriptorBased<VariableDescriptorWithAccessors>(descriptor)
DescriptorBased<VariableDescriptorWithAccessors>(descriptor)
} }
@@ -65,9 +65,6 @@ abstract class IrDeclarationBase<T : DeclarationCarrier>(
} }
} }
override val metadata: MetadataSource?
get() = null
override fun ensureLowered() { override fun ensureLowered() {
if (stageController.currentStage > loweredUpTo) { if (stageController.currentStage > loweredUpTo) {
stageController.lazyLower(this) stageController.lazyLower(this)
@@ -17,10 +17,12 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.SourceManager 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.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
@@ -52,7 +54,7 @@ class IrFileImpl(
override var annotations: List<IrConstructorCall> = ArrayList() 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 = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitFile(this, data) 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 get() = getCarrier().metadataField
set(v) { set(v) {
if (metadata !== v) { if (metadata !== v) {
@@ -6,8 +6,8 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
@@ -37,7 +37,6 @@ class IrScriptImpl(
} }
override var annotations: List<IrConstructorCall> = SmartList() override var annotations: List<IrConstructorCall> = SmartList()
override val metadata: MetadataSource? get() = null
override val declarations: MutableList<IrDeclaration> = mutableListOf() override val declarations: MutableList<IrDeclaration> = mutableListOf()
override val statements: MutableList<IrStatement> = 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.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.IrVariable 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.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
@@ -51,7 +50,6 @@ class IrVariableImpl(
} }
override var annotations: List<IrConstructorCall> = emptyList() override var annotations: List<IrConstructorCall> = emptyList()
override val metadata: MetadataSource? get() = null
init { init {
symbol.bind(this) symbol.bind(this)
@@ -12,7 +12,7 @@ interface LocalDelegatedPropertyCarrier : DeclarationCarrier {
var delegateField: IrVariable? var delegateField: IrVariable?
var getterField: IrFunction? var getterField: IrFunction?
var setterField: IrFunction? var setterField: IrFunction?
var metadataField: MetadataSource.LocalDelegatedProperty? var metadataField: MetadataSource?
override fun clone(): LocalDelegatedPropertyCarrier { override fun clone(): LocalDelegatedPropertyCarrier {
return LocalDelegatedPropertyCarrierImpl( return LocalDelegatedPropertyCarrierImpl(
@@ -36,5 +36,5 @@ class LocalDelegatedPropertyCarrierImpl(
override var delegateField: IrVariable?, override var delegateField: IrVariable?,
override var getterField: IrFunction?, override var getterField: IrFunction?,
override var setterField: IrFunction?, override var setterField: IrFunction?,
override var metadataField: MetadataSource.LocalDelegatedProperty? override var metadataField: MetadataSource?
) : LocalDelegatedPropertyCarrier ) : LocalDelegatedPropertyCarrier
@@ -91,6 +91,10 @@ class IrLazyClass(
val nameResolver: NameResolver? get() = (descriptor as? DeserializedClassDescriptor)?.c?.nameResolver val nameResolver: NameResolver? get() = (descriptor as? DeserializedClassDescriptor)?.c?.nameResolver
override val source: SourceElement get() = descriptor.source 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 = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitClass(this, data) visitor.visitClass(this, data)
@@ -56,9 +56,6 @@ abstract class IrLazyDeclarationBase(
descriptor.annotations.mapNotNull(typeTranslator.constantValueGenerator::generateAnnotationConstructorCall).toMutableList() descriptor.annotations.mapNotNull(typeTranslator.constantValueGenerator::generateAnnotationConstructorCall).toMutableList()
} }
override val metadata: MetadataSource?
get() = null
private fun createLazyParent(): IrDeclarationParent? { private fun createLazyParent(): IrDeclarationParent? {
val currentDescriptor = descriptor 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.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrField 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.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
@@ -66,6 +67,10 @@ class IrLazyField(
stubGenerator.generatePropertyStub(descriptor).symbol 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 { override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitField(this, data) 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.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.*
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.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.ir.util.TypeTranslator
@@ -60,17 +57,23 @@ class IrLazyProperty(
} }
} else null } else null
} }
override var getter: IrSimpleFunction? by lazyVar { override var getter: IrSimpleFunction? by lazyVar {
descriptor.getter?.let { stubGenerator.generateFunctionStub(it, createPropertyIfNeeded = false) }?.apply { descriptor.getter?.let { stubGenerator.generateFunctionStub(it, createPropertyIfNeeded = false) }?.apply {
correspondingPropertySymbol = this@IrLazyProperty.symbol correspondingPropertySymbol = this@IrLazyProperty.symbol
} }
} }
override var setter: IrSimpleFunction? by lazyVar { override var setter: IrSimpleFunction? by lazyVar {
descriptor.setter?.let { stubGenerator.generateFunctionStub(it, createPropertyIfNeeded = false) }?.apply { descriptor.setter?.let { stubGenerator.generateFunctionStub(it, createPropertyIfNeeded = false) }?.apply {
correspondingPropertySymbol = this@IrLazyProperty.symbol 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 = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitProperty(this, data) 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.ClassKind
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.* import org.jetbrains.kotlin.ir.builders.declarations.*
import org.jetbrains.kotlin.ir.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.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
@@ -122,7 +121,7 @@ class ParcelableIrTransformer(private val context: IrPluginContext, private val
irExprBody(irInt(flags)) irExprBody(irInt(flags))
} }
(this as IrFunctionImpl).metadata = MetadataSource.Function( metadata = MetadataSource.Function(
declaration.descriptor.findFunction(ParcelableSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS)!! 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)!! declaration.descriptor.findFunction(ParcelableSyntheticComponent.ComponentKind.WRITE_TO_PARCEL)!!
) )
} }