Supported indexOf/lastIndexOf
This commit is contained in:
+35
-17
@@ -177,13 +177,14 @@ object FindTransformationMatcher : TransformationMatcher {
|
||||
private class SimpleGenerator(
|
||||
override val functionName: String,
|
||||
private val inputVariable: KtCallableDeclaration,
|
||||
private val filter: KtExpression?
|
||||
private val filter: KtExpression?,
|
||||
private val argument: KtExpression? = null
|
||||
) : FindOperationGenerator {
|
||||
override val hasFilter: Boolean
|
||||
get() = filter != null
|
||||
|
||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||
return generateChainedCall(functionName, chainedCallGenerator, inputVariable, filter)
|
||||
return generateChainedCall(functionName, chainedCallGenerator, inputVariable, filter, argument)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,14 +192,25 @@ object FindTransformationMatcher : TransformationMatcher {
|
||||
stdlibFunName: String,
|
||||
chainedCallGenerator: ChainedCallGenerator,
|
||||
inputVariable: KtCallableDeclaration,
|
||||
filter: KtExpression?
|
||||
filter: KtExpression?,
|
||||
argument: KtExpression? = null
|
||||
): KtExpression {
|
||||
return if (filter == null) {
|
||||
chainedCallGenerator.generate("$stdlibFunName()")
|
||||
if (argument != null) {
|
||||
chainedCallGenerator.generate("$stdlibFunName($0)", argument)
|
||||
}
|
||||
else {
|
||||
chainedCallGenerator.generate("$stdlibFunName()")
|
||||
}
|
||||
}
|
||||
else {
|
||||
val lambda = generateLambda(inputVariable, filter)
|
||||
chainedCallGenerator.generate("$stdlibFunName $0:'{}'", lambda)
|
||||
if (argument != null) {
|
||||
chainedCallGenerator.generate("$stdlibFunName($0) $1:'{}'", argument, lambda)
|
||||
}
|
||||
else {
|
||||
chainedCallGenerator.generate("$stdlibFunName $0:'{}'", lambda)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,8 +234,15 @@ object FindTransformationMatcher : TransformationMatcher {
|
||||
|
||||
//TODO: what if value when not found is not "-1"?
|
||||
if (valueIfFound.isVariableReference(indexVariable) && valueIfNotFound.text == "-1") {
|
||||
val functionName = if (findFirst) "indexOfFirst" else "indexOfLast"
|
||||
return SimpleGenerator(functionName, inputVariable, filter)
|
||||
val containsArgument = filter!!.isFilterForContainsOperation(inputVariable, loop)
|
||||
if (containsArgument != null) {
|
||||
val functionName = if (findFirst) "indexOf" else "lastIndexOf"
|
||||
return SimpleGenerator(functionName, inputVariable, null, containsArgument)
|
||||
}
|
||||
else {
|
||||
val functionName = if (findFirst) "indexOfFirst" else "indexOfLast"
|
||||
return SimpleGenerator(functionName, inputVariable, filter)
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
@@ -331,18 +350,17 @@ object FindTransformationMatcher : TransformationMatcher {
|
||||
if (filter != null) {
|
||||
val containsArgument = filter.isFilterForContainsOperation(inputVariable, loop)
|
||||
if (containsArgument != null) {
|
||||
return object: FindOperationGenerator {
|
||||
override val functionName: String
|
||||
get() = "contains"
|
||||
|
||||
override val hasFilter: Boolean
|
||||
get() = false
|
||||
|
||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||
val expression = chainedCallGenerator.generate("contains($0)", containsArgument)
|
||||
return if (negated) expression.negate() else expression
|
||||
val generator = SimpleGenerator("contains", inputVariable, null, containsArgument)
|
||||
if (negated) {
|
||||
return object: FindOperationGenerator by generator{
|
||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||
return generator.generate(chainedCallGenerator).negate()
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
return generator
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
// WITH_RUNTIME
|
||||
// INTENTION_TEXT: "Replace with 'indexOf()'"
|
||||
fun foo(list: List<String>): Int {
|
||||
<caret>for ((index, s) in list.withIndex()) {
|
||||
if (s == "a") {
|
||||
return index
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// WITH_RUNTIME
|
||||
// INTENTION_TEXT: "Replace with 'indexOf()'"
|
||||
fun foo(list: List<String>): Int {
|
||||
<caret>return list.indexOf("a")
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// WITH_RUNTIME
|
||||
// INTENTION_TEXT: "Replace with 'lastIndexOf()'"
|
||||
fun foo(list: List<String>) {
|
||||
var result = -1
|
||||
<caret>for ((index, s) in list.withIndex()) {
|
||||
if (s == "a") {
|
||||
result = index
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// WITH_RUNTIME
|
||||
// INTENTION_TEXT: "Replace with 'lastIndexOf()'"
|
||||
fun foo(list: List<String>) {
|
||||
val <caret>result = list.lastIndexOf("a")
|
||||
}
|
||||
Reference in New Issue
Block a user