IR: use default parameters in Ir...Impl constructors

This commit is contained in:
Georgy Bronnikov
2020-04-21 22:36:51 +03:00
parent 9561cc8270
commit 1e8a660fda
9 changed files with 60 additions and 120 deletions
@@ -38,17 +38,17 @@ class IrClassImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrClassSymbol, override val symbol: IrClassSymbol,
override val name: Name, override val name: Name = symbol.descriptor.name,
override val kind: ClassKind, override val kind: ClassKind = symbol.descriptor.kind,
visibility: Visibility, visibility: Visibility = symbol.descriptor.visibility,
modality: Modality, modality: Modality = symbol.descriptor.modality,
override val isCompanion: Boolean, override val isCompanion: Boolean = symbol.descriptor.isCompanionObject,
override val isInner: Boolean, override val isInner: Boolean = symbol.descriptor.isInner,
override val isData: Boolean, override val isData: Boolean = symbol.descriptor.isData,
override val isExternal: Boolean, override val isExternal: Boolean = symbol.descriptor.isEffectivelyExternal(),
override val isInline: Boolean, override val isInline: Boolean = symbol.descriptor.isInline,
override val isExpect: Boolean, override val isExpect: Boolean = symbol.descriptor.isExpect,
override val isFun: Boolean override val isFun: Boolean = symbol.descriptor.isFun
) : ) :
IrDeclarationBase<ClassCarrier>(startOffset, endOffset, origin), IrDeclarationBase<ClassCarrier>(startOffset, endOffset, origin),
IrClass, IrClass,
@@ -32,13 +32,13 @@ class IrConstructorImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrConstructorSymbol, override val symbol: IrConstructorSymbol,
name: Name, name: Name = symbol.descriptor.name,
visibility: Visibility, visibility: Visibility = symbol.descriptor.visibility,
returnType: IrType, returnType: IrType,
isInline: Boolean, isInline: Boolean = symbol.descriptor.isInline,
isExternal: Boolean, isExternal: Boolean = symbol.descriptor.isEffectivelyExternal(),
override val isPrimary: Boolean, override val isPrimary: Boolean = symbol.descriptor.isPrimary,
isExpect: Boolean isExpect: Boolean = symbol.descriptor.isExpect
) : ) :
IrFunctionBase<ConstructorCarrier>( IrFunctionBase<ConstructorCarrier>(
startOffset, endOffset, origin, name, startOffset, endOffset, origin, name,
@@ -36,13 +36,13 @@ class IrFieldImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrFieldSymbol, override val symbol: IrFieldSymbol,
override val name: Name, override val name: Name = symbol.descriptor.name,
override val type: IrType, override val type: IrType,
override val visibility: Visibility, override val visibility: Visibility = symbol.descriptor.visibility,
override val isFinal: Boolean, override val isFinal: Boolean = !symbol.descriptor.isVar,
override val isExternal: Boolean, override val isExternal: Boolean = symbol.descriptor.isEffectivelyExternal(),
override val isStatic: Boolean, override val isStatic: Boolean = symbol.descriptor.dispatchReceiverParameter == null,
override val isFakeOverride: Boolean override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
) : IrDeclarationBase<FieldCarrier>(startOffset, endOffset, origin), ) : IrDeclarationBase<FieldCarrier>(startOffset, endOffset, origin),
IrField, IrField,
FieldCarrier { FieldCarrier {
@@ -23,17 +23,17 @@ class IrFunctionImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrSimpleFunctionSymbol, override val symbol: IrSimpleFunctionSymbol,
name: Name, name: Name = symbol.descriptor.name,
visibility: Visibility, visibility: Visibility = symbol.descriptor.visibility,
override val modality: Modality, override val modality: Modality = symbol.descriptor.modality,
returnType: IrType, returnType: IrType,
isInline: Boolean, isInline: Boolean = symbol.descriptor.isInline,
isExternal: Boolean, isExternal: Boolean = symbol.descriptor.isExternal,
override val isTailrec: Boolean, override val isTailrec: Boolean = symbol.descriptor.isTailrec,
override val isSuspend: Boolean, override val isSuspend: Boolean = symbol.descriptor.isSuspend,
override val isOperator: Boolean, override val isOperator: Boolean = symbol.descriptor.isOperator,
isExpect: Boolean, isExpect: Boolean = symbol.descriptor.isExpect,
override val isFakeOverride: Boolean override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
) : ) :
IrFunctionBase<FunctionCarrier>(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType), IrFunctionBase<FunctionCarrier>(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType),
IrSimpleFunction, IrSimpleFunction,
@@ -32,9 +32,9 @@ class IrLocalDelegatedPropertyImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrLocalDelegatedPropertySymbol, override val symbol: IrLocalDelegatedPropertySymbol,
override val name: Name, override val name: Name = symbol.descriptor.name,
override val type: IrType, override val type: IrType,
override val isVar: Boolean override val isVar: Boolean = symbol.descriptor.isVar
) : ) :
IrDeclarationBase<LocalDelegatedPropertyCarrier>(startOffset, endOffset, origin), IrDeclarationBase<LocalDelegatedPropertyCarrier>(startOffset, endOffset, origin),
IrLocalDelegatedProperty, IrLocalDelegatedProperty,
@@ -34,29 +34,15 @@ class IrTypeParameterImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrTypeParameterSymbol, override val symbol: IrTypeParameterSymbol,
override val name: Name, override val name: Name = symbol.descriptor.name,
override val index: Int, override val index: Int = symbol.descriptor.index,
override val isReified: Boolean, override val isReified: Boolean = symbol.descriptor.isReified,
override val variance: Variance override val variance: Variance = symbol.descriptor.variance
) : ) :
IrDeclarationBase<TypeParameterCarrier>(startOffset, endOffset, origin), IrDeclarationBase<TypeParameterCarrier>(startOffset, endOffset, origin),
IrTypeParameter, IrTypeParameter,
TypeParameterCarrier { TypeParameterCarrier {
constructor(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrTypeParameterSymbol
) :
this(
startOffset, endOffset, origin, symbol,
symbol.descriptor.name,
symbol.descriptor.index,
symbol.descriptor.isReified,
symbol.descriptor.variance
)
constructor( constructor(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
@@ -35,12 +35,12 @@ class IrValueParameterImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrValueParameterSymbol, override val symbol: IrValueParameterSymbol,
override val name: Name, override val name: Name = symbol.descriptor.name,
override val index: Int, override val index: Int = symbol.descriptor.safeAs<ValueParameterDescriptor>()?.index ?: -1,
override val type: IrType, override val type: IrType,
override val varargElementType: IrType?, override val varargElementType: IrType?,
override val isCrossinline: Boolean, override val isCrossinline: Boolean = symbol.descriptor.safeAs<ValueParameterDescriptor>()?.isCrossinline ?: false,
override val isNoinline: Boolean override val isNoinline: Boolean = symbol.descriptor.safeAs<ValueParameterDescriptor>()?.isNoinline ?: false
) : ) :
IrDeclarationBase<ValueParameterCarrier>(startOffset, endOffset, origin), IrDeclarationBase<ValueParameterCarrier>(startOffset, endOffset, origin),
IrValueParameter, IrValueParameter,
@@ -36,11 +36,11 @@ class IrVariableImpl(
override val endOffset: Int, override val endOffset: Int,
override var origin: IrDeclarationOrigin, override var origin: IrDeclarationOrigin,
override val symbol: IrVariableSymbol, override val symbol: IrVariableSymbol,
override val name: Name, override val name: Name = symbol.descriptor.name,
override val type: IrType, override val type: IrType,
override val isVar: Boolean, override val isVar: Boolean = symbol.descriptor.isVar,
override val isConst: Boolean, override val isConst: Boolean = symbol.descriptor.isConst,
override val isLateinit: Boolean override val isLateinit: Boolean = symbol.descriptor.isLateInit
) : IrVariable { ) : IrVariable {
private var _parent: IrDeclarationParent? = null private var _parent: IrDeclarationParent? = null
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.symbols.impl.* import org.jetbrains.kotlin.ir.symbols.impl.*
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
interface IrProvider { interface IrProvider {
@@ -87,7 +86,10 @@ interface ReferenceSymbolTable {
fun leaveScope(owner: DeclarationDescriptor) fun leaveScope(owner: DeclarationDescriptor)
} }
open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: NameProvider = NameProvider.DEFAULT) : ReferenceSymbolTable { open class SymbolTable(
val signaturer: IdSignatureComposer,
private val nameProvider: NameProvider = NameProvider.DEFAULT
) : ReferenceSymbolTable {
@Suppress("LeakingThis") @Suppress("LeakingThis")
val lazyWrapper = IrLazySymbolTable(this) val lazyWrapper = IrLazySymbolTable(this)
@@ -375,15 +377,8 @@ open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: Na
classFactory: (IrClassSymbol) -> IrClass = { classFactory: (IrClassSymbol) -> IrClass = {
IrClassImpl( IrClassImpl(
startOffset, endOffset, origin, it, startOffset, endOffset, origin, it,
nameProvider.nameForDeclaration(descriptor), descriptor.kind, nameProvider.nameForDeclaration(descriptor),
visibility, modality, visibility = visibility, modality = modality,
isCompanion = descriptor.isCompanionObject,
isInner = descriptor.isInner,
isData = descriptor.isData,
isExternal = descriptor.isExternal,
isInline = descriptor.isInline,
isExpect = descriptor.isExpect,
isFun = descriptor.isFun
).apply { metadata = MetadataSource.Class(it.descriptor) } ).apply { metadata = MetadataSource.Class(it.descriptor) }
} }
): IrClass { ): IrClass {
@@ -430,12 +425,7 @@ open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: Na
IrConstructorImpl( IrConstructorImpl(
startOffset, endOffset, origin, it, startOffset, endOffset, origin, it,
nameProvider.nameForDeclaration(descriptor), nameProvider.nameForDeclaration(descriptor),
descriptor.visibility, returnType = IrUninitializedType
returnType = IrUninitializedType,
isInline = descriptor.isInline,
isExternal = descriptor.isEffectivelyExternal(),
isPrimary = descriptor.isPrimary,
isExpect = descriptor.isExpect
).apply { ).apply {
metadata = MetadataSource.Function(it.descriptor) metadata = MetadataSource.Function(it.descriptor)
} }
@@ -530,10 +520,6 @@ open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: Na
startOffset, endOffset, origin, it, startOffset, endOffset, origin, it,
nameProvider.nameForDeclaration(descriptor), nameProvider.nameForDeclaration(descriptor),
type, visibility ?: it.descriptor.visibility, type, visibility ?: it.descriptor.visibility,
isFinal = !descriptor.isVar,
isExternal = descriptor.isExternal,
isStatic = descriptor.dispatchReceiverParameter == null,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
).apply { ).apply {
metadata = MetadataSource.Property(it.descriptor) metadata = MetadataSource.Property(it.descriptor)
} }
@@ -678,16 +664,7 @@ open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: Na
IrFunctionImpl( IrFunctionImpl(
startOffset, endOffset, origin, it, startOffset, endOffset, origin, it,
nameProvider.nameForDeclaration(descriptor), nameProvider.nameForDeclaration(descriptor),
returnType = IrUninitializedType, returnType = IrUninitializedType
visibility = descriptor.visibility,
modality = descriptor.modality,
isInline = descriptor.isInline,
isExternal = descriptor.isExternal,
isTailrec = descriptor.isTailrec,
isSuspend = descriptor.isSuspend,
isOperator = descriptor.isOperator,
isExpect = descriptor.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
).apply { ).apply {
metadata = MetadataSource.Function(it.descriptor) metadata = MetadataSource.Function(it.descriptor)
} }
@@ -739,11 +716,7 @@ open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: Na
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: TypeParameterDescriptor, descriptor: TypeParameterDescriptor,
typeParameterFactory: (IrTypeParameterSymbol) -> IrTypeParameter = { typeParameterFactory: (IrTypeParameterSymbol) -> IrTypeParameter = {
IrTypeParameterImpl( IrTypeParameterImpl(startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(descriptor))
startOffset, endOffset, origin, it,
nameProvider.nameForDeclaration(descriptor),
descriptor.index, descriptor.isReified, descriptor.variance
)
} }
): IrTypeParameter = ): IrTypeParameter =
globalTypeParameterSymbolTable.declare( globalTypeParameterSymbolTable.declare(
@@ -767,11 +740,7 @@ open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: Na
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: TypeParameterDescriptor, descriptor: TypeParameterDescriptor,
typeParameterFactory: (IrTypeParameterSymbol) -> IrTypeParameter = { typeParameterFactory: (IrTypeParameterSymbol) -> IrTypeParameter = {
IrTypeParameterImpl( IrTypeParameterImpl(startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(descriptor))
startOffset, endOffset, origin, it,
nameProvider.nameForDeclaration(descriptor),
descriptor.index, descriptor.isReified, descriptor.variance
)
} }
): IrTypeParameter = ): IrTypeParameter =
scopedTypeParameterSymbolTable.declare( scopedTypeParameterSymbolTable.declare(
@@ -799,14 +768,10 @@ open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: Na
type: IrType, type: IrType,
varargElementType: IrType? = null, varargElementType: IrType? = null,
valueParameterFactory: (IrValueParameterSymbol) -> IrValueParameter = { valueParameterFactory: (IrValueParameterSymbol) -> IrValueParameter = {
val valueParameterDescriptor = descriptor as? ValueParameterDescriptor
IrValueParameterImpl( IrValueParameterImpl(
startOffset, endOffset, origin, it, startOffset, endOffset, origin, it,
nameProvider.nameForDeclaration(descriptor), nameProvider.nameForDeclaration(descriptor),
valueParameterDescriptor?.index ?: -1, type = type, varargElementType = varargElementType,
type, varargElementType,
isCrossinline = valueParameterDescriptor?.isCrossinline ?: false,
isNoinline = valueParameterDescriptor?.isNoinline ?: false
) )
} }
): IrValueParameter = ): IrValueParameter =
@@ -843,14 +808,7 @@ open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: Na
descriptor: VariableDescriptor, descriptor: VariableDescriptor,
type: IrType, type: IrType,
variableFactory: (IrVariableSymbol) -> IrVariable = { variableFactory: (IrVariableSymbol) -> IrVariable = {
IrVariableImpl( IrVariableImpl(startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(descriptor), type)
startOffset, endOffset, origin, it,
nameProvider.nameForDeclaration(descriptor),
type,
isVar = descriptor.isVar,
isConst = descriptor.isConst,
isLateinit = descriptor.isLateInit
)
} }
): IrVariable = ): IrVariable =
@@ -885,11 +843,7 @@ open class SymbolTable(val signaturer: IdSignatureComposer, val nameProvider: Na
localDelegatedPropertySymbolTable.declareLocal( localDelegatedPropertySymbolTable.declareLocal(
descriptor, descriptor,
{ IrLocalDelegatedPropertySymbolImpl(descriptor) }, { IrLocalDelegatedPropertySymbolImpl(descriptor) },
{ { IrLocalDelegatedPropertyImpl(startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(descriptor), type) }
IrLocalDelegatedPropertyImpl(
startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(descriptor), type, descriptor.isVar
)
}
) )
fun referenceLocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) = fun referenceLocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) =