Code refactoring
This commit is contained in:
+14
-36
@@ -160,29 +160,25 @@ object FindTransformationMatcher : TransformationMatcher {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private interface FindOperationGenerator {
|
private abstract class FindOperationGenerator(
|
||||||
val functionName: String
|
val functionName: String,
|
||||||
|
val hasFilter: Boolean,
|
||||||
val hasFilter: Boolean
|
val chainCallCount: Int = 1
|
||||||
|
) {
|
||||||
|
constructor(other: FindOperationGenerator) : this(other.functionName, other.hasFilter, other.chainCallCount)
|
||||||
|
|
||||||
val presentation: String
|
val presentation: String
|
||||||
get() = functionName + (if (hasFilter) "{}" else "()")
|
get() = functionName + (if (hasFilter) "{}" else "()")
|
||||||
|
|
||||||
fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression
|
abstract fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression
|
||||||
|
|
||||||
val chainCallCount: Int
|
|
||||||
get() = 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class SimpleGenerator(
|
private class SimpleGenerator(
|
||||||
override val functionName: String,
|
functionName: String,
|
||||||
private val inputVariable: KtCallableDeclaration,
|
private val inputVariable: KtCallableDeclaration,
|
||||||
private val filter: KtExpression?,
|
private val filter: KtExpression?,
|
||||||
private val argument: KtExpression? = null
|
private val argument: KtExpression? = null
|
||||||
) : FindOperationGenerator {
|
) : FindOperationGenerator(functionName, filter != null) {
|
||||||
override val hasFilter: Boolean
|
|
||||||
get() = filter != null
|
|
||||||
|
|
||||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||||
return generateChainedCall(functionName, chainedCallGenerator, inputVariable, filter, argument)
|
return generateChainedCall(functionName, chainedCallGenerator, inputVariable, filter, argument)
|
||||||
}
|
}
|
||||||
@@ -257,7 +253,7 @@ object FindTransformationMatcher : TransformationMatcher {
|
|||||||
// we cannot use ?: if found value can be null
|
// we cannot use ?: if found value can be null
|
||||||
if (inputVariableCanHoldNull) return null
|
if (inputVariableCanHoldNull) return null
|
||||||
|
|
||||||
return object: FindOperationGenerator by this {
|
return object : FindOperationGenerator(this) {
|
||||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||||
val generated = this@useElvisOperatorIfNeeded.generate(chainedCallGenerator)
|
val generated = this@useElvisOperatorIfNeeded.generate(chainedCallGenerator)
|
||||||
return KtPsiFactory(generated).createExpressionByPattern("$0 ?: $1", generated, valueIfNotFound)
|
return KtPsiFactory(generated).createExpressionByPattern("$0 ?: $1", generated, valueIfNotFound)
|
||||||
@@ -289,16 +285,7 @@ object FindTransformationMatcher : TransformationMatcher {
|
|||||||
val receiver = qualifiedExpression.receiverExpression
|
val receiver = qualifiedExpression.receiverExpression
|
||||||
val selector = qualifiedExpression.selectorExpression
|
val selector = qualifiedExpression.selectorExpression
|
||||||
if (receiver.isVariableReference(inputVariable) && selector != null && !inputVariable.hasUsages(selector)) {
|
if (receiver.isVariableReference(inputVariable) && selector != null && !inputVariable.hasUsages(selector)) {
|
||||||
return object: FindOperationGenerator {
|
return object: FindOperationGenerator("firstOrNull", filter != null, chainCallCount = 2) {
|
||||||
override val functionName: String
|
|
||||||
get() = "firstOrNull"
|
|
||||||
|
|
||||||
override val hasFilter: Boolean
|
|
||||||
get() = filter != null
|
|
||||||
|
|
||||||
override val chainCallCount: Int
|
|
||||||
get() = 2
|
|
||||||
|
|
||||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||||
val findFirstCall = generateChainedCall(functionName, chainedCallGenerator, inputVariable, filter)
|
val findFirstCall = generateChainedCall(functionName, chainedCallGenerator, inputVariable, filter)
|
||||||
return chainedCallGenerator.generate("$0", selector, receiver = findFirstCall, safeCall = true)
|
return chainedCallGenerator.generate("$0", selector, receiver = findFirstCall, safeCall = true)
|
||||||
@@ -310,16 +297,7 @@ object FindTransformationMatcher : TransformationMatcher {
|
|||||||
// in case of nullable input variable we cannot distinguish by the result of "firstOrNull" whether nothing was found or 'null' was found
|
// in case of nullable input variable we cannot distinguish by the result of "firstOrNull" whether nothing was found or 'null' was found
|
||||||
if (inputVariableCanHoldNull) return null
|
if (inputVariableCanHoldNull) return null
|
||||||
|
|
||||||
return object: FindOperationGenerator {
|
return object : FindOperationGenerator("firstOrNull", filter != null, chainCallCount = 2 /* also includes "let" */) {
|
||||||
override val functionName: String
|
|
||||||
get() = "firstOrNull"
|
|
||||||
|
|
||||||
override val hasFilter: Boolean
|
|
||||||
get() = filter != null
|
|
||||||
|
|
||||||
override val chainCallCount: Int
|
|
||||||
get() = 2 // also includes "let"
|
|
||||||
|
|
||||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||||
val findFirstCall = generateChainedCall(functionName, chainedCallGenerator, inputVariable, filter)
|
val findFirstCall = generateChainedCall(functionName, chainedCallGenerator, inputVariable, filter)
|
||||||
val letBody = generateLambda(inputVariable, valueIfFound)
|
val letBody = generateLambda(inputVariable, valueIfFound)
|
||||||
@@ -330,7 +308,7 @@ object FindTransformationMatcher : TransformationMatcher {
|
|||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val generator = buildFoundFlagGenerator(loop, inputVariable, filter, negated = false)
|
val generator = buildFoundFlagGenerator(loop, inputVariable, filter, negated = false)
|
||||||
return object: FindOperationGenerator by generator {
|
return object : FindOperationGenerator(generator) {
|
||||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||||
val chainedCall = generator.generate(chainedCallGenerator)
|
val chainedCall = generator.generate(chainedCallGenerator)
|
||||||
return KtPsiFactory(chainedCall).createExpressionByPattern("if ($0) $1 else $2", chainedCall, valueIfFound, valueIfNotFound)
|
return KtPsiFactory(chainedCall).createExpressionByPattern("if ($0) $1 else $2", chainedCall, valueIfFound, valueIfNotFound)
|
||||||
@@ -352,7 +330,7 @@ object FindTransformationMatcher : TransformationMatcher {
|
|||||||
if (containsArgument != null) {
|
if (containsArgument != null) {
|
||||||
val generator = SimpleGenerator("contains", inputVariable, null, containsArgument)
|
val generator = SimpleGenerator("contains", inputVariable, null, containsArgument)
|
||||||
if (negated) {
|
if (negated) {
|
||||||
return object: FindOperationGenerator by generator{
|
return object : FindOperationGenerator(generator) {
|
||||||
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
override fun generate(chainedCallGenerator: ChainedCallGenerator): KtExpression {
|
||||||
return generator.generate(chainedCallGenerator).negate()
|
return generator.generate(chainedCallGenerator).negate()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user