Supported indexOf/lastIndexOf
This commit is contained in:
+35
-17
@@ -177,13 +177,14 @@ object FindTransformationMatcher : TransformationMatcher {
|
|||||||
private class SimpleGenerator(
|
private class SimpleGenerator(
|
||||||
override val functionName: String,
|
override val functionName: String,
|
||||||
private val inputVariable: KtCallableDeclaration,
|
private val inputVariable: KtCallableDeclaration,
|
||||||
private val filter: KtExpression?
|
private val filter: KtExpression?,
|
||||||
|
private val argument: KtExpression? = null
|
||||||
) : FindOperationGenerator {
|
) : FindOperationGenerator {
|
||||||
override val hasFilter: Boolean
|
override val hasFilter: Boolean
|
||||||
get() = filter != null
|
get() = filter != null
|
||||||
|
|
||||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
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,
|
stdlibFunName: String,
|
||||||
chainedCallGenerator: ChainedCallGenerator,
|
chainedCallGenerator: ChainedCallGenerator,
|
||||||
inputVariable: KtCallableDeclaration,
|
inputVariable: KtCallableDeclaration,
|
||||||
filter: KtExpression?
|
filter: KtExpression?,
|
||||||
|
argument: KtExpression? = null
|
||||||
): KtExpression {
|
): KtExpression {
|
||||||
return if (filter == null) {
|
return if (filter == null) {
|
||||||
chainedCallGenerator.generate("$stdlibFunName()")
|
if (argument != null) {
|
||||||
|
chainedCallGenerator.generate("$stdlibFunName($0)", argument)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
chainedCallGenerator.generate("$stdlibFunName()")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val lambda = generateLambda(inputVariable, filter)
|
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"?
|
//TODO: what if value when not found is not "-1"?
|
||||||
if (valueIfFound.isVariableReference(indexVariable) && valueIfNotFound.text == "-1") {
|
if (valueIfFound.isVariableReference(indexVariable) && valueIfNotFound.text == "-1") {
|
||||||
val functionName = if (findFirst) "indexOfFirst" else "indexOfLast"
|
val containsArgument = filter!!.isFilterForContainsOperation(inputVariable, loop)
|
||||||
return SimpleGenerator(functionName, inputVariable, filter)
|
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
|
return null
|
||||||
@@ -331,18 +350,17 @@ object FindTransformationMatcher : TransformationMatcher {
|
|||||||
if (filter != null) {
|
if (filter != null) {
|
||||||
val containsArgument = filter.isFilterForContainsOperation(inputVariable, loop)
|
val containsArgument = filter.isFilterForContainsOperation(inputVariable, loop)
|
||||||
if (containsArgument != null) {
|
if (containsArgument != null) {
|
||||||
return object: FindOperationGenerator {
|
val generator = SimpleGenerator("contains", inputVariable, null, containsArgument)
|
||||||
override val functionName: String
|
if (negated) {
|
||||||
get() = "contains"
|
return object: FindOperationGenerator by generator{
|
||||||
|
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||||
override val hasFilter: Boolean
|
return generator.generate(chainedCallGenerator).negate()
|
||||||
get() = false
|
}
|
||||||
|
|
||||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
|
||||||
val expression = chainedCallGenerator.generate("contains($0)", containsArgument)
|
|
||||||
return if (negated) expression.negate() else expression
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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