Transformation not necessary has real input variable
This commit is contained in:
@@ -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
|
||||
|
||||
+22
-26
@@ -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()"
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+7
-5
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-4
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-8
@@ -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
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user