diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/interfaces.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/interfaces.kt index f43e3d9bc48..b40941e91c7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/interfaces.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/interfaces.kt @@ -37,7 +37,6 @@ interface ChainedCallGenerator { * Base interface for recognized transformations of the sequence. Should always be either [SequenceTransformation] or [ResultTransformation] */ interface Transformation { - val inputVariable: KtCallableDeclaration val loop: KtForExpression val presentation: String 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 3374df3fb56..58e568796f7 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 @@ -33,9 +33,9 @@ import org.jetbrains.kotlin.renderer.render class AddToCollectionTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, + private val inputVariable: KtCallableDeclaration, private val targetCollection: KtExpression -) : ReplaceLoopResultTransformation(loop, inputVariable) { +) : ReplaceLoopResultTransformation(loop) { override fun mergeWithPrevious(previousTransformation: SequenceTransformation): ResultTransformation? { return when (previousTransformation) { @@ -120,7 +120,7 @@ class AddToCollectionTransformation( when { canChangeInitializerType(collectionInitialization, KotlinBuiltIns.FQ_NAMES.list, state.outerLoop) -> { val transformation = if (argumentIsInputVariable) { - AssignToListTransformation(state.outerLoop, state.inputVariable, collectionInitialization) + AssignToListTransformation(state.outerLoop, collectionInitialization) } else { val mapTransformation = MapTransformation(state.outerLoop, state.inputVariable, addOperationArgument) @@ -131,7 +131,7 @@ class AddToCollectionTransformation( canChangeInitializerType(collectionInitialization, KotlinBuiltIns.FQ_NAMES.mutableList, state.outerLoop) -> { if (argumentIsInputVariable) { - val transformation = AssignToMutableListTransformation(state.outerLoop, state.inputVariable, collectionInitialization) + val transformation = AssignToMutableListTransformation(state.outerLoop, collectionInitialization) return ResultTransformationMatch(transformation) } } @@ -141,11 +141,11 @@ class AddToCollectionTransformation( CollectionKind.SET -> { val assignToSetTransformation = when { canChangeInitializerType(collectionInitialization, KotlinBuiltIns.FQ_NAMES.set, state.outerLoop) -> { - AssignToSetTransformation(state.outerLoop, state.inputVariable/*TODO: it's not correct and it looks like not all transformations should have inputVariable*/, collectionInitialization) + AssignToSetTransformation(state.outerLoop, collectionInitialization) } canChangeInitializerType(collectionInitialization, KotlinBuiltIns.FQ_NAMES.mutableSet, state.outerLoop) -> { - AssignToMutableSetTransformation(state.outerLoop, state.inputVariable, collectionInitialization) + AssignToMutableSetTransformation(state.outerLoop, collectionInitialization) } else -> return null @@ -178,10 +178,10 @@ class AddToCollectionTransformation( class FilterToTransformation private constructor( loop: KtForExpression, - inputVariable: KtCallableDeclaration, + private val inputVariable: KtCallableDeclaration, private val targetCollection: KtExpression, private val filter: KtExpression -) : ReplaceLoopResultTransformation(loop, inputVariable) { +) : ReplaceLoopResultTransformation(loop) { override val presentation: String get() = "filterTo(){}" @@ -211,10 +211,10 @@ class FilterToTransformation private constructor( class AssignFilterToTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, + private val inputVariable: KtCallableDeclaration, targetCollectionInitialization: VariableInitialization, private val filter: KtExpression -) : AssignToVariableResultTransformation(loop, inputVariable, targetCollectionInitialization) { +) : AssignToVariableResultTransformation(loop, targetCollectionInitialization) { override val presentation: String get() = "filterTo(){}" @@ -227,10 +227,10 @@ class AssignFilterToTransformation( class MapToTransformation private constructor( loop: KtForExpression, - inputVariable: KtCallableDeclaration, + private val inputVariable: KtCallableDeclaration, private val targetCollection: KtExpression, private val mapping: KtExpression -) : ReplaceLoopResultTransformation(loop, inputVariable) { +) : ReplaceLoopResultTransformation(loop) { override val presentation: String get() = "mapTo(){}" @@ -260,10 +260,10 @@ class MapToTransformation private constructor( class AssignMapToTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, + private val inputVariable: KtCallableDeclaration, targetCollectionInitialization: VariableInitialization, private val mapping: KtExpression -) : AssignToVariableResultTransformation(loop, inputVariable, targetCollectionInitialization) { +) : AssignToVariableResultTransformation(loop, targetCollectionInitialization) { override val presentation: String get() = "mapTo(){}" @@ -276,10 +276,10 @@ class AssignMapToTransformation( class FlatMapToTransformation private constructor( loop: KtForExpression, - inputVariable: KtCallableDeclaration, + private val inputVariable: KtCallableDeclaration, private val targetCollection: KtExpression, private val transform: KtExpression -) : ReplaceLoopResultTransformation(loop, inputVariable) { +) : ReplaceLoopResultTransformation(loop) { override val presentation: String get() = "flatMapTo(){}" @@ -309,10 +309,10 @@ class FlatMapToTransformation private constructor( class AssignFlatMapToTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, + private val inputVariable: KtCallableDeclaration, targetCollectionInitialization: VariableInitialization, private val transform: KtExpression -) : AssignToVariableResultTransformation(loop, inputVariable, targetCollectionInitialization) { +) : AssignToVariableResultTransformation(loop, targetCollectionInitialization) { override val presentation: String get() = "flatMapTo(){}" @@ -325,9 +325,8 @@ class AssignFlatMapToTransformation( class AssignToListTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, initialization: VariableInitialization -) : AssignToVariableResultTransformation(loop, inputVariable, initialization) { +) : AssignToVariableResultTransformation(loop, initialization) { override val presentation: String get() = "toList()" @@ -344,9 +343,8 @@ class AssignToListTransformation( class AssignToMutableListTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, initialization: VariableInitialization -) : AssignToVariableResultTransformation(loop, inputVariable, initialization) { +) : AssignToVariableResultTransformation(loop, initialization) { override val presentation: String get() = "toMutableList()" @@ -358,9 +356,8 @@ class AssignToMutableListTransformation( class AssignToSetTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, initialization: VariableInitialization -) : AssignToVariableResultTransformation(loop, inputVariable, initialization) { +) : AssignToVariableResultTransformation(loop, initialization) { override val presentation: String get() = "toSet()" @@ -372,9 +369,8 @@ class AssignToSetTransformation( class AssignToMutableSetTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, initialization: VariableInitialization -) : AssignToVariableResultTransformation(loop, inputVariable, initialization) { +) : AssignToVariableResultTransformation(loop, initialization) { override val presentation: String get() = "toMutableSet()" diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/CountTransformation.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/CountTransformation.kt index 8fade26a3d7..7b3167188bf 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/CountTransformation.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/CountTransformation.kt @@ -28,10 +28,10 @@ import org.jetbrains.kotlin.psi.* class CountTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, + private val inputVariable: KtCallableDeclaration, initialization: VariableInitialization, private val filter: KtExpression? -) : AssignToVariableResultTransformation(loop, inputVariable, initialization) { +) : AssignToVariableResultTransformation(loop, initialization) { override fun mergeWithPrevious(previousTransformation: SequenceTransformation): ResultTransformation? { if (previousTransformation !is FilterTransformation) return null diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/FindAndAssignTransformation.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/FindAndAssignTransformation.kt index 66440e977b2..ea055bca560 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/FindAndAssignTransformation.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/FindAndAssignTransformation.kt @@ -22,22 +22,24 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.intentions.loopToCallChain.* import org.jetbrains.kotlin.idea.intentions.loopToCallChain.sequence.FilterTransformation import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.KtBinaryExpression +import org.jetbrains.kotlin.psi.KtBreakExpression +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtForExpression import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class FindAndAssignTransformation( loop: KtForExpression, - inputVariable: KtCallableDeclaration, private val generator: FindOperatorGenerator, initialization: VariableInitialization, private val filter: KtExpression? = null -) : AssignToVariableResultTransformation(loop, inputVariable, initialization) { +) : AssignToVariableResultTransformation(loop, initialization) { override fun mergeWithPrevious(previousTransformation: SequenceTransformation): ResultTransformation? { if (previousTransformation !is FilterTransformation) return null assert(filter == null) { "Should not happen because no 2 consecutive FilterTransformation's possible"} - return FindAndAssignTransformation(loop, previousTransformation.inputVariable, generator, initialization, previousTransformation.effectiveCondition()) + return FindAndAssignTransformation(loop, generator, initialization, previousTransformation.effectiveCondition()) } override val presentation: String @@ -102,7 +104,7 @@ class FindAndAssignTransformation( val generator = buildFindOperationGenerator(right, initialization.initializer, state.inputVariable, findFirst) ?: return null - val transformation = FindAndAssignTransformation(state.outerLoop, state.inputVariable, generator, initialization) + val transformation = FindAndAssignTransformation(state.outerLoop, generator, initialization) return ResultTransformationMatch(transformation) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/FindAndReturnTransformation.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/FindAndReturnTransformation.kt index 079fec15ee5..592bd413418 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/FindAndReturnTransformation.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/result/FindAndReturnTransformation.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.intentions.loopToCallChain.result import org.jetbrains.kotlin.idea.intentions.loopToCallChain.* import org.jetbrains.kotlin.idea.intentions.loopToCallChain.sequence.FilterTransformation -import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtForExpression import org.jetbrains.kotlin.psi.KtReturnExpression @@ -26,7 +25,6 @@ import org.jetbrains.kotlin.psi.psiUtil.PsiChildRange class FindAndReturnTransformation( override val loop: KtForExpression, - override val inputVariable: KtCallableDeclaration, private val generator: FindOperatorGenerator, private val endReturn: KtReturnExpression, private val filter: KtExpression? = null @@ -35,7 +33,7 @@ class FindAndReturnTransformation( override fun mergeWithPrevious(previousTransformation: SequenceTransformation): ResultTransformation? { if (previousTransformation !is FilterTransformation) return null assert(filter == null) { "Should not happen because no 2 consecutive FilterTransformation's possible"} - return FindAndReturnTransformation(loop, previousTransformation.inputVariable, generator, endReturn, previousTransformation.effectiveCondition()) + return FindAndReturnTransformation(loop, generator, endReturn, previousTransformation.effectiveCondition()) } override val commentSavingRange = PsiChildRange(loop.unwrapIfLabeled(), endReturn) @@ -85,7 +83,7 @@ class FindAndReturnTransformation( val generator = buildFindOperationGenerator(returnValueInLoop, returnValueAfterLoop, state.inputVariable, findFirst = true) ?: return null - val transformation = FindAndReturnTransformation(state.outerLoop, state.inputVariable, generator, returnAfterLoop) + val transformation = FindAndReturnTransformation(state.outerLoop, generator, returnAfterLoop) return ResultTransformationMatch(transformation) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FilterTransformation.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FilterTransformation.kt index 50be9170781..1444492f7e4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FilterTransformation.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FilterTransformation.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.psi.psiUtil.blockExpressionsOrSingle class FilterTransformation( override val loop: KtForExpression, - override val inputVariable: KtCallableDeclaration, + val inputVariable: KtCallableDeclaration, val condition: KtExpression, val isInverse: Boolean ) : SequenceTransformation { @@ -105,7 +105,7 @@ class FilterTransformation( ) { val typeRef = effectiveCondition.typeReference if (typeRef != null) { - return FilterIsInstanceTransformation(loop, inputVariable, typeRef) + return FilterIsInstanceTransformation(loop, typeRef) } } @@ -114,7 +114,7 @@ class FilterTransformation( && effectiveCondition.right.isNullExpression() && effectiveCondition.left.isSimpleName(inputVariable.nameAsSafeName) ) { - return FilterNotNullTransformation(loop, inputVariable) + return FilterNotNullTransformation(loop) } return FilterTransformation(loop, inputVariable, condition, isInverse) @@ -124,7 +124,6 @@ class FilterTransformation( class FilterIsInstanceTransformation( override val loop: KtForExpression, - override val inputVariable: KtCallableDeclaration, private val type: KtTypeReference ) : SequenceTransformation { @@ -139,10 +138,7 @@ class FilterIsInstanceTransformation( } } -class FilterNotNullTransformation( - override val loop: KtForExpression, - override val inputVariable: KtCallableDeclaration -) : SequenceTransformation { +class FilterNotNullTransformation(override val loop: KtForExpression) : SequenceTransformation { override val affectsIndex: Boolean get() = true diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FlatMapTransformation.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FlatMapTransformation.kt index 492efb13e9c..82d187ad9c0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FlatMapTransformation.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FlatMapTransformation.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class FlatMapTransformation( override val loop: KtForExpression, - override val inputVariable: KtCallableDeclaration, + val inputVariable: KtCallableDeclaration, val transform: KtExpression ) : SequenceTransformation { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/MapTransformation.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/MapTransformation.kt index 7b42e909d2b..d5248e5be1f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/MapTransformation.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/MapTransformation.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.psi.KtProperty class MapTransformation( override val loop: KtForExpression, - override val inputVariable: KtCallableDeclaration, + val inputVariable: KtCallableDeclaration, val mapping: KtExpression ) : SequenceTransformation { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/utils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/utils.kt index 440f3b47351..ad159a11d27 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/utils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/utils.kt @@ -312,10 +312,7 @@ fun KtExpression.detectInitializationBeforeLoop(loop: KtForExpression): Variable return VariableInitialization(variable, assignment, initializer) } -abstract class ReplaceLoopResultTransformation( - override val loop: KtForExpression, - final override val inputVariable: KtCallableDeclaration -): ResultTransformation { +abstract class ReplaceLoopResultTransformation(override val loop: KtForExpression): ResultTransformation { override val commentSavingRange = PsiChildRange.singleElement(loop.unwrapIfLabeled()) @@ -328,7 +325,6 @@ abstract class ReplaceLoopResultTransformation( abstract class AssignToVariableResultTransformation( override val loop: KtForExpression, - final override val inputVariable: KtCallableDeclaration, protected val initialization: VariableInitialization ) : ResultTransformation { @@ -353,7 +349,7 @@ abstract class AssignToVariableResultTransformation( class AssignSequenceTransformationResultTransformation( private val sequenceTransformation: SequenceTransformation, initialization: VariableInitialization -) : AssignToVariableResultTransformation(sequenceTransformation.loop, sequenceTransformation.inputVariable, initialization) { +) : AssignToVariableResultTransformation(sequenceTransformation.loop, initialization) { override val presentation: String get() = sequenceTransformation.presentation