From dbad81473edee6d719cdafffd58fe85acfe36919 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 7 Jul 2020 16:49:57 +0200 Subject: [PATCH] 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. --- .../org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt | 3 +-- .../kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt | 6 +----- .../org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt | 6 +++++- .../kotlin/fir/lazy/Fir2IrLazyConstructor.kt | 11 ++++++----- .../jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt | 6 +++++- .../kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt | 6 +++++- .../jvm/codegen/DescriptorBasedClassCodegen.kt | 4 ++-- .../kotlin/backend/jvm/lower/FileClassLowering.kt | 4 ++-- .../backend/jvm/lower/FunctionReferenceLowering.kt | 8 +++++--- .../backend/jvm/lower/SyntheticAccessorLowering.kt | 7 ++++--- .../jvm/lower/TypeAliasAnnotationMethodsLowering.kt | 10 ++++------ .../kotlin/psi2ir/generators/ClassGenerator.kt | 3 +-- .../generators/StandaloneDeclarationGenerator.kt | 2 +- .../org/jetbrains/kotlin/ir/declarations/IrClass.kt | 2 +- .../jetbrains/kotlin/ir/declarations/IrDeclaration.kt | 4 ++-- .../org/jetbrains/kotlin/ir/declarations/IrField.kt | 4 +--- .../org/jetbrains/kotlin/ir/declarations/IrFile.kt | 3 --- .../jetbrains/kotlin/ir/declarations/IrFunction.kt | 5 ++--- .../ir/declarations/IrLocalDelegatedProperty.kt | 5 ++--- .../jetbrains/kotlin/ir/declarations/IrProperty.kt | 8 ++------ .../kotlin/ir/declarations/MetadataSource.kt | 9 ++++----- .../kotlin/ir/declarations/impl/IrDeclarationBase.kt | 3 --- .../kotlin/ir/declarations/impl/IrFileImpl.kt | 8 +++++--- .../declarations/impl/IrLocalDelegatedPropertyImpl.kt | 4 ++-- .../kotlin/ir/declarations/impl/IrScriptImpl.kt | 3 +-- .../kotlin/ir/declarations/impl/IrVariableImpl.kt | 2 -- .../impl/carriers/LocalDelegatedPropertyCarrier.kt | 6 +++--- .../kotlin/ir/declarations/lazy/IrLazyClass.kt | 4 ++++ .../ir/declarations/lazy/IrLazyDeclarationBase.kt | 3 --- .../kotlin/ir/declarations/lazy/IrLazyField.kt | 5 +++++ .../kotlin/ir/declarations/lazy/IrLazyProperty.kt | 11 +++++++---- .../android/parcel/ir/ParcelableIrTransformer.kt | 7 +++---- 32 files changed, 86 insertions(+), 86 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index 1bcf33760eb..876a04fd7af 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -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) } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt index 28862af17b9..51593edf02f 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt @@ -39,10 +39,6 @@ abstract class AbstractFir2IrLazyDeclaration - 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 accept(visitor: IrElementVisitor, data: D): R { return visitor.visitConstructor(this, data) } @@ -133,4 +134,4 @@ class Fir2IrLazyConstructor( body = body?.transform(transformer, data) } -} \ No newline at end of file +} diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt index 1a7c1fb6572..37d05de1290 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt @@ -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 accept(visitor: IrElementVisitor, 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 } } -} \ No newline at end of file +} diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt index fe92501c7e4..90e7a44b2c9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt @@ -132,6 +132,10 @@ class Fir2IrLazySimpleFunction( ?.filterIsInstance().orEmpty() } + override var metadata: MetadataSource? + get() = null + set(_) = error("We should never need to store metadata of external declarations.") + override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitSimpleFunction(this, data) } @@ -155,4 +159,4 @@ class Fir2IrLazySimpleFunction( body = body?.transform(transformer, data) } -} \ No newline at end of file +} diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorBasedClassCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorBasedClassCodegen.kt index a414871ddd2..c70563ea13a 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorBasedClassCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorBasedClassCodegen.kt @@ -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) } } -} \ No newline at end of file +} diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt index 682e75db569..7f7cc5cfe73 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt @@ -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)) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt index 80b2818af04..a02dfc28e66 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt @@ -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 } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt index 69f52e650cc..c4b8f2fdc9d 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt @@ -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()?.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() } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeAliasAnnotationMethodsLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeAliasAnnotationMethodsLowering.kt index 57865ab6317..4677ec4a57f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeAliasAnnotationMethodsLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeAliasAnnotationMethodsLowering.kt @@ -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 } } } -} \ No newline at end of file +} diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index 26561f61512..4c9d06b2884 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -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) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt index 82848c41ba5..a84c9a0afbc 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt @@ -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 { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt index f9dfad9ec14..e77404781ef 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.types.IrType interface IrClass : IrSymbolDeclaration, IrDeclarationWithName, IrDeclarationWithVisibility, - IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer { + IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer, IrMetadataSourceOwner { @ObsoleteDescriptorBasedAPI override val descriptor: ClassDescriptor diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt index b6d43e68cb8..c204045b26a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt @@ -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 diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt index fdd193003ed..04308a310e4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.types.IrType interface IrField : IrSymbolDeclaration, - 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? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt index 124d8501695..b1c247999b1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt @@ -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 transform(transformer: IrElementTransformer, data: D): IrFile = accept(transformer, data) as IrFile } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt index d7f1f54a421..6845b6fc717 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt @@ -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 var body: IrBody? - - override var metadata: MetadataSource? } @ObsoleteDescriptorBasedAPI diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt index fe616ab1ea6..d3695f4ca22 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt @@ -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? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt index 4d27bda600a..5ac15a6d858 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt @@ -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? -} \ No newline at end of file +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt index 93f6ed6df7d..c143bf50b3b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt @@ -16,17 +16,16 @@ interface MetadataSource { get() = descriptor.name } - open class Class(descriptor: ClassDescriptor) : DescriptorBased(descriptor) + class Class(descriptor: ClassDescriptor) : DescriptorBased(descriptor) open class File(val descriptors: List) : MetadataSource { override val name: Name? get() = null } - open class Function(descriptor: FunctionDescriptor) : DescriptorBased(descriptor) + class Function(descriptor: FunctionDescriptor) : DescriptorBased(descriptor) - open class Property(descriptor: PropertyDescriptor) : DescriptorBased(descriptor) + class Property(descriptor: PropertyDescriptor) : DescriptorBased(descriptor) - open class LocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) : - DescriptorBased(descriptor) + class LocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) : DescriptorBased(descriptor) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt index 54e6839f1ae..85911b2c8cb 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt @@ -65,9 +65,6 @@ abstract class IrDeclarationBase( } } - override val metadata: MetadataSource? - get() = null - override fun ensureLowered() { if (stageController.currentStage > loweredUpTo) { stageController.lazyLower(this) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt index dc951262664..a9acdcd3800 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt @@ -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 = ArrayList() - override var metadata: MetadataSource.File? = null + override var metadata: MetadataSource? = null override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitFile(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt index 8a97182c510..659bc18ee52 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt @@ -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) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt index 98b50af4241..bf90b621e81 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt @@ -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 = SmartList() - override val metadata: MetadataSource? get() = null override val declarations: MutableList = mutableListOf() override val statements: MutableList = mutableListOf() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt index 7adaed4ca27..2e1f2138df6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt @@ -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 = emptyList() - override val metadata: MetadataSource? get() = null init { symbol.bind(this) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/LocalDelegatedPropertyCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/LocalDelegatedPropertyCarrier.kt index 433963bca73..5c402d37715 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/LocalDelegatedPropertyCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/LocalDelegatedPropertyCarrier.kt @@ -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 \ No newline at end of file + override var metadataField: MetadataSource? +) : LocalDelegatedPropertyCarrier diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt index ff79b9a047e..030b468fb92 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt @@ -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 accept(visitor: IrElementVisitor, data: D): R = visitor.visitClass(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt index ffa1d1053c7..7c7498d5f9d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt @@ -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 diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt index 72a76bd9ec0..4d49e1744b6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt @@ -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 accept(visitor: IrElementVisitor, data: D): R { return visitor.visitField(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt index 599c4e81edd..a95d303427d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt @@ -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 accept(visitor: IrElementVisitor, data: D): R = visitor.visitProperty(this, data) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt index 5be7dc9e966..e93a7c640f4 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt @@ -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)!! ) }