IR: use IrFactory in fir2ir

This commit is contained in:
Alexander Udalov
2020-07-13 18:47:10 +02:00
parent 9356f87f28
commit 8c41ba8ee4
8 changed files with 49 additions and 82 deletions
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.descriptors.WrappedReceiverParameterDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedReceiverParameterDescriptor
import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrConst
@@ -42,7 +41,6 @@ import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrClassPublicSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrClassPublicSymbolImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
@@ -461,7 +459,7 @@ internal fun IrDeclarationParent.declareThisReceiverParameter(
return symbolTable.declareValueParameter( return symbolTable.declareValueParameter(
startOffset, endOffset, thisOrigin, receiverDescriptor, thisType startOffset, endOffset, thisOrigin, receiverDescriptor, thisType
) { symbol -> ) { symbol ->
IrValueParameterImpl( symbolTable.irFactory.createValueParameter(
startOffset, endOffset, thisOrigin, symbol, startOffset, endOffset, thisOrigin, symbol,
Name.special("<this>"), -1, thisType, Name.special("<this>"), -1, thisType,
varargElementType = null, isCrossinline = false, isNoinline = false varargElementType = null, isCrossinline = false, isNoinline = false
@@ -22,10 +22,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrEnumEntryImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrTypeAliasImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrTypeParameterImpl
import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor
import org.jetbrains.kotlin.ir.descriptors.WrappedEnumEntryDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedEnumEntryDescriptor
import org.jetbrains.kotlin.ir.descriptors.WrappedTypeAliasDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedTypeAliasDescriptor
@@ -195,7 +191,7 @@ class Fir2IrClassifierStorage(
preCacheTypeParameters(typeAlias) preCacheTypeParameters(typeAlias)
return typeAlias.convertWithOffsets { startOffset, endOffset -> return typeAlias.convertWithOffsets { startOffset, endOffset ->
declareIrTypeAlias(signature) { symbol -> declareIrTypeAlias(signature) { symbol ->
val irTypeAlias = IrTypeAliasImpl( val irTypeAlias = irFactory.createTypeAlias(
startOffset, endOffset, symbol, startOffset, endOffset, symbol,
typeAlias.name, typeAlias.visibility, typeAlias.name, typeAlias.visibility,
typeAlias.expandedTypeRef.toIrType(), typeAlias.expandedTypeRef.toIrType(),
@@ -235,7 +231,7 @@ class Fir2IrClassifierStorage(
val signature = if (regularClass.isLocal) null else signatureComposer.composeSignature(regularClass) val signature = if (regularClass.isLocal) null else signatureComposer.composeSignature(regularClass)
val irClass = regularClass.convertWithOffsets { startOffset, endOffset -> val irClass = regularClass.convertWithOffsets { startOffset, endOffset ->
declareIrClass(signature) { symbol -> declareIrClass(signature) { symbol ->
IrClassImpl( irFactory.createClass(
startOffset, startOffset,
endOffset, endOffset,
origin, origin,
@@ -278,7 +274,7 @@ class Fir2IrClassifierStorage(
val signature = null val signature = null
val result = anonymousObject.convertWithOffsets { startOffset, endOffset -> val result = anonymousObject.convertWithOffsets { startOffset, endOffset ->
declareIrClass(signature) { symbol -> declareIrClass(signature) { symbol ->
IrClassImpl( irFactory.createClass(
startOffset, endOffset, origin, symbol, name, startOffset, endOffset, origin, symbol, name,
// NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects // NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects
anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS, anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS,
@@ -312,7 +308,7 @@ class Fir2IrClassifierStorage(
val irTypeParameter = with(typeParameter) { val irTypeParameter = with(typeParameter) {
convertWithOffsets { startOffset, endOffset -> convertWithOffsets { startOffset, endOffset ->
symbolTable.declareGlobalTypeParameter(startOffset, endOffset, origin, descriptor) { symbol -> symbolTable.declareGlobalTypeParameter(startOffset, endOffset, origin, descriptor) { symbol ->
IrTypeParameterImpl( irFactory.createTypeParameter(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
name, if (index < 0) 0 else index, name, if (index < 0) 0 else index,
isReified, isReified,
@@ -393,7 +389,7 @@ class Fir2IrClassifierStorage(
return enumEntry.convertWithOffsets { startOffset, endOffset -> return enumEntry.convertWithOffsets { startOffset, endOffset ->
val signature = signatureComposer.composeSignature(enumEntry) val signature = signatureComposer.composeSignature(enumEntry)
val result = declareIrEnumEntry(signature) { symbol -> val result = declareIrEnumEntry(signature) { symbol ->
IrEnumEntryImpl( irFactory.createEnumEntry(
startOffset, endOffset, origin, symbol, enumEntry.name startOffset, endOffset, origin, symbol, enumEntry.name
).apply { ).apply {
declarationStorage.enterScope(this) declarationStorage.enterScope(this)
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.generators.CallAndReferenceGenerator import org.jetbrains.kotlin.fir.backend.generators.CallAndReferenceGenerator
import org.jetbrains.kotlin.fir.backend.generators.FakeOverrideGenerator import org.jetbrains.kotlin.fir.backend.generators.FakeOverrideGenerator
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.ir.declarations.IrFactory
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.SymbolTable
@@ -17,6 +18,7 @@ interface Fir2IrComponents {
val scopeSession: ScopeSession val scopeSession: ScopeSession
val symbolTable: SymbolTable val symbolTable: SymbolTable
val irBuiltIns: IrBuiltIns val irBuiltIns: IrBuiltIns
val irFactory: IrFactory
val classifierStorage: Fir2IrClassifierStorage val classifierStorage: Fir2IrClassifierStorage
val declarationStorage: Fir2IrDeclarationStorage val declarationStorage: Fir2IrDeclarationStorage
val typeConverter: Fir2IrTypeConverter val typeConverter: Fir2IrTypeConverter
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.backend.generators.FakeOverrideGenerator
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.signaturer.FirBasedSignatureComposer import org.jetbrains.kotlin.fir.signaturer.FirBasedSignatureComposer
import org.jetbrains.kotlin.fir.signaturer.FirMangler import org.jetbrains.kotlin.fir.signaturer.FirMangler
import org.jetbrains.kotlin.ir.declarations.IrFactory
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.SymbolTable
@@ -19,6 +20,7 @@ class Fir2IrComponentsStorage(
override val scopeSession: ScopeSession, override val scopeSession: ScopeSession,
override val symbolTable: SymbolTable, override val symbolTable: SymbolTable,
override val irBuiltIns: IrBuiltIns, override val irBuiltIns: IrBuiltIns,
override val irFactory: IrFactory,
mangler: FirMangler mangler: FirMangler
) : Fir2IrComponents { ) : Fir2IrComponents {
override lateinit var classifierStorage: Fir2IrClassifierStorage override lateinit var classifierStorage: Fir2IrClassifierStorage
@@ -218,7 +218,7 @@ class Fir2IrConverter(
val builtIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) val builtIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable)
FirBuiltinSymbols(builtIns, moduleDescriptor.builtIns, symbolTable) FirBuiltinSymbols(builtIns, moduleDescriptor.builtIns, symbolTable)
val sourceManager = PsiSourceManager() val sourceManager = PsiSourceManager()
val components = Fir2IrComponentsStorage(session, scopeSession, symbolTable, builtIns, mangler) val components = Fir2IrComponentsStorage(session, scopeSession, symbolTable, builtIns, irFactory, mangler)
val conversionScope = Fir2IrConversionScope() val conversionScope = Fir2IrConversionScope()
val classifierStorage = Fir2IrClassifierStorage(components) val classifierStorage = Fir2IrClassifierStorage(components)
val declarationStorage = Fir2IrDeclarationStorage(components, moduleDescriptor) val declarationStorage = Fir2IrDeclarationStorage(components, moduleDescriptor)
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.backend package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.KtNodeTypes
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.* import org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAMES
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirAnnotationContainer
@@ -26,20 +26,28 @@ import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyConstructor
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyProperty import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyProperty
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.isKFunctionInvoke
import org.jetbrains.kotlin.fir.symbols.Fir2IrConstructorSymbol
import org.jetbrains.kotlin.fir.symbols.Fir2IrPropertySymbol
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
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.declarations.impl.* import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl
import org.jetbrains.kotlin.ir.descriptors.* import org.jetbrains.kotlin.ir.descriptors.*
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrSyntheticBodyKind import org.jetbrains.kotlin.ir.expressions.IrSyntheticBodyKind
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.IrErrorType
import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -238,7 +246,7 @@ class Fir2IrDeclarationStorage(
symbolTable.declareValueParameter( symbolTable.declareValueParameter(
startOffset, endOffset, origin, descriptor, type startOffset, endOffset, origin, descriptor, type
) { symbol -> ) { symbol ->
IrValueParameterImpl( irFactory.createValueParameter(
startOffset, endOffset, IrDeclarationOrigin.DEFINED, symbol, startOffset, endOffset, IrDeclarationOrigin.DEFINED, symbol,
Name.special("<set-?>"), 0, type, Name.special("<set-?>"), 0, type,
varargElementType = null, varargElementType = null,
@@ -388,7 +396,7 @@ class Fir2IrDeclarationStorage(
val signature = if (isLocal) null else signatureComposer.composeSignature(function) val signature = if (isLocal) null else signatureComposer.composeSignature(function)
val created = function.convertWithOffsets { startOffset, endOffset -> val created = function.convertWithOffsets { startOffset, endOffset ->
val result = declareIrSimpleFunction(signature, simpleFunction?.containerSource) { symbol -> val result = declareIrSimpleFunction(signature, simpleFunction?.containerSource) { symbol ->
IrFunctionImpl( irFactory.createFunction(
startOffset, endOffset, updatedOrigin, symbol, startOffset, endOffset, updatedOrigin, symbol,
name, visibility, name, visibility,
simpleFunction?.modality ?: Modality.FINAL, simpleFunction?.modality ?: Modality.FINAL,
@@ -464,7 +472,7 @@ class Fir2IrDeclarationStorage(
val signature = if (isLocal) null else signatureComposer.composeSignature(constructor) val signature = if (isLocal) null else signatureComposer.composeSignature(constructor)
val created = constructor.convertWithOffsets { startOffset, endOffset -> val created = constructor.convertWithOffsets { startOffset, endOffset ->
declareIrConstructor(signature) { symbol -> declareIrConstructor(signature) { symbol ->
IrConstructorImpl( irFactory.createConstructor(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
Name.special("<init>"), constructor.visibility, Name.special("<init>"), constructor.visibility,
constructor.returnTypeRef.toIrType(), constructor.returnTypeRef.toIrType(),
@@ -517,7 +525,7 @@ class Fir2IrDeclarationStorage(
isGetter = !isSetter isGetter = !isSetter
) { symbol -> ) { symbol ->
val accessorReturnType = if (isSetter) irBuiltIns.unitType else propertyType val accessorReturnType = if (isSetter) irBuiltIns.unitType else propertyType
IrFunctionImpl( irFactory.createFunction(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
Name.special("<$prefix-${correspondingProperty.name}>"), Name.special("<$prefix-${correspondingProperty.name}>"),
propertyAccessor?.visibility ?: correspondingProperty.visibility, propertyAccessor?.visibility ?: correspondingProperty.visibility,
@@ -577,7 +585,7 @@ class Fir2IrDeclarationStorage(
return symbolTable.declareField( return symbolTable.declareField(
startOffset, endOffset, origin, descriptor, inferredType startOffset, endOffset, origin, descriptor, inferredType
) { symbol -> ) { symbol ->
IrFieldImpl( irFactory.createField(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
name, inferredType, name, inferredType,
visibility, isFinal = isFinal, visibility, isFinal = isFinal,
@@ -627,7 +635,7 @@ class Fir2IrDeclarationStorage(
val signature = if (isLocal) null else signatureComposer.composeSignature(property) val signature = if (isLocal) null else signatureComposer.composeSignature(property)
return property.convertWithOffsets { startOffset, endOffset -> return property.convertWithOffsets { startOffset, endOffset ->
val result = declareIrProperty(signature, property.containerSource) { symbol -> val result = declareIrProperty(signature, property.containerSource) { symbol ->
IrPropertyImpl( irFactory.createProperty(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
property.name, property.visibility, property.modality!!, property.name, property.visibility, property.modality!!,
isVar = property.isVar, isVar = property.isVar,
@@ -746,7 +754,7 @@ class Fir2IrDeclarationStorage(
startOffset, endOffset, startOffset, endOffset,
origin, descriptor, type origin, descriptor, type
) { symbol -> ) { symbol ->
IrFieldImpl( irFactory.createField(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
field.name, type, field.visibility, field.name, type, field.visibility,
isFinal = field.modality == Modality.FINAL, isFinal = field.modality == Modality.FINAL,
@@ -774,7 +782,7 @@ class Fir2IrDeclarationStorage(
symbolTable.declareValueParameter( symbolTable.declareValueParameter(
startOffset, endOffset, origin, descriptor, type startOffset, endOffset, origin, descriptor, type
) { symbol -> ) { symbol ->
IrValueParameterImpl( irFactory.createValueParameter(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
valueParameter.name, index, type, valueParameter.name, index, type,
if (!valueParameter.isVararg) null if (!valueParameter.isVararg) null
@@ -6,15 +6,9 @@
package org.jetbrains.kotlin.fir.backend.generators package org.jetbrains.kotlin.fir.backend.generators
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
import org.jetbrains.kotlin.descriptors.CallableDescriptor
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.fir.backend.* import org.jetbrains.kotlin.fir.backend.*
import org.jetbrains.kotlin.fir.backend.declareThisReceiverParameter import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
@@ -25,20 +19,16 @@ import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitIntTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitIntTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNullableAnyTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNullableAnyTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation
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.builders.IrGeneratorContextBase import org.jetbrains.kotlin.ir.builders.IrGeneratorContextBase
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
import org.jetbrains.kotlin.ir.descriptors.WrappedValueParameterDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedValueParameterDescriptor
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.DataClassMembersGenerator import org.jetbrains.kotlin.ir.util.DataClassMembersGenerator
import org.jetbrains.kotlin.ir.util.defaultType
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -245,23 +235,10 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) {
} }
val signature = if (classId.isLocal) null else components.signatureComposer.composeSignature(firFunction) val signature = if (classId.isLocal) null else components.signatureComposer.composeSignature(firFunction)
return components.declarationStorage.declareIrSimpleFunction(signature, null) { symbol -> return components.declarationStorage.declareIrSimpleFunction(signature, null) { symbol ->
IrFunctionImpl( components.irFactory.createFunction(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, symbol, name, Visibilities.PUBLIC, Modality.OPEN, returnType,
UNDEFINED_OFFSET, isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false,
origin, isFakeOverride = false, isOperator = false, isInfix = false,
symbol,
name,
Visibilities.PUBLIC,
Modality.OPEN,
returnType,
isInline = false,
isExternal = false,
isTailrec = false,
isSuspend = false,
isExpect = false,
isFakeOverride = false,
isOperator = false,
isInfix = false
).apply { ).apply {
if (otherParameterNeeded) { if (otherParameterNeeded) {
val irValueParameter = createSyntheticIrParameter( val irValueParameter = createSyntheticIrParameter(
@@ -288,23 +265,11 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) {
private fun createSyntheticIrParameter(irFunction: IrFunction, name: Name, type: IrType, index: Int = 0): IrValueParameter { private fun createSyntheticIrParameter(irFunction: IrFunction, name: Name, type: IrType, index: Int = 0): IrValueParameter {
val descriptor = WrappedValueParameterDescriptor() val descriptor = WrappedValueParameterDescriptor()
return components.symbolTable.declareValueParameter( return components.symbolTable.declareValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor, type
UNDEFINED_OFFSET,
origin,
descriptor,
type
) { symbol -> ) { symbol ->
IrValueParameterImpl( components.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, symbol, name, index, type, null,
UNDEFINED_OFFSET, isCrossinline = false, isNoinline = false
origin,
symbol,
name,
index,
type,
null,
isCrossinline = false,
isNoinline = false
) )
}.apply { }.apply {
parent = irFunction parent = irFunction
@@ -23,10 +23,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrTypeParameterImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
import org.jetbrains.kotlin.ir.descriptors.WrappedTypeParameterDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedTypeParameterDescriptor
@@ -115,7 +111,7 @@ internal class DelegatedMemberGenerator(
} == true } == true
lateinit var irTypeSubstitutor: IrTypeSubstitutor lateinit var irTypeSubstitutor: IrTypeSubstitutor
val delegateFunction = symbolTable.declareSimpleFunction(descriptor) { symbol -> val delegateFunction = symbolTable.declareSimpleFunction(descriptor) { symbol ->
IrFunctionImpl( irFactory.createFunction(
startOffset, startOffset,
endOffset, endOffset,
origin, origin,
@@ -146,7 +142,7 @@ internal class DelegatedMemberGenerator(
typeParameters += symbolTable.declareScopedTypeParameter( typeParameters += symbolTable.declareScopedTypeParameter(
startOffset, endOffset, origin, parameterDescriptor startOffset, endOffset, origin, parameterDescriptor
) { symbol -> ) { symbol ->
IrTypeParameterImpl( irFactory.createTypeParameter(
startOffset, startOffset,
endOffset, endOffset,
origin, origin,
@@ -176,7 +172,7 @@ internal class DelegatedMemberGenerator(
valueParameters += symbolTable.declareValueParameter( valueParameters += symbolTable.declareValueParameter(
startOffset, endOffset, origin, parameterDescriptor, substedType startOffset, endOffset, origin, parameterDescriptor, substedType
) { symbol -> ) { symbol ->
IrValueParameterImpl( irFactory.createValueParameter(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
valueParameter.name, valueParameter.index, substedType, valueParameter.name, valueParameter.index, substedType,
null, valueParameter.isCrossinline, valueParameter.isNoinline null, valueParameter.isCrossinline, valueParameter.isNoinline
@@ -282,7 +278,7 @@ internal class DelegatedMemberGenerator(
startOffset, endOffset, startOffset, endOffset,
IrDeclarationOrigin.DELEGATED_MEMBER, descriptor, superProperty.isDelegated IrDeclarationOrigin.DELEGATED_MEMBER, descriptor, superProperty.isDelegated
) { symbol -> ) { symbol ->
IrPropertyImpl( irFactory.createProperty(
startOffset, endOffset, IrDeclarationOrigin.DELEGATED_MEMBER, symbol, startOffset, endOffset, IrDeclarationOrigin.DELEGATED_MEMBER, symbol,
superProperty.name, superProperty.visibility, superProperty.name, superProperty.visibility,
modality, modality,