diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/baseTransformations.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/baseTransformations.kt index c08fb8b83fe..e961941fea8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/baseTransformations.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/baseTransformations.kt @@ -67,6 +67,19 @@ abstract class AssignToVariableResultTransformation( return initializationStatement } + + companion object { + fun createDelegated(delegate: ResultTransformation, initialization: VariableInitialization): AssignToVariableResultTransformation { + return object: AssignToVariableResultTransformation(delegate.loop, initialization) { + override val presentation: String + get() = delegate.presentation + + override fun generateCode(chainedCallGenerator: ChainedCallGenerator): KtExpression { + return delegate.generateCode(chainedCallGenerator) + } + } + } + } } class AssignSequenceTransformationResultTransformation( diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/AddToCollectionTransformation.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/AddToCollectionTransformation.kt index d4fe838f7bf..60852a127f8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/AddToCollectionTransformation.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/AddToCollectionTransformation.kt @@ -206,7 +206,8 @@ class FilterToTransformation private constructor( ): ResultTransformation { val initialization = targetCollection.detectInitializationBeforeLoop(loop, checkNoOtherUsagesInLoop = true) if (initialization != null && initialization.initializer.hasNoSideEffect()) { - return AssignFilterToTransformation(loop, inputVariable, initialization, filter) + val transformation = FilterToTransformation(loop, inputVariable, initialization.initializer, filter) + return AssignToVariableResultTransformation.createDelegated(transformation, initialization) } else { return FilterToTransformation(loop, inputVariable, targetCollection, filter) @@ -215,22 +216,6 @@ class FilterToTransformation private constructor( } } -class AssignFilterToTransformation( - loop: KtForExpression, - private val inputVariable: KtCallableDeclaration, - targetCollectionInitialization: VariableInitialization, - private val filter: KtExpression -) : AssignToVariableResultTransformation(loop, targetCollectionInitialization) { - - override val presentation: String - get() = "filterTo(){}" - - override fun generateCode(chainedCallGenerator: ChainedCallGenerator): KtExpression { - val lambda = generateLambda(inputVariable, filter) - return chainedCallGenerator.generate("filterTo($0) $1:'{}'", initialization.initializer, lambda) - } -} - class MapToTransformation private constructor( loop: KtForExpression, private val inputVariable: KtCallableDeclaration, @@ -255,7 +240,8 @@ class MapToTransformation private constructor( ): ResultTransformation { val initialization = targetCollection.detectInitializationBeforeLoop(loop, checkNoOtherUsagesInLoop = true) if (initialization != null && initialization.initializer.hasNoSideEffect()) { - return AssignMapToTransformation(loop, inputVariable, initialization, mapping) + val transformation = MapToTransformation(loop, inputVariable, initialization.initializer, mapping) + return AssignToVariableResultTransformation.createDelegated(transformation, initialization) } else { return MapToTransformation(loop, inputVariable, targetCollection, mapping) @@ -264,22 +250,6 @@ class MapToTransformation private constructor( } } -class AssignMapToTransformation( - loop: KtForExpression, - private val inputVariable: KtCallableDeclaration, - targetCollectionInitialization: VariableInitialization, - private val mapping: KtExpression -) : AssignToVariableResultTransformation(loop, targetCollectionInitialization) { - - override val presentation: String - get() = "mapTo(){}" - - override fun generateCode(chainedCallGenerator: ChainedCallGenerator): KtExpression { - val lambda = generateLambda(inputVariable, mapping) - return chainedCallGenerator.generate("mapTo($0) $1:'{}'", initialization.initializer, lambda) - } -} - class FlatMapToTransformation private constructor( loop: KtForExpression, private val inputVariable: KtCallableDeclaration, @@ -304,7 +274,8 @@ class FlatMapToTransformation private constructor( ): ResultTransformation { val initialization = targetCollection.detectInitializationBeforeLoop(loop, checkNoOtherUsagesInLoop = true) if (initialization != null && initialization.initializer.hasNoSideEffect()) { - return AssignFlatMapToTransformation(loop, inputVariable, initialization, transform) + val transformation = FlatMapToTransformation(loop, inputVariable, initialization.initializer, transform) + return AssignToVariableResultTransformation.createDelegated(transformation, initialization) } else { return FlatMapToTransformation(loop, inputVariable, targetCollection, transform) @@ -313,22 +284,6 @@ class FlatMapToTransformation private constructor( } } -class AssignFlatMapToTransformation( - loop: KtForExpression, - private val inputVariable: KtCallableDeclaration, - targetCollectionInitialization: VariableInitialization, - private val transform: KtExpression -) : AssignToVariableResultTransformation(loop, targetCollectionInitialization) { - - override val presentation: String - get() = "flatMapTo(){}" - - override fun generateCode(chainedCallGenerator: ChainedCallGenerator): KtExpression { - val lambda = generateLambda(inputVariable, transform) - return chainedCallGenerator.generate("flatMapTo($0) $1:'{}'", initialization.initializer, lambda) - } -} - class AssignToListTransformation( loop: KtForExpression, initialization: VariableInitialization