From 248e09ff2c2683c69d534a180cd326f5c041a665 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 5 Oct 2018 11:57:15 +0300 Subject: [PATCH] Refactoring: ConstantConditionIfInspection Transform collectFixesAndRegisterProblem to just collectFixes --- .../ConstantConditionIfInspection.kt | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ConstantConditionIfInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ConstantConditionIfInspection.kt index 57989166695..3f981181c2e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ConstantConditionIfInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ConstantConditionIfInspection.kt @@ -26,38 +26,48 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class ConstantConditionIfInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { - return ifExpressionVisitor { expression -> collectFixesAndRegisterProblem(expression, holder) } + return ifExpressionVisitor { expression -> + val constantValue = expression.getConditionConstantValueIfAny() ?: return@ifExpressionVisitor + val fixes = collectFixes(expression, constantValue) + holder.registerProblem( + expression.condition!!, + "Condition is always '$constantValue'", + *fixes.toTypedArray() + ) + } } companion object { - private fun collectFixesAndRegisterProblem(expression: KtIfExpression, holder: ProblemsHolder?): List { - val condition = expression.condition ?: return emptyList() - - val context = condition.analyze(BodyResolveMode.PARTIAL_WITH_CFA) - val constantValue = condition.constantBooleanValue(context) ?: return emptyList() + private fun KtIfExpression.getConditionConstantValueIfAny(): Boolean? { + val context = condition?.analyze(BodyResolveMode.PARTIAL_WITH_CFA) ?: return null + return condition?.constantBooleanValue(context) + } + private fun collectFixes( + expression: KtIfExpression, + constantValue: Boolean? = expression.getConditionConstantValueIfAny() + ): List { + if (constantValue == null) return emptyList() val fixes = mutableListOf() if (expression.branch(constantValue) != null) { val keepBraces = expression.isElseIf() && expression.branch(constantValue) is KtBlockExpression - fixes += SimplifyFix(constantValue, expression.isUsedAsExpression(context), keepBraces) + fixes += SimplifyFix( + constantValue, + expression.isUsedAsExpression(expression.analyze(BodyResolveMode.PARTIAL_WITH_CFA)), + keepBraces + ) } if (!constantValue && expression.`else` == null) { fixes += RemoveFix() } - holder?.registerProblem( - condition, - "Condition is always '$constantValue'", - *fixes.toTypedArray() - ) - return fixes } fun applyFixIfSingle(ifExpression: KtIfExpression) { - collectFixesAndRegisterProblem(ifExpression, null).singleOrNull()?.applyFix(ifExpression) + collectFixes(ifExpression).singleOrNull()?.applyFix(ifExpression) } }