IR: transform base classes of lazy IR to interfaces
This commit is contained in:
+12
-22
@@ -5,30 +5,28 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lazy
|
package org.jetbrains.kotlin.fir.lazy
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|
||||||
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||||
import org.jetbrains.kotlin.fir.backend.toIrType
|
import org.jetbrains.kotlin.fir.backend.toIrType
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrBindableSymbol
|
import org.jetbrains.kotlin.fir.symbols.Fir2IrBindableSymbol
|
||||||
import org.jetbrains.kotlin.ir.IrElementBase
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import kotlin.properties.ReadWriteProperty
|
||||||
|
|
||||||
|
interface AbstractFir2IrLazyDeclaration<F : FirMemberDeclaration, D : IrSymbolOwner> :
|
||||||
|
IrDeclaration, IrDeclarationParent, Fir2IrComponents {
|
||||||
|
|
||||||
|
val fir: F
|
||||||
|
val symbol: Fir2IrBindableSymbol<*, D>
|
||||||
|
|
||||||
abstract class AbstractFir2IrLazyDeclaration<F : FirMemberDeclaration, D : IrSymbolOwner>(
|
|
||||||
private val components: Fir2IrComponents,
|
|
||||||
startOffset: Int,
|
|
||||||
endOffset: Int,
|
|
||||||
override var origin: IrDeclarationOrigin,
|
|
||||||
val fir: F,
|
|
||||||
open val symbol: Fir2IrBindableSymbol<*, D>
|
|
||||||
) : IrElementBase(startOffset, endOffset), IrDeclaration, IrDeclarationParent, Fir2IrComponents by components {
|
|
||||||
override val factory: IrFactory
|
override val factory: IrFactory
|
||||||
get() = components.irFactory
|
get() = irFactory
|
||||||
|
|
||||||
internal fun prepareTypeParameters() {
|
var typeParameters: List<IrTypeParameter>
|
||||||
|
|
||||||
|
fun prepareTypeParameters() {
|
||||||
typeParameters = fir.typeParameters.mapIndexedNotNull { index, typeParameter ->
|
typeParameters = fir.typeParameters.mapIndexedNotNull { index, typeParameter ->
|
||||||
if (typeParameter !is FirTypeParameter) return@mapIndexedNotNull null
|
if (typeParameter !is FirTypeParameter) return@mapIndexedNotNull null
|
||||||
classifierStorage.getIrTypeParameter(typeParameter, index).apply {
|
classifierStorage.getIrTypeParameter(typeParameter, index).apply {
|
||||||
@@ -40,15 +38,7 @@ abstract class AbstractFir2IrLazyDeclaration<F : FirMemberDeclaration, D : IrSym
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lateinit var typeParameters: List<IrTypeParameter>
|
fun createLazyAnnotations(): ReadWriteProperty<Any?, List<IrConstructorCall>> = lazyVar {
|
||||||
|
|
||||||
override lateinit var parent: IrDeclarationParent
|
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
|
||||||
override val descriptor: DeclarationDescriptor
|
|
||||||
get() = symbol.descriptor
|
|
||||||
|
|
||||||
override var annotations: List<IrConstructorCall> by lazyVar {
|
|
||||||
fir.annotations.mapNotNull {
|
fir.annotations.mapNotNull {
|
||||||
callGenerator.convertToIrConstructorCall(it) as? IrConstructorCall
|
callGenerator.convertToIrConstructorCall(it) as? IrConstructorCall
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,34 +19,34 @@ import org.jetbrains.kotlin.fir.types.isNullableAny
|
|||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class Fir2IrLazyClass(
|
class Fir2IrLazyClass(
|
||||||
components: Fir2IrComponents,
|
components: Fir2IrComponents,
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
fir: FirRegularClass,
|
override val fir: FirRegularClass,
|
||||||
symbol: Fir2IrClassSymbol
|
override val symbol: Fir2IrClassSymbol,
|
||||||
) : AbstractFir2IrLazyDeclaration<FirRegularClass, IrClass>(
|
) : IrClass, AbstractFir2IrLazyDeclaration<FirRegularClass, IrClass>, Fir2IrComponents by components {
|
||||||
components, startOffset, endOffset, origin, fir, symbol
|
|
||||||
), IrClass {
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
classifierStorage.preCacheTypeParameters(fir)
|
classifierStorage.preCacheTypeParameters(fir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
override lateinit var typeParameters: List<IrTypeParameter>
|
||||||
|
override lateinit var parent: IrDeclarationParent
|
||||||
|
|
||||||
override val source: SourceElement
|
override val source: SourceElement
|
||||||
get() = SourceElement.NO_SOURCE
|
get() = SourceElement.NO_SOURCE
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
override val descriptor: ClassDescriptor
|
override val descriptor: ClassDescriptor
|
||||||
get() = super.descriptor as ClassDescriptor
|
get() = symbol.descriptor
|
||||||
|
|
||||||
override val symbol: Fir2IrClassSymbol
|
|
||||||
get() = super.symbol as Fir2IrClassSymbol
|
|
||||||
|
|
||||||
override val name: Name
|
override val name: Name
|
||||||
get() = fir.name
|
get() = fir.name
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.parentClassOrNull
|
import org.jetbrains.kotlin.ir.util.parentClassOrNull
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
@@ -23,28 +24,27 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class Fir2IrLazyConstructor(
|
class Fir2IrLazyConstructor(
|
||||||
components: Fir2IrComponents,
|
components: Fir2IrComponents,
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
fir: FirConstructor,
|
override val fir: FirConstructor,
|
||||||
symbol: Fir2IrConstructorSymbol
|
override val symbol: Fir2IrConstructorSymbol,
|
||||||
) : AbstractFir2IrLazyDeclaration<FirConstructor, IrConstructor>(
|
) : IrConstructor, AbstractFir2IrLazyDeclaration<FirConstructor, IrConstructor>, Fir2IrComponents by components {
|
||||||
components, startOffset, endOffset, origin, fir, symbol
|
|
||||||
), IrConstructor {
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
classifierStorage.preCacheTypeParameters(fir)
|
classifierStorage.preCacheTypeParameters(fir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
override lateinit var typeParameters: List<IrTypeParameter>
|
||||||
|
override lateinit var parent: IrDeclarationParent
|
||||||
|
|
||||||
override val isPrimary: Boolean
|
override val isPrimary: Boolean
|
||||||
get() = fir.isPrimary
|
get() = fir.isPrimary
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
override val descriptor: ClassConstructorDescriptor
|
override val descriptor: ClassConstructorDescriptor
|
||||||
get() = super.descriptor as ClassConstructorDescriptor
|
get() = symbol.descriptor
|
||||||
|
|
||||||
override val symbol: Fir2IrConstructorSymbol
|
|
||||||
get() = super.symbol as Fir2IrConstructorSymbol
|
|
||||||
|
|
||||||
override val isInline: Boolean
|
override val isInline: Boolean
|
||||||
get() = fir.isInline
|
get() = fir.isInline
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.Fir2IrPropertySymbol
|
|||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.types.IrErrorType
|
import org.jetbrains.kotlin.ir.types.IrErrorType
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.isInterface
|
import org.jetbrains.kotlin.ir.util.isInterface
|
||||||
@@ -25,27 +26,25 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class Fir2IrLazyProperty(
|
class Fir2IrLazyProperty(
|
||||||
components: Fir2IrComponents,
|
components: Fir2IrComponents,
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
fir: FirProperty,
|
override val fir: FirProperty,
|
||||||
symbol: Fir2IrPropertySymbol,
|
override val symbol: Fir2IrPropertySymbol,
|
||||||
override val isFakeOverride: Boolean
|
override val isFakeOverride: Boolean
|
||||||
) : AbstractFir2IrLazyDeclaration<FirProperty, IrProperty>(
|
) : IrProperty, AbstractFir2IrLazyDeclaration<FirProperty, IrProperty>, Fir2IrComponents by components {
|
||||||
components, startOffset, endOffset, origin, fir, symbol
|
|
||||||
), IrProperty {
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
classifierStorage.preCacheTypeParameters(fir)
|
classifierStorage.preCacheTypeParameters(fir)
|
||||||
typeParameters = emptyList()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
override var typeParameters: List<IrTypeParameter> = emptyList()
|
||||||
|
override lateinit var parent: IrDeclarationParent
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
override val descriptor: PropertyDescriptor
|
override val descriptor: PropertyDescriptor
|
||||||
get() = super.descriptor as PropertyDescriptor
|
get() = symbol.descriptor
|
||||||
|
|
||||||
override val symbol: Fir2IrPropertySymbol
|
|
||||||
get() = super.symbol as Fir2IrPropertySymbol
|
|
||||||
|
|
||||||
override val isVar: Boolean
|
override val isVar: Boolean
|
||||||
get() = fir.isVar
|
get() = fir.isVar
|
||||||
|
|||||||
@@ -7,20 +7,18 @@ package org.jetbrains.kotlin.fir.lazy
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||||
import org.jetbrains.kotlin.fir.backend.declareThisReceiverParameter
|
import org.jetbrains.kotlin.fir.backend.declareThisReceiverParameter
|
||||||
import org.jetbrains.kotlin.fir.backend.generateOverriddenFunctionSymbols
|
import org.jetbrains.kotlin.fir.backend.generateOverriddenFunctionSymbols
|
||||||
import org.jetbrains.kotlin.fir.backend.toIrType
|
import org.jetbrains.kotlin.fir.backend.toIrType
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -28,21 +26,23 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class Fir2IrLazySimpleFunction(
|
class Fir2IrLazySimpleFunction(
|
||||||
components: Fir2IrComponents,
|
components: Fir2IrComponents,
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
fir: FirSimpleFunction,
|
override val fir: FirSimpleFunction,
|
||||||
firParent: FirRegularClass,
|
firParent: FirRegularClass,
|
||||||
symbol: Fir2IrSimpleFunctionSymbol,
|
override val symbol: Fir2IrSimpleFunctionSymbol,
|
||||||
override val isFakeOverride: Boolean
|
override val isFakeOverride: Boolean
|
||||||
) : AbstractFir2IrLazyDeclaration<FirSimpleFunction, IrSimpleFunction>(
|
) : IrSimpleFunction, AbstractFir2IrLazyDeclaration<FirSimpleFunction, IrSimpleFunction>, Fir2IrComponents by components {
|
||||||
components, startOffset, endOffset, origin, fir, symbol
|
|
||||||
), IrSimpleFunction {
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
classifierStorage.preCacheTypeParameters(fir)
|
classifierStorage.preCacheTypeParameters(fir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
override lateinit var typeParameters: List<IrTypeParameter>
|
||||||
|
override lateinit var parent: IrDeclarationParent
|
||||||
|
|
||||||
override val isTailrec: Boolean
|
override val isTailrec: Boolean
|
||||||
get() = fir.isTailRec
|
get() = fir.isTailRec
|
||||||
|
|
||||||
@@ -57,10 +57,7 @@ class Fir2IrLazySimpleFunction(
|
|||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
override val descriptor: FunctionDescriptor
|
override val descriptor: FunctionDescriptor
|
||||||
get() = super.descriptor as FunctionDescriptor
|
get() = symbol.descriptor
|
||||||
|
|
||||||
override val symbol: Fir2IrSimpleFunctionSymbol
|
|
||||||
get() = super.symbol as Fir2IrSimpleFunctionSymbol
|
|
||||||
|
|
||||||
override val isInline: Boolean
|
override val isInline: Boolean
|
||||||
get() = fir.isInline
|
get() = fir.isInline
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
@@ -17,12 +18,12 @@ import org.jetbrains.kotlin.metadata.deserialization.NameResolver
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
class IrLazyClass(
|
class IrLazyClass(
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrClassSymbol,
|
override val symbol: IrClassSymbol,
|
||||||
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
override val descriptor: ClassDescriptor,
|
override val descriptor: ClassDescriptor,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val kind: ClassKind,
|
override val kind: ClassKind,
|
||||||
@@ -35,16 +36,17 @@ class IrLazyClass(
|
|||||||
override val isInline: Boolean,
|
override val isInline: Boolean,
|
||||||
override val isExpect: Boolean,
|
override val isExpect: Boolean,
|
||||||
override val isFun: Boolean,
|
override val isFun: Boolean,
|
||||||
stubGenerator: DeclarationStubGenerator,
|
override val stubGenerator: DeclarationStubGenerator,
|
||||||
typeTranslator: TypeTranslator
|
override val typeTranslator: TypeTranslator
|
||||||
) :
|
) : IrClass, IrLazyDeclarationBase {
|
||||||
IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
|
|
||||||
IrClass {
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var parent: IrDeclarationParent by createLazyParent()
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
|
||||||
override var thisReceiver: IrValueParameter? by lazyVar {
|
override var thisReceiver: IrValueParameter? by lazyVar {
|
||||||
typeTranslator.buildWithScope(this) {
|
typeTranslator.buildWithScope(this) {
|
||||||
descriptor.thisAsReceiverParameter.generateReceiverParameterStub().apply { parent = this@IrLazyClass }
|
descriptor.thisAsReceiverParameter.generateReceiverParameterStub().apply { parent = this@IrLazyClass }
|
||||||
|
|||||||
+34
-20
@@ -8,10 +8,11 @@ package org.jetbrains.kotlin.ir.declarations.lazy
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||||
import org.jetbrains.kotlin.ir.util.withScope
|
import org.jetbrains.kotlin.ir.util.withScope
|
||||||
@@ -19,26 +20,39 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
class IrLazyConstructor(
|
class IrLazyConstructor(
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrConstructorSymbol,
|
override val symbol: IrConstructorSymbol,
|
||||||
override val descriptor: ClassConstructorDescriptor,
|
override val descriptor: ClassConstructorDescriptor,
|
||||||
name: Name,
|
override val name: Name,
|
||||||
visibility: Visibility,
|
override var visibility: Visibility,
|
||||||
isInline: Boolean,
|
override val isInline: Boolean,
|
||||||
isExternal: Boolean,
|
override val isExternal: Boolean,
|
||||||
override val isPrimary: Boolean,
|
override val isPrimary: Boolean,
|
||||||
isExpect: Boolean,
|
override val isExpect: Boolean,
|
||||||
stubGenerator: DeclarationStubGenerator,
|
override val stubGenerator: DeclarationStubGenerator,
|
||||||
typeTranslator: TypeTranslator
|
override val typeTranslator: TypeTranslator,
|
||||||
) :
|
) : IrConstructor, IrLazyFunctionBase {
|
||||||
IrLazyFunctionBase(
|
override var parent: IrDeclarationParent by createLazyParent()
|
||||||
startOffset, endOffset, origin, name,
|
|
||||||
visibility, isInline, isExternal, isExpect,
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
stubGenerator, typeTranslator
|
|
||||||
),
|
override var body: IrBody? = null
|
||||||
IrConstructor {
|
|
||||||
|
override var returnType: IrType by createReturnType()
|
||||||
|
|
||||||
|
override val initialSignatureFunction: IrFunction? by createInitialSignatureFunction()
|
||||||
|
|
||||||
|
override var dispatchReceiverParameter: IrValueParameter? by createReceiverParameter(descriptor.dispatchReceiverParameter)
|
||||||
|
|
||||||
|
override var extensionReceiverParameter: IrValueParameter? by createReceiverParameter(descriptor.extensionReceiverParameter)
|
||||||
|
|
||||||
|
override var valueParameters: List<IrValueParameter> by createValueParameters()
|
||||||
|
|
||||||
|
override var metadata: MetadataSource?
|
||||||
|
get() = null
|
||||||
|
set(_) = error("We should never need to store metadata of external declarations.")
|
||||||
|
|
||||||
override var typeParameters: List<IrTypeParameter> by lazyVar {
|
override var typeParameters: List<IrTypeParameter> by lazyVar {
|
||||||
typeTranslator.buildWithScope(this) {
|
typeTranslator.buildWithScope(this) {
|
||||||
|
|||||||
+18
-25
@@ -6,64 +6,57 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations.lazy
|
package org.jetbrains.kotlin.ir.declarations.lazy
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.IrElementBase
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
||||||
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
import kotlin.properties.ReadWriteProperty
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
abstract class IrLazyDeclarationBase(
|
interface IrLazyDeclarationBase : IrDeclaration {
|
||||||
startOffset: Int,
|
val stubGenerator: DeclarationStubGenerator
|
||||||
endOffset: Int,
|
val typeTranslator: TypeTranslator
|
||||||
override var origin: IrDeclarationOrigin,
|
|
||||||
private val stubGenerator: DeclarationStubGenerator,
|
|
||||||
protected val typeTranslator: TypeTranslator
|
|
||||||
) : IrElementBase(startOffset, endOffset), IrDeclaration {
|
|
||||||
override val factory: IrFactory
|
override val factory: IrFactory
|
||||||
get() = stubGenerator.symbolTable.irFactory
|
get() = stubGenerator.symbolTable.irFactory
|
||||||
|
|
||||||
protected fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
fun KotlinType.toIrType(): IrType =
|
||||||
|
typeTranslator.translateType(this)
|
||||||
|
|
||||||
protected fun ReceiverParameterDescriptor.generateReceiverParameterStub(): IrValueParameter =
|
fun ReceiverParameterDescriptor.generateReceiverParameterStub(): IrValueParameter =
|
||||||
factory.createValueParameter(
|
factory.createValueParameter(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(this),
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(this),
|
||||||
name, -1, type.toIrType(), null, isCrossinline = false, isNoinline = false
|
name, -1, type.toIrType(), null, isCrossinline = false, isNoinline = false
|
||||||
)
|
)
|
||||||
|
|
||||||
protected fun generateMemberStubs(memberScope: MemberScope, container: MutableList<IrDeclaration>) {
|
fun generateMemberStubs(memberScope: MemberScope, container: MutableList<IrDeclaration>) {
|
||||||
generateChildStubs(memberScope.getContributedDescriptors(), container)
|
generateChildStubs(memberScope.getContributedDescriptors(), container)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun generateChildStubs(descriptors: Collection<DeclarationDescriptor>, declarations: MutableList<IrDeclaration>) {
|
fun generateChildStubs(descriptors: Collection<DeclarationDescriptor>, declarations: MutableList<IrDeclaration>) {
|
||||||
descriptors.mapNotNullTo(declarations) { generateMemberStub(it) }
|
descriptors.mapNotNullTo(declarations) { descriptor ->
|
||||||
|
if (descriptor is DeclarationDescriptorWithVisibility && Visibilities.isPrivate(descriptor.visibility)) null
|
||||||
|
else stubGenerator.generateMemberStub(descriptor)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateMemberStub(descriptor: DeclarationDescriptor): IrDeclaration? {
|
fun createLazyAnnotations(): ReadWriteProperty<Any?, List<IrConstructorCall>> = lazyVar {
|
||||||
if (descriptor is DeclarationDescriptorWithVisibility && Visibilities.isPrivate(descriptor.visibility)) return null
|
|
||||||
return stubGenerator.generateMemberStub(descriptor)
|
|
||||||
}
|
|
||||||
|
|
||||||
override var parent: IrDeclarationParent by lazyVar {
|
|
||||||
createLazyParent()!!
|
|
||||||
}
|
|
||||||
|
|
||||||
override var annotations: List<IrConstructorCall> by lazyVar {
|
|
||||||
descriptor.annotations.mapNotNull(typeTranslator.constantValueGenerator::generateAnnotationConstructorCall).toMutableList()
|
descriptor.annotations.mapNotNull(typeTranslator.constantValueGenerator::generateAnnotationConstructorCall).toMutableList()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createLazyParent(): IrDeclarationParent? {
|
fun createLazyParent(): ReadWriteProperty<Any?, IrDeclarationParent> = lazyVar {
|
||||||
val currentDescriptor = descriptor
|
val currentDescriptor = descriptor
|
||||||
|
|
||||||
val containingDeclaration =
|
val containingDeclaration =
|
||||||
((currentDescriptor as? PropertyAccessorDescriptor)?.correspondingProperty ?: currentDescriptor).containingDeclaration
|
((currentDescriptor as? PropertyAccessorDescriptor)?.correspondingProperty ?: currentDescriptor).containingDeclaration
|
||||||
|
|
||||||
return when (containingDeclaration) {
|
when (containingDeclaration) {
|
||||||
is PackageFragmentDescriptor -> run {
|
is PackageFragmentDescriptor -> run {
|
||||||
val parent = this.takeUnless { it is IrClass }?.let {
|
val parent = this.takeUnless { it is IrClass }?.let {
|
||||||
stubGenerator.generateOrGetFacadeClass(descriptor)
|
stubGenerator.generateOrGetFacadeClass(descriptor)
|
||||||
|
|||||||
+12
-8
@@ -20,7 +20,9 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
|
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
@@ -29,20 +31,22 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
class IrLazyEnumEntryImpl(
|
class IrLazyEnumEntryImpl(
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrEnumEntrySymbol,
|
override val symbol: IrEnumEntrySymbol,
|
||||||
override val descriptor: ClassDescriptor,
|
override val descriptor: ClassDescriptor,
|
||||||
stubGenerator: DeclarationStubGenerator,
|
override val stubGenerator: DeclarationStubGenerator,
|
||||||
typeTranslator: TypeTranslator
|
override val typeTranslator: TypeTranslator,
|
||||||
) : IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
|
) : IrEnumEntry, IrLazyDeclarationBase {
|
||||||
IrEnumEntry {
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var parent: IrDeclarationParent by createLazyParent()
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
|
||||||
override val name: Name = symbol.descriptor.name
|
override val name: Name = symbol.descriptor.name
|
||||||
|
|
||||||
override var correspondingClass: IrClass? = null
|
override var correspondingClass: IrClass? = null
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
|||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||||
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
@@ -21,27 +22,27 @@ import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
|||||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
class IrLazyField(
|
class IrLazyField(
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrFieldSymbol,
|
override val symbol: IrFieldSymbol,
|
||||||
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
override val descriptor: PropertyDescriptor,
|
override val descriptor: PropertyDescriptor,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override var visibility: Visibility,
|
override var visibility: Visibility,
|
||||||
override val isFinal: Boolean,
|
override val isFinal: Boolean,
|
||||||
override val isExternal: Boolean,
|
override val isExternal: Boolean,
|
||||||
override val isStatic: Boolean,
|
override val isStatic: Boolean,
|
||||||
stubGenerator: DeclarationStubGenerator,
|
override val stubGenerator: DeclarationStubGenerator,
|
||||||
typeTranslator: TypeTranslator
|
override val typeTranslator: TypeTranslator,
|
||||||
) : IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
|
) : IrField, IrLazyDeclarationBase {
|
||||||
IrField {
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var parent: IrDeclarationParent by createLazyParent()
|
||||||
|
|
||||||
override var annotations: List<IrConstructorCall> by lazyVar {
|
override var annotations: List<IrConstructorCall> by lazyVar {
|
||||||
descriptor.backingField?.annotations
|
descriptor.backingField?.annotations
|
||||||
?.mapNotNullTo(mutableListOf(), typeTranslator.constantValueGenerator::generateAnnotationConstructorCall)
|
?.mapNotNullTo(mutableListOf(), typeTranslator.constantValueGenerator::generateAnnotationConstructorCall)
|
||||||
|
|||||||
+33
-14
@@ -10,8 +10,11 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||||
import org.jetbrains.kotlin.ir.util.withScope
|
import org.jetbrains.kotlin.ir.util.withScope
|
||||||
@@ -20,27 +23,44 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
|
|||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
class IrLazyFunction(
|
class IrLazyFunction(
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrSimpleFunctionSymbol,
|
override val symbol: IrSimpleFunctionSymbol,
|
||||||
override val descriptor: FunctionDescriptor,
|
override val descriptor: FunctionDescriptor,
|
||||||
name: Name,
|
override val name: Name,
|
||||||
visibility: Visibility,
|
override var visibility: Visibility,
|
||||||
override val modality: Modality,
|
override val modality: Modality,
|
||||||
isInline: Boolean,
|
override val isInline: Boolean,
|
||||||
isExternal: Boolean,
|
override val isExternal: Boolean,
|
||||||
override val isTailrec: Boolean,
|
override val isTailrec: Boolean,
|
||||||
override val isSuspend: Boolean,
|
override val isSuspend: Boolean,
|
||||||
isExpect: Boolean,
|
override val isExpect: Boolean,
|
||||||
override val isFakeOverride: Boolean,
|
override val isFakeOverride: Boolean,
|
||||||
override val isOperator: Boolean,
|
override val isOperator: Boolean,
|
||||||
override val isInfix: Boolean,
|
override val isInfix: Boolean,
|
||||||
stubGenerator: DeclarationStubGenerator,
|
override val stubGenerator: DeclarationStubGenerator,
|
||||||
typeTranslator: TypeTranslator
|
override val typeTranslator: TypeTranslator,
|
||||||
) :
|
) : IrSimpleFunction, IrLazyFunctionBase {
|
||||||
IrLazyFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, stubGenerator, typeTranslator),
|
override var parent: IrDeclarationParent by createLazyParent()
|
||||||
IrSimpleFunction {
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
|
||||||
|
override var body: IrBody? = null
|
||||||
|
|
||||||
|
override var returnType: IrType by createReturnType()
|
||||||
|
|
||||||
|
override val initialSignatureFunction: IrFunction? by createInitialSignatureFunction()
|
||||||
|
|
||||||
|
override var dispatchReceiverParameter: IrValueParameter? by createReceiverParameter(descriptor.dispatchReceiverParameter)
|
||||||
|
|
||||||
|
override var extensionReceiverParameter: IrValueParameter? by createReceiverParameter(descriptor.extensionReceiverParameter)
|
||||||
|
|
||||||
|
override var valueParameters: List<IrValueParameter> by createValueParameters()
|
||||||
|
|
||||||
|
override var metadata: MetadataSource?
|
||||||
|
get() = null
|
||||||
|
set(_) = error("We should never need to store metadata of external declarations.")
|
||||||
|
|
||||||
override var typeParameters: List<IrTypeParameter> by lazyVar {
|
override var typeParameters: List<IrTypeParameter> by lazyVar {
|
||||||
typeTranslator.buildWithScope(this) {
|
typeTranslator.buildWithScope(this) {
|
||||||
@@ -59,7 +79,6 @@ class IrLazyFunction(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override var overriddenSymbols: List<IrSimpleFunctionSymbol> by lazyVar {
|
override var overriddenSymbols: List<IrSimpleFunctionSymbol> by lazyVar {
|
||||||
descriptor.overriddenDescriptors.mapTo(arrayListOf()) {
|
descriptor.overriddenDescriptors.mapTo(arrayListOf()) {
|
||||||
stubGenerator.generateFunctionStub(it.original).symbol
|
stubGenerator.generateFunctionStub(it.original).symbol
|
||||||
|
|||||||
+29
-48
@@ -5,66 +5,47 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.declarations.lazy
|
package org.jetbrains.kotlin.ir.declarations.lazy
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||||
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import kotlin.properties.ReadOnlyProperty
|
||||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
import kotlin.properties.ReadWriteProperty
|
||||||
import org.jetbrains.kotlin.name.Name
|
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
interface IrLazyFunctionBase : IrLazyDeclarationBase, IrTypeParametersContainer {
|
||||||
abstract class IrLazyFunctionBase(
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
startOffset: Int,
|
override val descriptor: FunctionDescriptor
|
||||||
endOffset: Int,
|
|
||||||
origin: IrDeclarationOrigin,
|
|
||||||
override val name: Name,
|
|
||||||
override var visibility: Visibility,
|
|
||||||
override val isInline: Boolean,
|
|
||||||
override val isExternal: Boolean,
|
|
||||||
override val isExpect: Boolean,
|
|
||||||
stubGenerator: DeclarationStubGenerator,
|
|
||||||
typeTranslator: TypeTranslator
|
|
||||||
) :
|
|
||||||
IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
|
|
||||||
IrFunction {
|
|
||||||
|
|
||||||
val initialSignatureFunction: IrFunction? by lazyVar {
|
val initialSignatureFunction: IrFunction?
|
||||||
descriptor.initialSignatureDescriptor?.takeIf { it != descriptor }?.original?.let(stubGenerator::generateFunctionStub)
|
|
||||||
}
|
|
||||||
|
|
||||||
override var dispatchReceiverParameter: IrValueParameter? by lazyVar {
|
fun createInitialSignatureFunction(): ReadOnlyProperty<Any?, IrFunction?> =
|
||||||
typeTranslator.buildWithScope(this) {
|
lazyVar {
|
||||||
descriptor.dispatchReceiverParameter?.generateReceiverParameterStub()?.also { it.parent = this@IrLazyFunctionBase }
|
descriptor.initialSignatureDescriptor?.takeIf { it != descriptor }?.original?.let(stubGenerator::generateFunctionStub)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
override var extensionReceiverParameter: IrValueParameter? by lazyVar {
|
|
||||||
typeTranslator.buildWithScope(this) {
|
|
||||||
descriptor.extensionReceiverParameter?.generateReceiverParameterStub()?.also { it.parent = this@IrLazyFunctionBase }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override var valueParameters: List<IrValueParameter> by lazyVar {
|
fun createValueParameters(): ReadWriteProperty<Any?, List<IrValueParameter>> =
|
||||||
typeTranslator.buildWithScope(this) {
|
lazyVar {
|
||||||
descriptor.valueParameters.mapTo(arrayListOf()) {
|
typeTranslator.buildWithScope(this) {
|
||||||
stubGenerator.generateValueParameterStub(it).apply { parent = this@IrLazyFunctionBase }
|
descriptor.valueParameters.mapTo(arrayListOf()) {
|
||||||
|
stubGenerator.generateValueParameterStub(it).apply { parent = this@IrLazyFunctionBase }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final override var body: IrBody? = null
|
fun createReceiverParameter(parameter: ReceiverParameterDescriptor?): ReadWriteProperty<Any?, IrValueParameter?> =
|
||||||
|
lazyVar {
|
||||||
final override var returnType: IrType by lazyVar {
|
typeTranslator.buildWithScope(this) {
|
||||||
typeTranslator.buildWithScope(this) {
|
parameter?.generateReceiverParameterStub()?.also { it.parent = this@IrLazyFunctionBase }
|
||||||
descriptor.returnType!!.toIrType()
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
override var metadata: MetadataSource?
|
fun createReturnType(): ReadWriteProperty<Any?, IrType> =
|
||||||
get() = null
|
lazyVar {
|
||||||
set(_) = error("We should never need to store metadata of external declarations.")
|
typeTranslator.buildWithScope(this) {
|
||||||
|
descriptor.returnType!!.toIrType()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-10
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||||
@@ -17,12 +18,12 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.hasBackingField
|
import org.jetbrains.kotlin.resolve.hasBackingField
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
class IrLazyProperty(
|
class IrLazyProperty(
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrPropertySymbol,
|
override val symbol: IrPropertySymbol,
|
||||||
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
override val descriptor: PropertyDescriptor,
|
override val descriptor: PropertyDescriptor,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override var visibility: Visibility,
|
override var visibility: Visibility,
|
||||||
@@ -34,17 +35,18 @@ class IrLazyProperty(
|
|||||||
override val isExternal: Boolean,
|
override val isExternal: Boolean,
|
||||||
override val isExpect: Boolean,
|
override val isExpect: Boolean,
|
||||||
override val isFakeOverride: Boolean,
|
override val isFakeOverride: Boolean,
|
||||||
stubGenerator: DeclarationStubGenerator,
|
override val stubGenerator: DeclarationStubGenerator,
|
||||||
typeTranslator: TypeTranslator,
|
override val typeTranslator: TypeTranslator,
|
||||||
bindingContext: BindingContext? = null
|
bindingContext: BindingContext? = null
|
||||||
) :
|
) : IrProperty, IrLazyDeclarationBase {
|
||||||
IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
|
|
||||||
IrProperty {
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var parent: IrDeclarationParent by createLazyParent()
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
|
||||||
private val hasBackingField: Boolean =
|
private val hasBackingField: Boolean =
|
||||||
descriptor.hasBackingField(bindingContext) || stubGenerator.extensions.isPropertyWithPlatformField(descriptor)
|
descriptor.hasBackingField(bindingContext) || stubGenerator.extensions.isPropertyWithPlatformField(descriptor)
|
||||||
|
|
||||||
|
|||||||
+13
-14
@@ -8,36 +8,35 @@ package org.jetbrains.kotlin.ir.declarations.lazy
|
|||||||
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeAlias
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.withInitialIr
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
class IrLazyTypeAlias(
|
class IrLazyTypeAlias(
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrTypeAliasSymbol,
|
override val symbol: IrTypeAliasSymbol,
|
||||||
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
override val descriptor: TypeAliasDescriptor,
|
override val descriptor: TypeAliasDescriptor,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override var visibility: Visibility,
|
override var visibility: Visibility,
|
||||||
override val isActual: Boolean,
|
override val isActual: Boolean,
|
||||||
stubGenerator: DeclarationStubGenerator,
|
override val stubGenerator: DeclarationStubGenerator,
|
||||||
typeTranslator: TypeTranslator
|
override val typeTranslator: TypeTranslator,
|
||||||
) :
|
) : IrTypeAlias, IrLazyDeclarationBase {
|
||||||
IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
|
|
||||||
IrTypeAlias {
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var parent: IrDeclarationParent by createLazyParent()
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
|
||||||
override var typeParameters: List<IrTypeParameter> by lazyVar {
|
override var typeParameters: List<IrTypeParameter> by lazyVar {
|
||||||
descriptor.declaredTypeParameters.mapTo(arrayListOf()) {
|
descriptor.declaredTypeParameters.mapTo(arrayListOf()) {
|
||||||
stubGenerator.generateOrGetTypeParameterStub(it)
|
stubGenerator.generateOrGetTypeParameterStub(it)
|
||||||
|
|||||||
+12
-13
@@ -7,10 +7,8 @@ package org.jetbrains.kotlin.ir.declarations.lazy
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.withInitialIr
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
@@ -20,25 +18,26 @@ import org.jetbrains.kotlin.types.Variance
|
|||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
class IrLazyTypeParameter(
|
class IrLazyTypeParameter(
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrTypeParameterSymbol,
|
override val symbol: IrTypeParameterSymbol,
|
||||||
override val descriptor: TypeParameterDescriptor,
|
override val descriptor: TypeParameterDescriptor,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val index: Int,
|
override val index: Int,
|
||||||
override val isReified: Boolean,
|
override val isReified: Boolean,
|
||||||
override val variance: Variance,
|
override val variance: Variance,
|
||||||
stubGenerator: DeclarationStubGenerator,
|
override val stubGenerator: DeclarationStubGenerator,
|
||||||
typeTranslator: TypeTranslator
|
override val typeTranslator: TypeTranslator,
|
||||||
) :
|
) : IrTypeParameter, IrLazyDeclarationBase {
|
||||||
IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
|
|
||||||
IrTypeParameter {
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var parent: IrDeclarationParent by createLazyParent()
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
|
|
||||||
override val superTypes: MutableList<IrType> by lazy {
|
override val superTypes: MutableList<IrType> by lazy {
|
||||||
withInitialIr {
|
withInitialIr {
|
||||||
typeTranslator.buildWithScope(this.parent as IrTypeParametersContainer) {
|
typeTranslator.buildWithScope(this.parent as IrTypeParametersContainer) {
|
||||||
|
|||||||
@@ -6,12 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations.lazy
|
package org.jetbrains.kotlin.ir.declarations.lazy
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.withInitialIr
|
import org.jetbrains.kotlin.ir.declarations.withInitialIr
|
||||||
|
import kotlin.properties.ReadWriteProperty
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
fun <T> lazyVar(initializer: () -> T): UnsafeLazyVar<T> = UnsafeLazyVar(initializer)
|
fun <T> lazyVar(initializer: () -> T): ReadWriteProperty<Any?, T> = UnsafeLazyVar(initializer)
|
||||||
|
|
||||||
class UnsafeLazyVar<T>(initializer: () -> T) {
|
private class UnsafeLazyVar<T>(initializer: () -> T) : ReadWriteProperty<Any?, T> {
|
||||||
private var isInitialized = false;
|
private var isInitialized = false
|
||||||
private var initializer: (() -> T)? = initializer
|
private var initializer: (() -> T)? = initializer
|
||||||
private var _value: Any? = null
|
private var _value: Any? = null
|
||||||
|
|
||||||
@@ -28,10 +29,10 @@ class UnsafeLazyVar<T>(initializer: () -> T) {
|
|||||||
|
|
||||||
override fun toString(): String = if (isInitialized) value.toString() else "Lazy value not initialized yet."
|
override fun toString(): String = if (isInitialized) value.toString() else "Lazy value not initialized yet."
|
||||||
|
|
||||||
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = value
|
override fun getValue(thisRef: Any?, property: KProperty<*>): T = value
|
||||||
|
|
||||||
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
|
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
|
||||||
this._value = value
|
this._value = value
|
||||||
isInitialized = true
|
isInitialized = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user