IR: make DescriptorMetadataSource a subtype of MetadataSource
FirMetadataSource is a metadata source too.
This commit is contained in:
+8
-8
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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))
|
||||
}
|
||||
|
||||
+1
-2
@@ -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
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ class Fir2IrVisitor(
|
||||
it.accept(this@Fir2IrVisitor, data) as? IrConstructorCall
|
||||
}
|
||||
|
||||
metadata = FirMetadataSource.File(file, components.session)
|
||||
metadata = FirMetadataSource.File(file)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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("<init>")
|
||||
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("<init>")
|
||||
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
|
||||
}
|
||||
+11
-11
@@ -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)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
+3
-2
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
+1
-1
@@ -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(
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
|
||||
+4
-4
@@ -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
|
||||
}
|
||||
|
||||
@@ -11,21 +11,27 @@ import org.jetbrains.kotlin.name.Name
|
||||
interface MetadataSource {
|
||||
val name: Name?
|
||||
|
||||
abstract class DescriptorBased<D : DeclarationDescriptor> internal constructor(val descriptor: D) : MetadataSource {
|
||||
override val name: Name
|
||||
get() = descriptor.name
|
||||
}
|
||||
|
||||
class Class(descriptor: ClassDescriptor) : DescriptorBased<ClassDescriptor>(descriptor)
|
||||
|
||||
open class File(val descriptors: List<DeclarationDescriptor>) : MetadataSource {
|
||||
override val name: Name?
|
||||
get() = null
|
||||
}
|
||||
|
||||
class Function(descriptor: FunctionDescriptor) : DescriptorBased<FunctionDescriptor>(descriptor)
|
||||
|
||||
class Property(descriptor: PropertyDescriptor) : DescriptorBased<PropertyDescriptor>(descriptor)
|
||||
|
||||
class LocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) : DescriptorBased<VariableDescriptorWithAccessors>(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<DeclarationDescriptor>) : 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
|
||||
}
|
||||
|
||||
@@ -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) =
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
+2
-2
@@ -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)!!
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user