[FIR2IR] Introduce FirMetadataSource and use it (KT-38156)
This commit is contained in:
@@ -187,7 +187,7 @@ class Fir2IrClassifierStorage(
|
|||||||
isExpect = regularClass.isExpect,
|
isExpect = regularClass.isExpect,
|
||||||
isFun = false // TODO FirRegularClass.isFun
|
isFun = false // TODO FirRegularClass.isFun
|
||||||
).apply {
|
).apply {
|
||||||
metadata = MetadataSource.Class(descriptor)
|
metadata = FirMetadataSource.Class(regularClass, descriptor)
|
||||||
descriptor.bind(this)
|
descriptor.bind(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -222,7 +222,7 @@ class Fir2IrClassifierStorage(
|
|||||||
isCompanion = false, isInner = false, isData = false,
|
isCompanion = false, isInner = false, isData = false,
|
||||||
isExternal = false, isInline = false, isExpect = false, isFun = false
|
isExternal = false, isInline = false, isExpect = false, isFun = false
|
||||||
).apply {
|
).apply {
|
||||||
metadata = MetadataSource.Class(descriptor)
|
metadata = FirMetadataSource.Class(anonymousObject, descriptor)
|
||||||
descriptor.bind(this)
|
descriptor.bind(this)
|
||||||
setThisReceiver(anonymousObject.typeParameters)
|
setThisReceiver(anonymousObject.typeParameters)
|
||||||
if (irParent != null) {
|
if (irParent != null) {
|
||||||
|
|||||||
+7
-5
@@ -437,7 +437,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
isFakeOverride = updatedOrigin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
isFakeOverride = updatedOrigin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||||
isOperator = simpleFunction?.isOperator == true
|
isOperator = simpleFunction?.isOperator == true
|
||||||
).apply {
|
).apply {
|
||||||
metadata = MetadataSource.Function(descriptor)
|
metadata = FirMetadataSource.Function(function, descriptor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result
|
result
|
||||||
@@ -501,7 +501,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
constructor.returnTypeRef.toIrType(),
|
constructor.returnTypeRef.toIrType(),
|
||||||
isInline = false, isExternal = false, isPrimary = isPrimary, isExpect = false
|
isInline = false, isExternal = false, isPrimary = isPrimary, isExpect = false
|
||||||
).apply {
|
).apply {
|
||||||
metadata = MetadataSource.Function(descriptor)
|
metadata = FirMetadataSource.Function(constructor, descriptor)
|
||||||
enterScope(descriptor)
|
enterScope(descriptor)
|
||||||
}.bindAndDeclareParameters(constructor, descriptor, irParent, isStatic = false).apply {
|
}.bindAndDeclareParameters(constructor, descriptor, irParent, isStatic = false).apply {
|
||||||
leaveScope(descriptor)
|
leaveScope(descriptor)
|
||||||
@@ -549,7 +549,9 @@ class Fir2IrDeclarationStorage(
|
|||||||
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||||
isOperator = false
|
isOperator = false
|
||||||
).apply {
|
).apply {
|
||||||
metadata = MetadataSource.Function(descriptor)
|
if (propertyAccessor != null) {
|
||||||
|
metadata = FirMetadataSource.Function(propertyAccessor, descriptor)
|
||||||
|
}
|
||||||
with(classifierStorage) {
|
with(classifierStorage) {
|
||||||
setTypeParameters(
|
setTypeParameters(
|
||||||
property, ConversionTypeContext(
|
property, ConversionTypeContext(
|
||||||
@@ -637,7 +639,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
isExpect = property.isExpect,
|
isExpect = property.isExpect,
|
||||||
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
).apply {
|
).apply {
|
||||||
metadata = MetadataSource.Property(descriptor)
|
metadata = FirMetadataSource.Variable(property, descriptor)
|
||||||
descriptor.bind(this)
|
descriptor.bind(this)
|
||||||
if (irParent != null) {
|
if (irParent != null) {
|
||||||
parent = irParent
|
parent = irParent
|
||||||
@@ -721,7 +723,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
isStatic = field.isStatic,
|
isStatic = field.isStatic,
|
||||||
isFakeOverride = false
|
isFakeOverride = false
|
||||||
).apply {
|
).apply {
|
||||||
metadata = MetadataSource.Property(descriptor)
|
metadata = FirMetadataSource.Variable(field, descriptor)
|
||||||
descriptor.bind(this)
|
descriptor.bind(this)
|
||||||
fieldCache[field] = 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
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
|
|
||||||
interface MetadataSource {
|
interface MetadataSource {
|
||||||
class Class(val descriptor: ClassDescriptor) : MetadataSource
|
open class Class(val descriptor: ClassDescriptor) : MetadataSource
|
||||||
|
|
||||||
class File(val descriptors: List<DeclarationDescriptor>) : 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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user