From 03be3c108a9984e57da284e84f41753db1cd9d8c Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 14 Apr 2020 17:41:33 +0300 Subject: [PATCH] [FIR2IR] Introduce FirMetadataSource and use it (KT-38156) --- .../fir/backend/Fir2IrClassifierStorage.kt | 4 +-- .../fir/backend/Fir2IrDeclarationStorage.kt | 12 +++++---- .../kotlin/fir/backend/FirMetadataSource.kt | 27 +++++++++++++++++++ .../kotlin/ir/declarations/MetadataSource.kt | 6 ++--- 4 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt index eb1f7eadab7..89773914db9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt @@ -187,7 +187,7 @@ class Fir2IrClassifierStorage( isExpect = regularClass.isExpect, isFun = false // TODO FirRegularClass.isFun ).apply { - metadata = MetadataSource.Class(descriptor) + metadata = FirMetadataSource.Class(regularClass, descriptor) descriptor.bind(this) } } @@ -222,7 +222,7 @@ class Fir2IrClassifierStorage( isCompanion = false, isInner = false, isData = false, isExternal = false, isInline = false, isExpect = false, isFun = false ).apply { - metadata = MetadataSource.Class(descriptor) + metadata = FirMetadataSource.Class(anonymousObject, descriptor) descriptor.bind(this) setThisReceiver(anonymousObject.typeParameters) if (irParent != null) { 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 e5080da0b05..bec54f989ae 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 @@ -437,7 +437,7 @@ class Fir2IrDeclarationStorage( isFakeOverride = updatedOrigin == IrDeclarationOrigin.FAKE_OVERRIDE, isOperator = simpleFunction?.isOperator == true ).apply { - metadata = MetadataSource.Function(descriptor) + metadata = FirMetadataSource.Function(function, descriptor) } } result @@ -501,7 +501,7 @@ class Fir2IrDeclarationStorage( constructor.returnTypeRef.toIrType(), isInline = false, isExternal = false, isPrimary = isPrimary, isExpect = false ).apply { - metadata = MetadataSource.Function(descriptor) + metadata = FirMetadataSource.Function(constructor, descriptor) enterScope(descriptor) }.bindAndDeclareParameters(constructor, descriptor, irParent, isStatic = false).apply { leaveScope(descriptor) @@ -549,7 +549,9 @@ class Fir2IrDeclarationStorage( isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE, isOperator = false ).apply { - metadata = MetadataSource.Function(descriptor) + if (propertyAccessor != null) { + metadata = FirMetadataSource.Function(propertyAccessor, descriptor) + } with(classifierStorage) { setTypeParameters( property, ConversionTypeContext( @@ -637,7 +639,7 @@ class Fir2IrDeclarationStorage( isExpect = property.isExpect, isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE ).apply { - metadata = MetadataSource.Property(descriptor) + metadata = FirMetadataSource.Variable(property, descriptor) descriptor.bind(this) if (irParent != null) { parent = irParent @@ -721,7 +723,7 @@ class Fir2IrDeclarationStorage( isStatic = field.isStatic, isFakeOverride = false ).apply { - metadata = MetadataSource.Property(descriptor) + metadata = FirMetadataSource.Variable(field, descriptor) descriptor.bind(this) fieldCache[field] = this } 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 new file mode 100644 index 00000000000..55d8d312c1a --- /dev/null +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt @@ -0,0 +1,27 @@ +/* + * 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.fir.backend + +import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.ir.declarations.MetadataSource +import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor + +interface FirMetadataSource : MetadataSource { + class Class( + val klass: FirClass<*>, descriptor: WrappedClassDescriptor + ) : MetadataSource.Class(descriptor), FirMetadataSource + + class Function( + val function: FirFunction<*>, descriptor: FunctionDescriptor + ) : MetadataSource.Function(descriptor), FirMetadataSource + + class Variable( + val variable: FirVariable<*>, + descriptor: PropertyDescriptor + ) : MetadataSource.Property(descriptor), FirMetadataSource +} \ 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 193dde20300..09da9f1dc26 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,11 +11,11 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor interface MetadataSource { - class Class(val descriptor: ClassDescriptor) : MetadataSource + open class Class(val descriptor: ClassDescriptor) : MetadataSource class File(val descriptors: List) : MetadataSource - class Function(val descriptor: FunctionDescriptor) : MetadataSource + open class Function(val descriptor: FunctionDescriptor) : MetadataSource - class Property(val descriptor: PropertyDescriptor) : MetadataSource + open class Property(val descriptor: PropertyDescriptor) : MetadataSource }