diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt index 81312d40a38..4a460ea09ed 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt @@ -6,8 +6,9 @@ package org.jetbrains.kotlin.fir.lazy import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.fir.backend.* +import org.jetbrains.kotlin.fir.backend.Fir2IrComponents import org.jetbrains.kotlin.fir.backend.declareThisReceiverParameter +import org.jetbrains.kotlin.fir.backend.toIrType import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol @@ -19,8 +20,8 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl -import org.jetbrains.kotlin.ir.util.mapOptimized import org.jetbrains.kotlin.ir.util.transform +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name @@ -190,7 +191,7 @@ class Fir2IrLazyClass( override fun transformChildren(transformer: IrElementTransformer, data: D) { thisReceiver = thisReceiver?.transform(transformer, data) - typeParameters = typeParameters.mapOptimized { it.transform(transformer, data) } + typeParameters = typeParameters.transformIfNeeded(transformer, data) declarations.transform { it.transform(transformer, data) } } } \ No newline at end of file diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt index 77242fe8de8..de749bc62ee 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt @@ -20,8 +20,8 @@ import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.util.mapOptimized import org.jetbrains.kotlin.ir.util.parentClassOrNull +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name @@ -125,11 +125,11 @@ class Fir2IrLazyConstructor( } override fun transformChildren(transformer: IrElementTransformer, data: D) { - typeParameters = typeParameters.mapOptimized { it.transform(transformer, data) } + typeParameters = typeParameters.transformIfNeeded(transformer, data) dispatchReceiverParameter = dispatchReceiverParameter?.transform(transformer, data) extensionReceiverParameter = extensionReceiverParameter?.transform(transformer, data) - valueParameters = valueParameters.mapOptimized { it.transform(transformer, data) } + valueParameters = valueParameters.transformIfNeeded(transformer, data) body = body?.transform(transformer, data) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt index 567d1f71f00..fe92501c7e4 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.util.mapOptimized +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name @@ -147,11 +147,11 @@ class Fir2IrLazySimpleFunction( } override fun transformChildren(transformer: IrElementTransformer, data: D) { - typeParameters = typeParameters.mapOptimized { it.transform(transformer, data) } + typeParameters = typeParameters.transformIfNeeded(transformer, data) dispatchReceiverParameter = dispatchReceiverParameter?.transform(transformer, data) extensionReceiverParameter = extensionReceiverParameter?.transform(transformer, data) - valueParameters = valueParameters.mapOptimized { it.transform(transformer, data) } + valueParameters = valueParameters.transformIfNeeded(transformer, data) body = body?.transform(transformer, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt index c73d8044f1a..c22d17ede5e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.carriers.ClassCarrier import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.transform -import org.jetbrains.kotlin.ir.util.mapOptimized +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name @@ -177,7 +177,7 @@ class IrClassImpl( override fun transformChildren(transformer: IrElementTransformer, data: D) { thisReceiver = thisReceiver?.transform(transformer, data) - typeParameters = typeParameters.mapOptimized { it.transform(transformer, data) } + typeParameters = typeParameters.transformIfNeeded(transformer, data) declarations.transform { it.transform(transformer, data) } } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt index 54cbbd35fd4..582d6171d8d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.carriers.FunctionBaseCarrier import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType -import org.jetbrains.kotlin.ir.util.mapOptimized +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name @@ -144,12 +144,11 @@ abstract class IrFunctionBase>( } override fun transformChildren(transformer: IrElementTransformer, data: D) { - - typeParameters = typeParameters.mapOptimized { it.transform(transformer, data) } + typeParameters = typeParameters.transformIfNeeded(transformer, data) dispatchReceiverParameter = dispatchReceiverParameter?.transform(transformer, data) extensionReceiverParameter = extensionReceiverParameter?.transform(transformer, data) - valueParameters = valueParameters.mapOptimized { it.transform(transformer, data) } + valueParameters = valueParameters.transformIfNeeded(transformer, data) body = body?.transform(transformer, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt index 66506a80b5e..f23df27e301 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.impl.carriers.TypeAliasCarrier import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.util.mapOptimized +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name @@ -59,7 +59,7 @@ class IrTypeAliasImpl( } override fun transformChildren(transformer: IrElementTransformer, data: D) { - typeParameters = typeParameters.mapOptimized { it.transform(transformer, data) } + typeParameters = typeParameters.transformIfNeeded(transformer, data) } companion object { @@ -81,4 +81,4 @@ class IrTypeAliasImpl( origin ) } -} \ No newline at end of file +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt index e7c83052c62..ff79b9a047e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.ir.util.transform -import org.jetbrains.kotlin.ir.util.mapOptimized +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.metadata.ProtoBuf @@ -102,7 +102,7 @@ class IrLazyClass( override fun transformChildren(transformer: IrElementTransformer, data: D) { thisReceiver = thisReceiver?.transform(transformer, data) - typeParameters = typeParameters.mapOptimized { it.transform(transformer, data) } + typeParameters = typeParameters.transformIfNeeded(transformer, data) declarations.transform { it.transform(transformer, data) } } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt index 0db10584cde..b1919549944 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator import org.jetbrains.kotlin.ir.util.TypeTranslator -import org.jetbrains.kotlin.ir.util.mapOptimized +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name @@ -77,12 +77,12 @@ abstract class IrLazyFunctionBase( } override fun transformChildren(transformer: IrElementTransformer, data: D) { - typeParameters = typeParameters.mapOptimized { it.transform(transformer, data) } + typeParameters = typeParameters.transformIfNeeded(transformer, data) dispatchReceiverParameter = dispatchReceiverParameter?.transform(transformer, data) extensionReceiverParameter = extensionReceiverParameter?.transform(transformer, data) - valueParameters = valueParameters.mapOptimized { it.transform(transformer, data) } + valueParameters = valueParameters.transformIfNeeded(transformer, data) body = body?.transform(transformer, data) } -} \ No newline at end of file +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt index d6835bce796..b9b10f4935d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt @@ -16,7 +16,7 @@ import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator import org.jetbrains.kotlin.ir.util.TypeTranslator -import org.jetbrains.kotlin.ir.util.mapOptimized +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name @@ -63,6 +63,6 @@ class IrLazyTypeAlias( } override fun transformChildren(transformer: IrElementTransformer, data: D) { - typeParameters = typeParameters.mapOptimized { it.transform(transformer, data) } + typeParameters = typeParameters.transformIfNeeded(transformer, data) } -} \ No newline at end of file +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/transform.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/transform.kt index a9193e92429..8f9aca58b26 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/transform.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/transform.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclarationContainer +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer inline fun MutableList.transform(transformation: (T) -> IrElement) { forEachIndexed { i, item -> @@ -65,16 +66,17 @@ fun IrDeclarationContainer.transformDeclarationsFlat(transformation: (IrDeclarat } /** - * Similar to `map`. Return the same List instance if no element instances have changed. + * Transforms the list of elements with the given transformer. Return the same List instance if no element instances have changed. */ -inline fun List.mapOptimized(transformation: (T) -> IrElement): List { +fun List.transformIfNeeded(transformer: IrElementTransformer, data: D): List { var result: ArrayList? = null for ((i, item) in withIndex()) { - val transformed = transformation(item) as T + @Suppress("UNCHECKED_CAST") + val transformed = item.transform(transformer, data) as T if (transformed !== item && result == null) { result = ArrayList(this) } result?.set(i, transformed) } return result ?: this -} \ No newline at end of file +}