Refactor clauseReplaceableBySafeCall (if-then to safe access)

This commit is contained in:
Mikhail Glukhikh
2018-09-07 16:29:02 +03:00
parent 485e098ced
commit 9ab8f3d7b5
2 changed files with 11 additions and 9 deletions
@@ -86,15 +86,11 @@ class IfThenToSafeAccessInspection : AbstractApplicabilityBasedInspection<KtIfEx
baseClause == null -> false
negatedClause == null && baseClause.isUsedAsExpression(context) -> false
negatedClause != null && !negatedClause.isNullExpression() -> false
else -> baseClause.evaluatesTo(receiverExpression) || baseClause.hasFirstReceiverOf(receiverExpression) ||
receiverExpression is KtThisExpression && getImplicitReceiver()?.let { it.type == receiverExpression.getType(context) } == true ||
replaceableCallExpression()
}
private fun IfThenToSelectData.replaceableCallExpression(): Boolean {
val callExpression = baseClause as? KtCallExpression ?: return false
val arguments = callExpression.valueArguments.map { it.getArgumentExpression() }
return arguments.any { it?.evaluatesTo(receiverExpression) == true } && arguments.all { it is KtNameReferenceExpression }
baseClause.evaluatesTo(receiverExpression) -> true
baseClause.hasFirstReceiverOf(receiverExpression) -> true
baseClause.anyArgumentEvaluatesTo(receiverExpression) -> true
receiverExpression is KtThisExpression -> getImplicitReceiver()?.let { it.type == receiverExpression.getType(context) } == true
else -> false
}
private fun KtSafeQualifiedExpression.renameLetParameter(editor: Editor) {
@@ -106,6 +106,12 @@ fun KtThrowExpression.throwsNullPointerExceptionWithNoArguments(): Boolean {
fun KtExpression.evaluatesTo(other: KtExpression): Boolean =
this.unwrapBlockOrParenthesis().text == other.text
fun KtExpression.anyArgumentEvaluatesTo(argument: KtExpression): Boolean {
val callExpression = this as? KtCallExpression ?: return false
val arguments = callExpression.valueArguments.map { it.getArgumentExpression() }
return arguments.any { it?.evaluatesTo(argument) == true } && arguments.all { it is KtNameReferenceExpression }
}
fun KtExpression.convertToIfNotNullExpression(
conditionLhs: KtExpression,
thenClause: KtExpression,