[IR] Call IR declaration constructors with named parameters
When those classes become auto-generated, the order of constructor parameters will differ. This commit ensures they will still be resolved correctly. ^KT-65773 In Progress
This commit is contained in:
committed by
Space Team
parent
a005f2e75d
commit
92ff782815
+10
-3
@@ -296,9 +296,16 @@ class Fir2IrDeclarationStorage(
|
||||
name: Name,
|
||||
source: SourceElement,
|
||||
) : IrClassImpl(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrClassSymbolImpl(), name,
|
||||
ClassKind.CLASS, DescriptorVisibilities.PUBLIC, Modality.FINAL,
|
||||
source, IrFactoryImpl,
|
||||
startOffset = UNDEFINED_OFFSET,
|
||||
endOffset = UNDEFINED_OFFSET,
|
||||
origin = origin,
|
||||
symbol = IrClassSymbolImpl(),
|
||||
name = name,
|
||||
kind = ClassKind.CLASS,
|
||||
visibility = DescriptorVisibilities.PUBLIC,
|
||||
modality = Modality.FINAL,
|
||||
source = source,
|
||||
factory = IrFactoryImpl,
|
||||
)
|
||||
|
||||
private class NonCachedSourceFacadeContainerSource(
|
||||
|
||||
@@ -23,9 +23,16 @@ class JvmFileFacadeClass(
|
||||
source: SourceElement,
|
||||
private val deserializeIr: (IrClass) -> Boolean,
|
||||
) : IrClassImpl(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin,
|
||||
IrClassSymbolImpl(), name, ClassKind.CLASS, DescriptorVisibilities.PUBLIC, Modality.FINAL,
|
||||
source, IrFactoryImpl
|
||||
startOffset = UNDEFINED_OFFSET,
|
||||
endOffset = UNDEFINED_OFFSET,
|
||||
origin = origin,
|
||||
symbol = IrClassSymbolImpl(),
|
||||
name = name,
|
||||
kind = ClassKind.CLASS,
|
||||
visibility = DescriptorVisibilities.PUBLIC,
|
||||
modality = Modality.FINAL,
|
||||
source = source,
|
||||
factory = IrFactoryImpl
|
||||
), DeserializableClass {
|
||||
|
||||
private var irLoaded: Boolean? = null
|
||||
|
||||
+143
-20
@@ -34,7 +34,14 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
symbol: IrAnonymousInitializerSymbol,
|
||||
isStatic: Boolean,
|
||||
): IrAnonymousInitializer =
|
||||
IrAnonymousInitializerImpl(startOffset, endOffset, origin, symbol, isStatic, factory = this)
|
||||
IrAnonymousInitializerImpl(
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
isStatic = isStatic,
|
||||
factory = this
|
||||
)
|
||||
|
||||
override fun createClass(
|
||||
startOffset: Int,
|
||||
@@ -56,7 +63,15 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
source: SourceElement,
|
||||
): IrClass =
|
||||
IrClassImpl(
|
||||
startOffset, endOffset, origin, symbol, name, kind, visibility, modality, source,
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
kind = kind,
|
||||
visibility = visibility,
|
||||
modality = modality,
|
||||
source = source,
|
||||
factory = this
|
||||
).apply {
|
||||
this.isCompanion = isCompanion
|
||||
@@ -84,8 +99,18 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
containerSource: DeserializedContainerSource?,
|
||||
): IrConstructor =
|
||||
IrConstructorImpl(
|
||||
startOffset, endOffset, origin, symbol, name, visibility, isInline, isExternal, isPrimary, isExpect,
|
||||
containerSource, factory = this
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
visibility = visibility,
|
||||
isInline = isInline,
|
||||
isExternal = isExternal,
|
||||
isPrimary = isPrimary,
|
||||
isExpect = isExpect,
|
||||
containerSource = containerSource,
|
||||
factory = this
|
||||
).apply {
|
||||
if (returnType != IrUninitializedType) {
|
||||
this.returnType = returnType
|
||||
@@ -99,14 +124,26 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
name: Name,
|
||||
symbol: IrEnumEntrySymbol,
|
||||
): IrEnumEntry =
|
||||
IrEnumEntryImpl(startOffset, endOffset, origin, symbol, name, factory = this)
|
||||
IrEnumEntryImpl(
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
factory = this
|
||||
)
|
||||
|
||||
override fun createErrorDeclaration(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
descriptor: DeclarationDescriptor?,
|
||||
): IrErrorDeclaration =
|
||||
IrErrorDeclarationImpl(startOffset, endOffset, descriptor, factory = this)
|
||||
IrErrorDeclarationImpl(
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
_descriptor = descriptor,
|
||||
factory = this
|
||||
)
|
||||
|
||||
override fun createField(
|
||||
startOffset: Int,
|
||||
@@ -120,7 +157,19 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
isStatic: Boolean,
|
||||
isExternal: Boolean,
|
||||
): IrField =
|
||||
IrFieldImpl(startOffset, endOffset, origin, symbol, name, type, visibility, isFinal, isExternal, isStatic, factory = this)
|
||||
IrFieldImpl(
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
type = type,
|
||||
visibility = visibility,
|
||||
isFinal = isFinal,
|
||||
isExternal = isExternal,
|
||||
isStatic = isStatic,
|
||||
factory = this
|
||||
)
|
||||
|
||||
override fun createSimpleFunction(
|
||||
startOffset: Int,
|
||||
@@ -142,9 +191,23 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
isFakeOverride: Boolean,
|
||||
): IrSimpleFunction =
|
||||
IrFunctionImpl(
|
||||
startOffset, endOffset, origin, symbol, name, visibility, modality,
|
||||
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride,
|
||||
containerSource, factory = this
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
visibility = visibility,
|
||||
modality = modality,
|
||||
isInline = isInline,
|
||||
isExternal = isExternal,
|
||||
isTailrec = isTailrec,
|
||||
isSuspend = isSuspend,
|
||||
isOperator = isOperator,
|
||||
isInfix = isInfix,
|
||||
isExpect = isExpect,
|
||||
isFakeOverride = isFakeOverride,
|
||||
containerSource = containerSource,
|
||||
factory = this
|
||||
).apply {
|
||||
if (returnType != IrUninitializedType) {
|
||||
this.returnType = returnType
|
||||
@@ -199,7 +262,16 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
type: IrType,
|
||||
isVar: Boolean,
|
||||
): IrLocalDelegatedProperty =
|
||||
IrLocalDelegatedPropertyImpl(startOffset, endOffset, origin, symbol, name, type, isVar, factory = this)
|
||||
IrLocalDelegatedPropertyImpl(
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
type = type,
|
||||
isVar = isVar,
|
||||
factory = this
|
||||
)
|
||||
|
||||
override fun createProperty(
|
||||
startOffset: Int,
|
||||
@@ -219,9 +291,22 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
isFakeOverride: Boolean,
|
||||
): IrProperty =
|
||||
IrPropertyImpl(
|
||||
startOffset, endOffset, origin, symbol, name, visibility, modality,
|
||||
isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride,
|
||||
containerSource, factory = this
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
visibility = visibility,
|
||||
modality = modality,
|
||||
isVar = isVar,
|
||||
isConst = isConst,
|
||||
isLateinit = isLateinit,
|
||||
isDelegated = isDelegated,
|
||||
isExternal = isExternal,
|
||||
isExpect = isExpect,
|
||||
isFakeOverride = isFakeOverride,
|
||||
containerSource = containerSource,
|
||||
factory = this
|
||||
)
|
||||
|
||||
override fun createPropertyWithLateBinding(
|
||||
@@ -266,7 +351,17 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
isActual: Boolean,
|
||||
expandedType: IrType,
|
||||
): IrTypeAlias =
|
||||
IrTypeAliasImpl(startOffset, endOffset, symbol, name, visibility, expandedType, isActual, origin, factory = this)
|
||||
IrTypeAliasImpl(
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
visibility = visibility,
|
||||
expandedType = expandedType,
|
||||
isActual = isActual,
|
||||
origin = origin,
|
||||
factory = this
|
||||
)
|
||||
|
||||
override fun createTypeParameter(
|
||||
startOffset: Int,
|
||||
@@ -278,7 +373,17 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
index: Int,
|
||||
isReified: Boolean,
|
||||
): IrTypeParameter =
|
||||
IrTypeParameterImpl(startOffset, endOffset, origin, symbol, name, index, isReified, variance, factory = this)
|
||||
IrTypeParameterImpl(
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
index = index,
|
||||
isReified = isReified,
|
||||
variance = variance,
|
||||
factory = this
|
||||
)
|
||||
|
||||
override fun createValueParameter(
|
||||
startOffset: Int,
|
||||
@@ -295,8 +400,19 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
isHidden: Boolean,
|
||||
): IrValueParameter =
|
||||
IrValueParameterImpl(
|
||||
startOffset, endOffset, origin, symbol, name, index, type, varargElementType,
|
||||
isCrossinline, isNoinline, isHidden, isAssignable, factory = this
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
origin = origin,
|
||||
symbol = symbol,
|
||||
name = name,
|
||||
index = index,
|
||||
type = type,
|
||||
varargElementType = varargElementType,
|
||||
isCrossinline = isCrossinline,
|
||||
isNoinline = isNoinline,
|
||||
isHidden = isHidden,
|
||||
isAssignable = isAssignable,
|
||||
factory = this
|
||||
)
|
||||
|
||||
override fun createExpressionBody(
|
||||
@@ -304,11 +420,18 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
||||
endOffset: Int,
|
||||
expression: IrExpression,
|
||||
): IrExpressionBody =
|
||||
IrExpressionBodyImpl(startOffset, endOffset, expression)
|
||||
IrExpressionBodyImpl(
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset,
|
||||
expression = expression
|
||||
)
|
||||
|
||||
override fun createBlockBody(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
): IrBlockBody =
|
||||
IrBlockBodyImpl(startOffset, endOffset)
|
||||
IrBlockBodyImpl(
|
||||
startOffset = startOffset,
|
||||
endOffset = endOffset
|
||||
)
|
||||
}
|
||||
@@ -21,11 +21,16 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
|
||||
|
||||
@OptIn(IrImplementationDetail::class)
|
||||
val IrErrorClassImpl = IrClassImpl(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.ERROR_CLASS, IrClassSymbolImpl(),
|
||||
Name.special("<error>"), ClassKind.CLASS, DescriptorVisibilities.DEFAULT_VISIBILITY, Modality.FINAL,
|
||||
SourceElement.NO_SOURCE, IrFactoryImpl
|
||||
val IrErrorClassImpl: IrClass = IrFactoryImpl.createClass(
|
||||
startOffset = UNDEFINED_OFFSET,
|
||||
endOffset = UNDEFINED_OFFSET,
|
||||
origin = IrDeclarationOrigin.ERROR_CLASS,
|
||||
symbol = IrClassSymbolImpl(),
|
||||
name = Name.special("<error>"),
|
||||
kind = ClassKind.CLASS,
|
||||
visibility = DescriptorVisibilities.DEFAULT_VISIBILITY,
|
||||
modality = Modality.FINAL,
|
||||
source = SourceElement.NO_SOURCE,
|
||||
).apply {
|
||||
parent = ErrorFile
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user