Lift return out refactoring: extract function for problem report

This commit is contained in:
Toshiaki Kameyama
2018-10-25 12:43:25 +03:00
committed by Mikhail Glukhikh
parent 3e6007e3d3
commit ad8c58d176
@@ -17,6 +17,8 @@
package org.jetbrains.kotlin.idea.inspections
import com.intellij.codeInspection.*
import com.intellij.codeInspection.ProblemHighlightType.GENERIC_ERROR_OR_WARNING
import com.intellij.codeInspection.ProblemHighlightType.INFORMATION
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils
@@ -38,44 +40,40 @@ class LiftReturnOrAssignmentInspection : AbstractKotlinInspection() {
if (foldableReturns?.isNotEmpty() == true) {
val hasOtherReturns = expression.anyDescendantOfType<KtReturnExpression> { it !in foldableReturns }
val isSerious = !hasOtherReturns && foldableReturns.size > 1
val verb = if (isSerious) "should" else "can"
val description = "Return $verb be lifted out of '${keyword.text}'"
holder.registerProblemWithoutOfflineInformation(
expression,
description,
isOnTheFly,
if (isSerious) ProblemHighlightType.GENERIC_ERROR_OR_WARNING
else ProblemHighlightType.INFORMATION,
keyword.textRange?.shiftRight(-expression.startOffset),
LiftReturnOutFix(keyword.text)
)
registerProblem(expression, keyword, isSerious, LiftReturnOutFix(keyword.text))
foldableReturns.forEach {
holder.registerProblemWithoutOfflineInformation(
expression,
description,
isOnTheFly,
ProblemHighlightType.INFORMATION,
it.returnKeyword.textRange?.shiftRight(-expression.startOffset),
LiftReturnOutFix(keyword.text)
)
registerProblem(expression, keyword, isSerious, LiftReturnOutFix(keyword.text), it, INFORMATION)
}
return
}
val assignmentNumber = BranchedFoldingUtils.getFoldableAssignmentNumber(expression)
if (assignmentNumber > 0) {
val verb = if (assignmentNumber > 1) "should" else "can"
holder.registerProblemWithoutOfflineInformation(
expression,
"Assignment $verb be lifted out of '${keyword.text}'",
isOnTheFly,
if (assignmentNumber > 1) ProblemHighlightType.GENERIC_ERROR_OR_WARNING
else ProblemHighlightType.INFORMATION,
keyword.textRange?.shiftRight(-expression.startOffset),
LiftAssignmentOutFix(keyword.text)
)
val isSerious = assignmentNumber > 1
registerProblem(expression, keyword, isSerious, LiftAssignmentOutFix(keyword.text))
}
}
private fun registerProblem(
expression: KtExpression,
keyword: PsiElement,
isSerious: Boolean,
fix: LocalQuickFix,
highlightElement: PsiElement = keyword,
highlightType: ProblemHighlightType = if (isSerious) GENERIC_ERROR_OR_WARNING else INFORMATION
) {
val subject = if (fix is LiftReturnOutFix) "Return" else "Assignment"
val verb = if (isSerious) "should" else "can"
holder.registerProblemWithoutOfflineInformation(
expression,
"$subject $verb be lifted out of '${keyword.text}'",
isOnTheFly,
highlightType,
highlightElement.textRange?.shiftRight(-expression.startOffset),
fix
)
}
override fun visitIfExpression(expression: KtIfExpression) {
super.visitIfExpression(expression)
visitIfOrWhenOrTry(expression, expression.ifKeyword)