[FIR2IR] Introduce FirMetadataSource and use it (KT-38156)

This commit is contained in:
Mikhail Glukhikh
2020-04-14 17:41:33 +03:00
parent 2aae735a8e
commit 03be3c108a
4 changed files with 39 additions and 10 deletions
@@ -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) {
@@ -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
}
@@ -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
}
@@ -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<DeclarationDescriptor>) : 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
}