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
|
return
|
||||||
}
|
}
|
||||||
if (BranchedFoldingUtils.canFoldToAssignment(expression)) {
|
val assignmentNumber = BranchedFoldingUtils.getFoldableAssignmentNumber(expression)
|
||||||
|
if (assignmentNumber > 0) {
|
||||||
holder.registerProblem(
|
holder.registerProblem(
|
||||||
keyword,
|
keyword,
|
||||||
"Assignment can be lifted out of '${keyword.text}'",
|
"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)
|
LiftAssignmentOutFix(keyword.text)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-4
@@ -48,7 +48,7 @@ object BranchedFoldingUtils {
|
|||||||
fun checkAssignmentsMatch(a1: KtBinaryExpression, a2: KtBinaryExpression): Boolean =
|
fun checkAssignmentsMatch(a1: KtBinaryExpression, a2: KtBinaryExpression): Boolean =
|
||||||
a1.left?.text == a2.left?.text && a1.operationToken == a2.operationToken
|
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>()
|
val assignments = mutableListOf<KtBinaryExpression>()
|
||||||
fun collectAssignmentsAndCheck(e: KtExpression?): Boolean = when (e) {
|
fun collectAssignmentsAndCheck(e: KtExpression?): Boolean = when (e) {
|
||||||
is KtWhenExpression -> {
|
is KtWhenExpression -> {
|
||||||
@@ -76,10 +76,11 @@ object BranchedFoldingUtils {
|
|||||||
is KtThrowExpression, is KtReturnExpression -> true
|
is KtThrowExpression, is KtReturnExpression -> true
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
if (!collectAssignmentsAndCheck(expression)) return false
|
if (!collectAssignmentsAndCheck(expression)) return -1
|
||||||
if (assignments.isEmpty()) return false
|
if (assignments.isEmpty()) return 0
|
||||||
val firstAssignment = assignments.first()
|
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?>) =
|
private fun getFoldableReturnNumber(branches: List<KtExpression?>) =
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// HIGHLIGHT: INFORMATION
|
||||||
|
|
||||||
fun foo(): Int {
|
fun foo(): Int {
|
||||||
var res = 0
|
var res = 0
|
||||||
loop@ while (true) {
|
loop@ while (true) {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// HIGHLIGHT: INFORMATION
|
||||||
|
|
||||||
fun foo(): Int {
|
fun foo(): Int {
|
||||||
var res = 0
|
var res = 0
|
||||||
loop@ while (true) {
|
loop@ while (true) {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// HIGHLIGHT: GENERIC_ERROR_OR_WARNING
|
||||||
|
|
||||||
fun test(n: Int): String {
|
fun test(n: Int): String {
|
||||||
var res: String
|
var res: String
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// HIGHLIGHT: GENERIC_ERROR_OR_WARNING
|
||||||
|
|
||||||
fun test(n: Int): String {
|
fun test(n: Int): String {
|
||||||
var res: String
|
var res: String
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user