diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmClassCodegen.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmClassCodegen.kt index c1c158e227d..9b7ffc04330 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmClassCodegen.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmClassCodegen.kt @@ -51,7 +51,7 @@ class FirJvmClassCodegen( private val serializer: FirElementSerializer? = when (val metadata = irClass.metadata) { is FirMetadataSource.Class -> FirElementSerializer.create( - metadata.klass, serializerExtension, (parentClassCodegen as? FirJvmClassCodegen)?.serializer + metadata.fir, serializerExtension, (parentClassCodegen as? FirJvmClassCodegen)?.serializer ) is FirMetadataSource.File -> FirElementSerializer.createTopLevel(session, serializerExtension) is FirMetadataSource.Function -> FirElementSerializer.createForLambda(session, serializerExtension) @@ -107,7 +107,7 @@ class FirJvmClassCodegen( when (val metadata = irClass.metadata) { is FirMetadataSource.Class -> { - val classProto = serializer!!.classProto(metadata.klass).build() + val classProto = serializer!!.classProto(metadata.fir).build() writeKotlinMetadata(visitor, state, KotlinClassHeader.Kind.CLASS, extraFlags) { AsmUtil.writeAnnotationData(it, classProto, serializer.stringTable as JvmStringTable) } @@ -118,7 +118,7 @@ class FirJvmClassCodegen( } is FirMetadataSource.File -> { val packageFqName = irClass.getPackageFragment()!!.fqName - val packageProto = serializer!!.packagePartProto(packageFqName, metadata.file) + val packageProto = serializer!!.packagePartProto(packageFqName, metadata.fir) serializerExtension.serializeJvmPackage(packageProto, type) @@ -137,7 +137,7 @@ class FirJvmClassCodegen( } } is FirMetadataSource.Function -> { - val fakeAnonymousFunction = metadata.function.copyToFreeAnonymousFunction() + val fakeAnonymousFunction = metadata.fir.copyToFreeAnonymousFunction() val functionProto = serializer!!.functionProto(fakeAnonymousFunction)?.build() writeKotlinMetadata(visitor, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, extraFlags) { if (functionProto != null) { @@ -164,18 +164,18 @@ class FirJvmClassCodegen( override fun bindMethodMetadata(method: IrFunction, signature: Method) { when (val metadata = method.metadata) { - is FirMetadataSource.Variable -> { + is FirMetadataSource.Property -> { // We can't check for JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_ANNOTATIONS because for interface methods // moved to DefaultImpls, origin is changed to DEFAULT_IMPLS // TODO: fix origin somehow, because otherwise $annotations methods in interfaces also don't have ACC_SYNTHETIC assert(method.name.asString().endsWith(JvmAbi.ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX)) { method.dump() } state.globalSerializationBindings.put( - FirJvmSerializerExtension.SYNTHETIC_METHOD_FOR_FIR_VARIABLE, metadata.variable, signature + FirJvmSerializerExtension.SYNTHETIC_METHOD_FOR_FIR_VARIABLE, metadata.fir, signature ) } is FirMetadataSource.Function -> { - visitor.serializationBindings.put(FirJvmSerializerExtension.METHOD_FOR_FIR_FUNCTION, metadata.function, signature) + visitor.serializationBindings.put(FirJvmSerializerExtension.METHOD_FOR_FIR_FUNCTION, metadata.fir, signature) } null -> { } @@ -188,7 +188,7 @@ class FirJvmClassCodegen( override fun bindFieldMetadata(field: IrField, fieldType: Type, fieldName: String) { val metadata = field.metadata if (metadata is FirMetadataSource.Property) { - state.globalSerializationBindings.put(FirJvmSerializerExtension.FIELD_FOR_PROPERTY, metadata.property, fieldType to fieldName) + state.globalSerializationBindings.put(FirJvmSerializerExtension.FIELD_FOR_PROPERTY, metadata.fir, fieldType to fieldName) } } } diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt index 9b3a2d67430..c9ab23fbd7e 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt @@ -82,7 +82,7 @@ class FirJvmSerializerExtension @JvmOverloads constructor( versionRequirementTable: MutableVersionRequirementTable, childSerializer: FirElementSerializer ) { - assert((irClass.metadata as FirMetadataSource.Class).klass == klass) + assert((irClass.metadata as FirMetadataSource.Class).fir == klass) if (moduleName != JvmProtoBufUtil.DEFAULT_MODULE_NAME) { proto.setExtension(JvmProtoBuf.classModuleName, stringTable.getStringIndex(moduleName)) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index e1705822ed5..7ae0a5ff973 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -672,7 +672,7 @@ class Fir2IrDeclarationStorage( isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE, containerSource = property.containerSource, ).apply { - metadata = FirMetadataSource.Variable(property) + metadata = FirMetadataSource.Property(property) convertAnnotationsFromLibrary(property) enterScope(this) if (irParent != null) { @@ -791,7 +791,6 @@ class Fir2IrDeclarationStorage( isExternal = false, isStatic = field.isStatic ).apply { - metadata = FirMetadataSource.Variable(field) descriptor.bind(this) fieldCache[field] = this } 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 1ab8477f3d7..f520ee62e36 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 @@ -98,7 +98,7 @@ class Fir2IrVisitor( it.accept(this@Fir2IrVisitor, data) as? IrConstructorCall } - metadata = FirMetadataSource.File(file, components.session) + metadata = FirMetadataSource.File(file) } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt index 01e4feccc9c..8ab522514da 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt @@ -10,55 +10,26 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.ir.declarations.MetadataSource import org.jetbrains.kotlin.name.Name -interface FirMetadataSource : MetadataSource { +sealed class FirMetadataSource : MetadataSource { + abstract val fir: FirDeclaration val session: FirSession + get() = fir.session - class File( - val file: FirFile, override val session: FirSession - ) : MetadataSource.File(emptyList()), FirMetadataSource + override val name: Name? + get() = when (val fir = fir) { + is FirConstructor -> Name.special("") + is FirSimpleFunction -> fir.name + is FirRegularClass -> fir.name + is FirProperty -> fir.name + else -> null + } - class Class( - val klass: FirClass<*> - ) : FirMetadataSource { - override val session: FirSession - get() = klass.session + class File(override val fir: FirFile) : FirMetadataSource(), MetadataSource.File - override val name: Name? - get() = (klass as? FirRegularClass)?.name - } + class Class(override val fir: FirClass<*>) : FirMetadataSource(), MetadataSource.Class - class Function( - val function: FirFunction<*> - ) : FirMetadataSource { - override val session: FirSession - get() = function.session + class Function(override val fir: FirFunction<*>) : FirMetadataSource(), MetadataSource.Function - override val name: Name? - get() = when (function) { - is FirSimpleFunction -> function.name - is FirConstructor -> Name.special("") - else -> null - } - } - - class Property( - val property: FirProperty - ) : FirMetadataSource { - override val session: FirSession - get() = property.session - - override val name: Name - get() = property.name - } - - class Variable( - val variable: FirVariable<*> - ) : FirMetadataSource { - override val session: FirSession - get() = variable.session - - override val name: Name - get() = variable.name - } + class Property(override val fir: FirProperty) : FirMetadataSource(), MetadataSource.Property } \ 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 c70563ea13a..6fc9790c661 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 @@ -11,10 +11,10 @@ import org.jetbrains.kotlin.codegen.* import org.jetbrains.kotlin.codegen.binding.CodegenBinding import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings import org.jetbrains.kotlin.codegen.serialization.JvmSerializerExtension +import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.MetadataSource import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAnnotationNames @@ -32,11 +32,11 @@ class DescriptorBasedClassCodegen internal constructor( private val serializerExtension = JvmSerializerExtension(visitor.serializationBindings, state, typeMapper) private val serializer: DescriptorSerializer? = when (val metadata = irClass.metadata) { - is MetadataSource.Class -> DescriptorSerializer.create( + is DescriptorMetadataSource.Class -> DescriptorSerializer.create( metadata.descriptor, serializerExtension, (parentClassCodegen as? DescriptorBasedClassCodegen)?.serializer ) - is MetadataSource.File -> DescriptorSerializer.createTopLevel(serializerExtension) - is MetadataSource.Function -> DescriptorSerializer.createForLambda(serializerExtension) + is DescriptorMetadataSource.File -> DescriptorSerializer.createTopLevel(serializerExtension) + is DescriptorMetadataSource.Function -> DescriptorSerializer.createForLambda(serializerExtension) else -> null } @@ -47,7 +47,7 @@ class DescriptorBasedClassCodegen internal constructor( state.bindingTrace.record( CodegenBinding.DELEGATED_PROPERTIES_WITH_METADATA, type, - localDelegatedProperties.mapNotNull { (it.owner.metadata as? MetadataSource.LocalDelegatedProperty)?.descriptor } + localDelegatedProperties.mapNotNull { (it.owner.metadata as? DescriptorMetadataSource.LocalDelegatedProperty)?.descriptor } ) } @@ -58,7 +58,7 @@ class DescriptorBasedClassCodegen internal constructor( } when (val metadata = irClass.metadata) { - is MetadataSource.Class -> { + is DescriptorMetadataSource.Class -> { val classProto = serializer!!.classProto(metadata.descriptor).build() writeKotlinMetadata(visitor, state, KotlinClassHeader.Kind.CLASS, extraFlags) { AsmUtil.writeAnnotationData(it, serializer, classProto) @@ -68,7 +68,7 @@ class DescriptorBasedClassCodegen internal constructor( "JvmPackageName is not supported for classes: ${irClass.render()}" } } - is MetadataSource.File -> { + is DescriptorMetadataSource.File -> { val packageFqName = irClass.getPackageFragment()!!.fqName val packageProto = serializer!!.packagePartProto(packageFqName, metadata.descriptors) @@ -88,7 +88,7 @@ class DescriptorBasedClassCodegen internal constructor( } } } - is MetadataSource.Function -> { + is DescriptorMetadataSource.Function -> { val fakeDescriptor = createFreeFakeLambdaDescriptor(metadata.descriptor, state.typeApproximator) val functionProto = serializer!!.functionProto(fakeDescriptor)?.build() writeKotlinMetadata(visitor, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, extraFlags) { @@ -116,7 +116,7 @@ class DescriptorBasedClassCodegen internal constructor( override fun bindMethodMetadata(method: IrFunction, signature: Method) { when (val metadata = method.metadata) { - is MetadataSource.Property -> { + is DescriptorMetadataSource.Property -> { // We can't check for JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_ANNOTATIONS because for interface methods // moved to DefaultImpls, origin is changed to DEFAULT_IMPLS // TODO: fix origin somehow, because otherwise $annotations methods in interfaces also don't have ACC_SYNTHETIC @@ -126,7 +126,7 @@ class DescriptorBasedClassCodegen internal constructor( JvmSerializationBindings.SYNTHETIC_METHOD_FOR_PROPERTY, metadata.descriptor, signature ) } - is MetadataSource.Function -> { + is DescriptorMetadataSource.Function -> { visitor.serializationBindings.put(JvmSerializationBindings.METHOD_FOR_FUNCTION, metadata.descriptor, signature) } null -> { @@ -136,7 +136,7 @@ class DescriptorBasedClassCodegen internal constructor( } override fun bindFieldMetadata(field: IrField, fieldType: Type, fieldName: String) { - val descriptor = (field.metadata as? MetadataSource.Property)?.descriptor + val descriptor = (field.metadata as? DescriptorMetadataSource.Property)?.descriptor if (descriptor != null) { state.globalSerializationBindings.put(JvmSerializationBindings.FIELD_FOR_PROPERTY, descriptor, fieldType to fieldName) } 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 481742282a8..f5d603af78c 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 @@ -39,7 +39,6 @@ import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.psi2ir.PsiSourceManager import org.jetbrains.kotlin.resolve.jvm.JvmClassName -import org.jetbrains.kotlin.resolve.source.KotlinSourceElement import java.util.* internal val fileClassPhase = makeIrModulePhase( @@ -67,7 +66,8 @@ private class FileClassLowering(val context: JvmBackendContext) : FileLoweringPa fileClassMembers.add(it) } - if (fileClassMembers.isEmpty() && (irFile.metadata as? MetadataSource.File)?.descriptors.isNullOrEmpty()) return + // TODO FirMetadataSource.File + if (fileClassMembers.isEmpty() && (irFile.metadata as? DescriptorMetadataSource.File)?.descriptors.isNullOrEmpty()) return val irFileClass = createFileClass(irFile, fileClassMembers) classes.add(irFileClass) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ProcessOptionalAnnotations.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ProcessOptionalAnnotations.kt index 4a7f7edbe68..ddd2e4b26cf 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ProcessOptionalAnnotations.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ProcessOptionalAnnotations.kt @@ -9,9 +9,9 @@ import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.phaser.makeIrModulePhase import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.codegen.isOptionalAnnotationClass +import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrFile -import org.jetbrains.kotlin.ir.declarations.MetadataSource internal val processOptionalAnnotationsPhase = makeIrModulePhase( ::ProcessOptionalAnnotations, @@ -23,7 +23,8 @@ class ProcessOptionalAnnotations(private val context: JvmBackendContext) : FileL override fun lower(irFile: IrFile) { for (declaration in irFile.declarations) { if (declaration !is IrClass || !declaration.isOptionalAnnotationClass()) continue - val metadataSource = (declaration.metadata as? MetadataSource.Class)?.descriptor ?: continue + // TODO FirMetadataSource.Class + val metadataSource = (declaration.metadata as? DescriptorMetadataSource.Class)?.descriptor ?: continue context.state.factory.packagePartRegistry.optionalAnnotations += metadataSource } } 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 d3d175e2696..4edee3f4d9a 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 @@ -91,7 +91,7 @@ class ClassGenerator( startOffset, endOffset, IrDeclarationOrigin.DEFINED, it, classDescriptor, context.symbolTable.nameProvider.nameForDeclaration(classDescriptor), visibility, modality ).apply { - metadata = MetadataSource.Class(it.descriptor) + metadata = DescriptorMetadataSource.Class(it.descriptor) } }.buildWithScope { irClass -> declarationGenerator.generateGlobalTypeParametersDeclarations(irClass, classDescriptor.declaredTypeParameters) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt index 637ca4722da..6175f70a369 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt @@ -136,7 +136,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D startOffset, endOffset, origin, it, delegateDescriptor.name, type, delegateDescriptor.visibility, !delegateDescriptor.isVar, false, delegateDescriptor.dispatchReceiverParameter == null ).apply { - metadata = MetadataSource.Property(propertyDescriptor) + metadata = DescriptorMetadataSource.Property(propertyDescriptor) } }.also { irDelegate -> irDelegate.initializer = generateInitializerBodyForPropertyDelegate( diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt index 8df459bf9a8..44bb8425c21 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt @@ -260,7 +260,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio visibility, IrUninitializedType, isInline, isEffectivelyExternal(), isPrimary, isExpect ) }.apply { - metadata = MetadataSource.Function(it.descriptor) + metadata = DescriptorMetadataSource.Function(it.descriptor) } }.buildWithScope { irConstructor -> generateValueParameterDeclarations(irConstructor, ktParametersElement, null) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt index 0d847f68a1e..1c56b718327 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt @@ -17,9 +17,9 @@ package org.jetbrains.kotlin.psi2ir.generators import org.jetbrains.kotlin.backend.common.CodegenUtil +import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment -import org.jetbrains.kotlin.ir.declarations.MetadataSource import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl import org.jetbrains.kotlin.ir.linkage.IrDeserializer @@ -91,7 +91,7 @@ class ModuleGenerator(override val context: GeneratorContext) : Generator { val fileEntry = context.sourceManager.getOrCreateFileEntry(ktFile) val packageFragmentDescriptor = context.moduleDescriptor.findPackageFragmentForFile(ktFile)!! val irFile = IrFileImpl(fileEntry, packageFragmentDescriptor).apply { - metadata = MetadataSource.File(CodegenUtil.getMemberDescriptorsToGenerate(ktFile, context.bindingContext)) + metadata = DescriptorMetadataSource.File(CodegenUtil.getMemberDescriptorsToGenerate(ktFile, context.bindingContext)) } context.sourceManager.putFileEntry(irFile, fileEntry) return irFile diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt index 7009a223a62..4a68ef12752 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt @@ -22,10 +22,10 @@ import org.jetbrains.kotlin.builtins.isKFunctionType import org.jetbrains.kotlin.builtins.isKSuspendFunctionType import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter -import org.jetbrains.kotlin.ir.declarations.MetadataSource import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedValueParameterDescriptor import org.jetbrains.kotlin.ir.expressions.* @@ -350,7 +350,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St adapterFunctionDescriptor.bind(irAdapterFun) context.symbolTable.withScope(adapterFunctionDescriptor) { - irAdapterFun.metadata = MetadataSource.Function(adapteeDescriptor) + irAdapterFun.metadata = DescriptorMetadataSource.Function(adapteeDescriptor) irAdapterFun.dispatchReceiverParameter = null 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 2b976f637c1..94bedd4f429 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 @@ -80,7 +80,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) { val irClass = irFactory.createIrClassFromDescriptor(startOffset, endOffset, origin, symbol, descriptor) symbolTable.withScope(irClass) { - irClass.metadata = MetadataSource.Class(descriptor) + irClass.metadata = DescriptorMetadataSource.Class(descriptor) generateGlobalTypeParametersDeclarations(irClass, descriptor.declaredTypeParameters) irClass.superTypes = descriptor.typeConstructor.supertypes.map { @@ -166,7 +166,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) { isEffectivelyExternal(), isPrimary, isExpect ) } - irConstructor.metadata = MetadataSource.Function(descriptor) + irConstructor.metadata = DescriptorMetadataSource.Function(descriptor) symbolTable.withScope(irConstructor) { val ctorTypeParameters = descriptor.typeParameters.filter { it.containingDeclaration === descriptor } @@ -192,7 +192,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) { isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect ) } - irFunction.metadata = MetadataSource.Function(descriptor) + irFunction.metadata = DescriptorMetadataSource.Function(descriptor) symbolTable.withScope(descriptor) { generateOverridenSymbols(irFunction, descriptor.overriddenDescriptors) @@ -220,7 +220,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) { isExpect = descriptor.isExpect ) - irProperty.metadata = MetadataSource.Property(descriptor) + irProperty.metadata = DescriptorMetadataSource.Property(descriptor) return irProperty } 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 c143bf50b3b..f96927c50a6 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 @@ -11,21 +11,27 @@ import org.jetbrains.kotlin.name.Name interface MetadataSource { val name: Name? - abstract class DescriptorBased internal constructor(val descriptor: D) : MetadataSource { - override val name: Name - get() = descriptor.name - } - - class Class(descriptor: ClassDescriptor) : DescriptorBased(descriptor) - - open class File(val descriptors: List) : MetadataSource { - override val name: Name? - get() = null - } - - class Function(descriptor: FunctionDescriptor) : DescriptorBased(descriptor) - - class Property(descriptor: PropertyDescriptor) : DescriptorBased(descriptor) - - class LocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) : DescriptorBased(descriptor) + interface File : MetadataSource + interface Class : MetadataSource + interface Function : MetadataSource + interface Property : MetadataSource +} + +sealed class DescriptorMetadataSource : MetadataSource { + open val descriptor: Named? + get() = null + + override val name: Name? + get() = descriptor?.name + + class File(val descriptors: List) : DescriptorMetadataSource(), MetadataSource.File + + class Class(override val descriptor: ClassDescriptor) : DescriptorMetadataSource(), MetadataSource.Class + + class Function(override val descriptor: FunctionDescriptor) : DescriptorMetadataSource(), MetadataSource.Function + + class Property(override val descriptor: PropertyDescriptor) : DescriptorMetadataSource(), MetadataSource.Property + + class LocalDelegatedProperty(override val descriptor: VariableDescriptorWithAccessors) : DescriptorMetadataSource(), + MetadataSource.Property } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index a5ee822569a..62649f7978a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -589,7 +589,7 @@ class SymbolTable( visibility ?: it.descriptor.visibility, !it.descriptor.isVar, it.descriptor.isEffectivelyExternal(), it.descriptor.dispatchReceiverParameter == null ).apply { - metadata = MetadataSource.Property(it.descriptor) + metadata = DescriptorMetadataSource.Property(it.descriptor) } } ): IrField = @@ -662,7 +662,7 @@ class SymbolTable( isExternal = descriptor.isEffectivelyExternal(), isExpect = descriptor.isExpect ).apply { - metadata = MetadataSource.Property(symbol.descriptor) + metadata = DescriptorMetadataSource.Property(symbol.descriptor) } } ): IrProperty = @@ -978,7 +978,7 @@ class SymbolTable( { IrLocalDelegatedPropertySymbolImpl(descriptor) }, factory ).apply { - metadata = MetadataSource.LocalDelegatedProperty(descriptor) + metadata = DescriptorMetadataSource.LocalDelegatedProperty(descriptor) } fun referenceLocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/overrides.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/overrides.kt index d66d046ffea..89827cb1d9e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/overrides.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/overrides.kt @@ -7,9 +7,9 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI +import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.ir.declarations.MetadataSource import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType @ObsoleteDescriptorBasedAPI @@ -25,7 +25,7 @@ fun SymbolTable.declareSimpleFunctionWithOverrides( startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(this), visibility, modality, IrUninitializedType, isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect ).also { declaration -> - declaration.metadata = MetadataSource.Function(this) + declaration.metadata = DescriptorMetadataSource.Function(this) } } }.also { declaration -> 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 78b745920a9..5fa2a177bc7 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 @@ -123,7 +123,7 @@ class ParcelableIrTransformer(private val context: IrPluginContext, private val irExprBody(irInt(flags)) } - metadata = MetadataSource.Function( + metadata = DescriptorMetadataSource.Function( declaration.descriptor.findFunction(ParcelableSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS)!! ) } @@ -178,7 +178,7 @@ class ParcelableIrTransformer(private val context: IrPluginContext, private val } } - metadata = MetadataSource.Function( + metadata = DescriptorMetadataSource.Function( declaration.descriptor.findFunction(ParcelableSyntheticComponent.ComponentKind.WRITE_TO_PARCEL)!! ) }