[IR] Reorder parameters in IrFactory#createProperty

This is to prepare for IrFactory auto-generation (KT-59308).
This commit is contained in:
Sergej Jaskiewicz
2023-06-14 12:53:40 +02:00
committed by Space Team
parent cd3237295b
commit 30cd2c3025
13 changed files with 103 additions and 64 deletions
@@ -929,16 +929,20 @@ class Fir2IrDeclarationStorage(
val result = declareIrProperty(signature) { symbol -> val result = declareIrProperty(signature) { symbol ->
classifierStorage.preCacheTypeParameters(property, symbol) classifierStorage.preCacheTypeParameters(property, symbol)
irFactory.createProperty( irFactory.createProperty(
startOffset, endOffset, origin, symbol, startOffset = startOffset,
property.name, components.visibilityConverter.convertToDescriptorVisibility(property.visibility), property.modality!!, endOffset = endOffset,
origin = origin,
name = property.name,
visibility = components.visibilityConverter.convertToDescriptorVisibility(property.visibility),
modality = property.modality!!,
symbol = symbol,
isVar = property.isVar, isVar = property.isVar,
isConst = property.isConst, isConst = property.isConst,
isLateinit = property.isLateInit, isLateinit = property.isLateInit,
isDelegated = property.delegate != null, isDelegated = property.delegate != null,
isExternal = property.isExternal, isExternal = property.isExternal,
isExpect = property.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
containerSource = property.containerSource, containerSource = property.containerSource,
isExpect = property.isExpect,
).apply { ).apply {
metadata = FirMetadataSource.Property(property) metadata = FirMetadataSource.Property(property)
convertAnnotationsForNonDeclaredMembers(property, origin) convertAnnotationsForNonDeclaredMembers(property, origin)
@@ -422,16 +422,19 @@ class IrDescriptorBasedFunctionFactory(
fun createFakeOverrideProperty(descriptor: PropertyDescriptor): IrProperty { fun createFakeOverrideProperty(descriptor: PropertyDescriptor): IrProperty {
return symbolTable.declareProperty(offset, offset, memberOrigin, descriptor) { return symbolTable.declareProperty(offset, offset, memberOrigin, descriptor) {
irFactory.createProperty( irFactory.createProperty(
offset, offset, memberOrigin, it, startOffset = offset,
endOffset = offset,
origin = memberOrigin,
name = descriptor.name, name = descriptor.name,
visibility = descriptor.visibility, visibility = descriptor.visibility,
modality = descriptor.modality, modality = descriptor.modality,
symbol = it,
isVar = descriptor.isVar, isVar = descriptor.isVar,
isConst = descriptor.isConst, isConst = descriptor.isConst,
isLateinit = descriptor.isLateInit, isLateinit = descriptor.isLateInit,
isDelegated = descriptor.isDelegated, isDelegated = descriptor.isDelegated,
isExternal = descriptor.isEffectivelyExternal(), isExternal = descriptor.isEffectivelyExternal(),
isExpect = descriptor.isExpect isExpect = descriptor.isExpect,
).apply { ).apply {
parent = this@addFakeOverrides parent = this@addFakeOverrides
getter = descriptor.getter?.let { g -> createFakeOverrideFunction(g, symbol) } getter = descriptor.getter?.let { g -> createFakeOverrideFunction(g, symbol) }
@@ -576,20 +576,19 @@ internal class ReflectionReferencesGenerator(statementGenerator: StatementGenera
val offset = UNDEFINED_OFFSET val offset = UNDEFINED_OFFSET
context.symbolTable.declareProperty(offset, offset, IrDeclarationOrigin.SYNTHETIC_JAVA_PROPERTY_DELEGATE, descriptor) { context.symbolTable.declareProperty(offset, offset, IrDeclarationOrigin.SYNTHETIC_JAVA_PROPERTY_DELEGATE, descriptor) {
context.irFactory.createProperty( context.irFactory.createProperty(
offset, startOffset = offset,
offset, endOffset = offset,
IrDeclarationOrigin.SYNTHETIC_JAVA_PROPERTY_DELEGATE, origin = IrDeclarationOrigin.SYNTHETIC_JAVA_PROPERTY_DELEGATE,
symbol, name = descriptor.name,
descriptor.name, visibility = descriptor.visibility,
descriptor.visibility, modality = descriptor.modality,
descriptor.modality, symbol = symbol,
descriptor.isVar, isVar = descriptor.isVar,
descriptor.isConst, isConst = descriptor.isConst,
descriptor.isLateInit, isLateinit = descriptor.isLateInit,
descriptor.isDelegated, isDelegated = descriptor.isDelegated,
descriptor.isExternal, isExternal = descriptor.isExternal,
descriptor.isExpect, isExpect = descriptor.isExpect,
isFakeOverride = false
).also { ).also {
it.parent = scope.getLocalDeclarationParent() it.parent = scope.getLocalDeclarationParent()
} }
@@ -242,16 +242,19 @@ internal class StandaloneDeclarationGenerator(private val context: GeneratorCont
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor, symbol: IrPropertySymbol startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor, symbol: IrPropertySymbol
): IrProperty { ): IrProperty {
val irProperty = irFactory.createProperty( val irProperty = irFactory.createProperty(
startOffset, endOffset, origin, symbol, startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = descriptor.name, name = descriptor.name,
visibility = descriptor.visibility, visibility = descriptor.visibility,
modality = descriptor.modality, modality = descriptor.modality,
symbol = symbol,
isVar = descriptor.isVar, isVar = descriptor.isVar,
isConst = descriptor.isConst, isConst = descriptor.isConst,
isLateinit = descriptor.isLateInit, isLateinit = descriptor.isLateInit,
isDelegated = false, isDelegated = false,
isExternal = descriptor.isEffectivelyExternal(), isExternal = descriptor.isEffectivelyExternal(),
isExpect = descriptor.isExpect isExpect = descriptor.isExpect,
) )
irProperty.metadata = DescriptorMetadataSource.Property(descriptor) irProperty.metadata = DescriptorMetadataSource.Property(descriptor)
@@ -98,11 +98,21 @@ fun IrClass.addField(
@PublishedApi @PublishedApi
internal fun IrFactory.buildProperty(builder: IrPropertyBuilder): IrProperty = with(builder) { internal fun IrFactory.buildProperty(builder: IrPropertyBuilder): IrProperty = with(builder) {
createProperty( createProperty(
startOffset, endOffset, origin, startOffset = startOffset,
IrPropertySymbolImpl(), endOffset = endOffset,
name, visibility, modality, origin = origin,
isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride, name = name,
containerSource, visibility = visibility,
modality = modality,
symbol = IrPropertySymbolImpl(),
isVar = isVar,
isConst = isConst,
isLateinit = isLateinit,
isDelegated = isDelegated,
isExternal = isExternal,
containerSource = containerSource,
isExpect = isExpect,
isFakeOverride = isFakeOverride,
) )
} }
@@ -139,18 +139,18 @@ interface IrFactory {
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
symbol: IrPropertySymbol,
name: Name, name: Name,
visibility: DescriptorVisibility, visibility: DescriptorVisibility,
modality: Modality, modality: Modality,
symbol: IrPropertySymbol,
isVar: Boolean, isVar: Boolean,
isConst: Boolean, isConst: Boolean,
isLateinit: Boolean, isLateinit: Boolean,
isDelegated: Boolean, isDelegated: Boolean,
isExternal: Boolean, isExternal: Boolean,
containerSource: DeserializedContainerSource? = null,
isExpect: Boolean = false, isExpect: Boolean = false,
isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE, isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
containerSource: DeserializedContainerSource? = null
): IrProperty ): IrProperty
fun createPropertyWithLateBinding( fun createPropertyWithLateBinding(
@@ -169,18 +169,18 @@ abstract class AbstractIrFactoryImpl : IrFactory {
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
symbol: IrPropertySymbol,
name: Name, name: Name,
visibility: DescriptorVisibility, visibility: DescriptorVisibility,
modality: Modality, modality: Modality,
symbol: IrPropertySymbol,
isVar: Boolean, isVar: Boolean,
isConst: Boolean, isConst: Boolean,
isLateinit: Boolean, isLateinit: Boolean,
isDelegated: Boolean, isDelegated: Boolean,
isExternal: Boolean, isExternal: Boolean,
containerSource: DeserializedContainerSource?,
isExpect: Boolean, isExpect: Boolean,
isFakeOverride: Boolean, isFakeOverride: Boolean,
containerSource: DeserializedContainerSource?,
): IrProperty = ): IrProperty =
IrPropertyImpl( IrPropertyImpl(
startOffset, endOffset, origin, symbol, name, visibility, modality, startOffset, endOffset, origin, symbol, name, visibility, modality,
@@ -258,35 +258,35 @@ class IrFactoryImplForJsIC(override val stageController: StageController) : Abst
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
symbol: IrPropertySymbol,
name: Name, name: Name,
visibility: DescriptorVisibility, visibility: DescriptorVisibility,
modality: Modality, modality: Modality,
symbol: IrPropertySymbol,
isVar: Boolean, isVar: Boolean,
isConst: Boolean, isConst: Boolean,
isLateinit: Boolean, isLateinit: Boolean,
isDelegated: Boolean, isDelegated: Boolean,
isExternal: Boolean, isExternal: Boolean,
containerSource: DeserializedContainerSource?,
isExpect: Boolean, isExpect: Boolean,
isFakeOverride: Boolean, isFakeOverride: Boolean
containerSource: DeserializedContainerSource?
): IrProperty { ): IrProperty {
return super.createProperty( return super.createProperty(
startOffset, startOffset,
endOffset, endOffset,
origin, origin,
symbol,
name, name,
visibility, visibility,
modality, modality,
symbol,
isVar, isVar,
isConst, isConst,
isLateinit, isLateinit,
isDelegated, isDelegated,
isExternal, isExternal,
containerSource,
isExpect, isExpect,
isFakeOverride, isFakeOverride,
containerSource,
).register() ).register()
} }
@@ -147,24 +147,37 @@ class LazyIrFactory(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
symbol: IrPropertySymbol,
name: Name, name: Name,
visibility: DescriptorVisibility, visibility: DescriptorVisibility,
modality: Modality, modality: Modality,
symbol: IrPropertySymbol,
isVar: Boolean, isVar: Boolean,
isConst: Boolean, isConst: Boolean,
isLateinit: Boolean, isLateinit: Boolean,
isDelegated: Boolean, isDelegated: Boolean,
isExternal: Boolean, isExternal: Boolean,
containerSource: DeserializedContainerSource?,
isExpect: Boolean, isExpect: Boolean,
isFakeOverride: Boolean, isFakeOverride: Boolean
containerSource: DeserializedContainerSource?
): IrProperty = if (symbol.isBound) ): IrProperty = if (symbol.isBound)
symbol.owner symbol.owner
else else
delegate.createProperty( delegate.createProperty(
startOffset, endOffset, origin, symbol, name, visibility, modality, startOffset,
isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride, containerSource endOffset,
origin,
name,
visibility,
modality,
symbol,
isVar,
isConst,
isLateinit,
isDelegated,
isExternal,
containerSource,
isExpect,
isFakeOverride,
) )
override fun createTypeAlias( override fun createTypeAlias(
@@ -235,19 +235,20 @@ open class DeepCopyIrTreeWithSymbols(
override fun visitProperty(declaration: IrProperty): IrProperty = override fun visitProperty(declaration: IrProperty): IrProperty =
declaration.factory.createProperty( declaration.factory.createProperty(
declaration.startOffset, declaration.endOffset, startOffset = declaration.startOffset,
mapDeclarationOrigin(declaration.origin), endOffset = declaration.endOffset,
symbolRemapper.getDeclaredProperty(declaration.symbol), origin = mapDeclarationOrigin(declaration.origin),
declaration.name, name = declaration.name,
declaration.visibility, visibility = declaration.visibility,
declaration.modality, modality = declaration.modality,
symbol = symbolRemapper.getDeclaredProperty(declaration.symbol),
isVar = declaration.isVar, isVar = declaration.isVar,
isConst = declaration.isConst, isConst = declaration.isConst,
isLateinit = declaration.isLateinit, isLateinit = declaration.isLateinit,
isDelegated = declaration.isDelegated, isDelegated = declaration.isDelegated,
isExternal = declaration.isExternal, isExternal = declaration.isExternal,
isExpect = declaration.isExpect,
containerSource = declaration.containerSource, containerSource = declaration.containerSource,
isExpect = declaration.isExpect,
).apply { ).apply {
transformAnnotations(declaration) transformAnnotations(declaration)
copyAttributes(declaration) copyAttributes(declaration)
@@ -798,16 +798,20 @@ open class SymbolTable(
isDelegated: Boolean = descriptor.isDelegated, isDelegated: Boolean = descriptor.isDelegated,
propertyFactory: (IrPropertySymbol) -> IrProperty = { symbol -> propertyFactory: (IrPropertySymbol) -> IrProperty = { symbol ->
irFactory.createProperty( irFactory.createProperty(
startOffset, endOffset, origin, symbol, name = nameProvider.nameForDeclaration(descriptor), startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = nameProvider.nameForDeclaration(descriptor),
visibility = descriptor.visibility, visibility = descriptor.visibility,
modality = descriptor.modality, modality = descriptor.modality,
symbol = symbol,
isVar = descriptor.isVar, isVar = descriptor.isVar,
isConst = descriptor.isConst, isConst = descriptor.isConst,
isLateinit = descriptor.isLateInit, isLateinit = descriptor.isLateInit,
isDelegated = isDelegated, isDelegated = isDelegated,
isExternal = descriptor.isEffectivelyExternal(), isExternal = descriptor.isEffectivelyExternal(),
isExpect = descriptor.isExpect, isExpect = descriptor.isExpect,
isFakeOverride = descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE isFakeOverride = descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE,
).apply { ).apply {
metadata = DescriptorMetadataSource.Property(symbol.descriptor) metadata = DescriptorMetadataSource.Property(symbol.descriptor)
} }
@@ -121,10 +121,10 @@ internal class MissingDeclarationStubGenerator(private val builtIns: IrBuiltIns)
startOffset = UNDEFINED_OFFSET, startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET,
origin = PartiallyLinkedDeclarationOrigin.MISSING_DECLARATION, origin = PartiallyLinkedDeclarationOrigin.MISSING_DECLARATION,
symbol = symbol,
name = symbol.guessName(), name = symbol.guessName(),
visibility = DescriptorVisibilities.DEFAULT_VISIBILITY, visibility = DescriptorVisibilities.DEFAULT_VISIBILITY,
modality = Modality.FINAL, modality = Modality.FINAL,
symbol = symbol,
isVar = false, isVar = false,
isConst = false, isConst = false,
isLateinit = false, isLateinit = false,
@@ -753,18 +753,20 @@ class IrDeclarationDeserializer(
val propertySymbol: IrPropertySymbol = symbol.checkSymbolType(PROPERTY_SYMBOL) val propertySymbol: IrPropertySymbol = symbol.checkSymbolType(PROPERTY_SYMBOL)
val prop = symbolTable.declareProperty(uniqId, { propertySymbol }) { val prop = symbolTable.declareProperty(uniqId, { propertySymbol }) {
irFactory.createProperty( irFactory.createProperty(
startOffset, endOffset, origin, startOffset = startOffset,
it, endOffset = endOffset,
deserializeName(proto.name), origin = origin,
flags.visibility, name = deserializeName(proto.name),
flags.modality, visibility = flags.visibility,
flags.isVar, modality = flags.modality,
flags.isConst, symbol = it,
flags.isLateinit, isVar = flags.isVar,
flags.isDelegated, isConst = flags.isConst,
flags.isExternal || isEffectivelyExternal, isLateinit = flags.isLateinit,
flags.isExpect, isDelegated = flags.isDelegated,
flags.isFakeOverride isExternal = flags.isExternal || isEffectivelyExternal,
isExpect = flags.isExpect,
isFakeOverride = flags.isFakeOverride,
) )
} }