Lift assignment out: do not highlight for exactly one assignment
Related to KT-14900
This commit is contained in:
@@ -42,11 +42,13 @@ class LiftReturnOrAssignmentInspection : AbstractKotlinInspection() {
|
||||
)
|
||||
return
|
||||
}
|
||||
if (BranchedFoldingUtils.canFoldToAssignment(expression)) {
|
||||
val assignmentNumber = BranchedFoldingUtils.getFoldableAssignmentNumber(expression)
|
||||
if (assignmentNumber > 0) {
|
||||
holder.registerProblem(
|
||||
keyword,
|
||||
"Assignment can be lifted out of '${keyword.text}'",
|
||||
ProblemHighlightType.GENERIC_ERROR_OR_WARNING,
|
||||
if (assignmentNumber > 1) ProblemHighlightType.GENERIC_ERROR_OR_WARNING
|
||||
else ProblemHighlightType.INFORMATION,
|
||||
LiftAssignmentOutFix(keyword.text)
|
||||
)
|
||||
}
|
||||
|
||||
+5
-4
@@ -48,7 +48,7 @@ object BranchedFoldingUtils {
|
||||
fun checkAssignmentsMatch(a1: KtBinaryExpression, a2: KtBinaryExpression): Boolean =
|
||||
a1.left?.text == a2.left?.text && a1.operationToken == a2.operationToken
|
||||
|
||||
fun canFoldToAssignment(expression: KtExpression?): Boolean {
|
||||
internal fun getFoldableAssignmentNumber(expression: KtExpression?): Int {
|
||||
val assignments = mutableListOf<KtBinaryExpression>()
|
||||
fun collectAssignmentsAndCheck(e: KtExpression?): Boolean = when (e) {
|
||||
is KtWhenExpression -> {
|
||||
@@ -76,10 +76,11 @@ object BranchedFoldingUtils {
|
||||
is KtThrowExpression, is KtReturnExpression -> true
|
||||
else -> false
|
||||
}
|
||||
if (!collectAssignmentsAndCheck(expression)) return false
|
||||
if (assignments.isEmpty()) return false
|
||||
if (!collectAssignmentsAndCheck(expression)) return -1
|
||||
if (assignments.isEmpty()) return 0
|
||||
val firstAssignment = assignments.first()
|
||||
return assignments.all { BranchedFoldingUtils.checkAssignmentsMatch(it, firstAssignment) }
|
||||
if (assignments.any { !BranchedFoldingUtils.checkAssignmentsMatch(it, firstAssignment) }) return -1
|
||||
return assignments.size
|
||||
}
|
||||
|
||||
private fun getFoldableReturnNumber(branches: List<KtExpression?>) =
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// HIGHLIGHT: INFORMATION
|
||||
|
||||
fun foo(): Int {
|
||||
var res = 0
|
||||
loop@ while (true) {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// HIGHLIGHT: INFORMATION
|
||||
|
||||
fun foo(): Int {
|
||||
var res = 0
|
||||
loop@ while (true) {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// HIGHLIGHT: GENERIC_ERROR_OR_WARNING
|
||||
|
||||
fun test(n: Int): String {
|
||||
var res: String
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// HIGHLIGHT: GENERIC_ERROR_OR_WARNING
|
||||
|
||||
fun test(n: Int): String {
|
||||
var res: String
|
||||
|
||||
|
||||
Reference in New Issue
Block a user