Cleanup code: BranchedFoldingUtils
This commit is contained in:
+27
-31
@@ -42,43 +42,39 @@ object BranchedFoldingUtils {
|
|||||||
return (branch?.lastBlockStatementOrThis() as? KtBinaryExpression)?.takeIf(::checkAssignment)
|
return (branch?.lastBlockStatementOrThis() as? KtBinaryExpression)?.takeIf(::checkAssignment)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getFoldableBranchedReturn(branch: KtExpression?): KtReturnExpression? {
|
fun getFoldableBranchedReturn(branch: KtExpression?): KtReturnExpression? =
|
||||||
return (branch?.lastBlockStatementOrThis() as? KtReturnExpression)?.takeIf { it.returnedExpression != null }
|
(branch?.lastBlockStatementOrThis() as? KtReturnExpression)?.takeIf { it.returnedExpression != null }
|
||||||
}
|
|
||||||
|
|
||||||
fun checkAssignmentsMatch(a1: KtBinaryExpression, a2: KtBinaryExpression): Boolean {
|
fun checkAssignmentsMatch(a1: KtBinaryExpression, a2: KtBinaryExpression): Boolean =
|
||||||
return 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 {
|
fun canFoldToAssignment(expression: KtExpression?): Boolean {
|
||||||
val assignments = mutableListOf<KtBinaryExpression>()
|
val assignments = mutableListOf<KtBinaryExpression>()
|
||||||
fun collectAssignmentsAndCheck(e: KtExpression?): Boolean {
|
fun collectAssignmentsAndCheck(e: KtExpression?): Boolean = when (e) {
|
||||||
return when (e) {
|
is KtWhenExpression -> {
|
||||||
is KtWhenExpression -> {
|
val entries = e.entries
|
||||||
val entries = e.entries
|
KtPsiUtil.checkWhenExpressionHasSingleElse(e) &&
|
||||||
KtPsiUtil.checkWhenExpressionHasSingleElse(e) &&
|
entries.isNotEmpty() &&
|
||||||
entries.isNotEmpty() &&
|
entries.all { entry ->
|
||||||
entries.all { entry ->
|
val assignment = getFoldableBranchedAssignment(entry.expression)?.run { assignments.add(this) }
|
||||||
val assignment = getFoldableBranchedAssignment(entry.expression)?.run { assignments.add(this) }
|
assignment != null || collectAssignmentsAndCheck(entry.expression?.lastBlockStatementOrThis())
|
||||||
assignment != null || collectAssignmentsAndCheck(entry.expression?.lastBlockStatementOrThis())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
is KtIfExpression -> {
|
|
||||||
val branches = e.branches
|
|
||||||
branches.size > 1 &&
|
|
||||||
(branches.lastOrNull()?.getStrictParentOfType<KtIfExpression>()?.`else` != null) &&
|
|
||||||
branches.all { branch ->
|
|
||||||
val assignment = getFoldableBranchedAssignment(branch)?.run { assignments.add(this) }
|
|
||||||
assignment != null || collectAssignmentsAndCheck(branch?.lastBlockStatementOrThis())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
is KtCallExpression -> {
|
|
||||||
e.analyze().getType(e)?.isNothing() ?: false
|
|
||||||
}
|
|
||||||
is KtBreakExpression, is KtContinueExpression,
|
|
||||||
is KtThrowExpression, is KtReturnExpression -> true
|
|
||||||
else -> false
|
|
||||||
}
|
}
|
||||||
|
is KtIfExpression -> {
|
||||||
|
val branches = e.branches
|
||||||
|
branches.size > 1 &&
|
||||||
|
(branches.lastOrNull()?.getStrictParentOfType<KtIfExpression>()?.`else` != null) &&
|
||||||
|
branches.all { branch ->
|
||||||
|
val assignment = getFoldableBranchedAssignment(branch)?.run { assignments.add(this) }
|
||||||
|
assignment != null || collectAssignmentsAndCheck(branch?.lastBlockStatementOrThis())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is KtCallExpression -> {
|
||||||
|
e.analyze().getType(e)?.isNothing() ?: false
|
||||||
|
}
|
||||||
|
is KtBreakExpression, is KtContinueExpression,
|
||||||
|
is KtThrowExpression, is KtReturnExpression -> true
|
||||||
|
else -> false
|
||||||
}
|
}
|
||||||
if (!collectAssignmentsAndCheck(expression)) return false
|
if (!collectAssignmentsAndCheck(expression)) return false
|
||||||
if (assignments.isEmpty()) return false
|
if (assignments.isEmpty()) return false
|
||||||
|
|||||||
Reference in New Issue
Block a user