From bd525fb9907c5d8e0a66df9e2abacf6929e37cb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brais=20Gab=C3=ADn?= Date: Fri, 14 Jan 2022 04:42:21 +0100 Subject: [PATCH] Fix issue raised by detekt (#4491) --- .../detekt/rules/style/VarCouldBeVal.kt | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/VarCouldBeVal.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/VarCouldBeVal.kt index eaed94733..3823b74a4 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/VarCouldBeVal.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/VarCouldBeVal.kt @@ -112,28 +112,32 @@ class VarCouldBeVal(config: Config = Config.empty) : Rule(config) { } // Check for whether the initializer contains an object literal. - bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, property]?.let { - evaluateAssignmentExpression(it, property.initializer) + val descriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, property] + val initializer = property.initializer + if (descriptor != null && initializer != null) { + evaluateAssignmentExpression(descriptor, initializer) } } override fun visitUnaryExpression(expression: KtUnaryExpression) { super.visitUnaryExpression(expression) if (expression.operationToken in unaryAssignmentOperators) { - visitAssignment(expression.baseExpression) + expression.baseExpression?.let(::visitAssignment) } } override fun visitBinaryExpression(expression: KtBinaryExpression) { super.visitBinaryExpression(expression) if (expression.operationToken in KtTokens.ALL_ASSIGNMENTS) { - visitAssignment(expression.left) + expression.left?.let(::visitAssignment) // Check for whether the assignment contains an object literal. - (expression.left as? KtNameReferenceExpression)?.let { + val descriptor = (expression.left as? KtNameReferenceExpression)?.let { it.getResolvedCall(bindingContext)?.resultingDescriptor - }?.let { - evaluateAssignmentExpression(it, expression.right) + } + val expressionRight = expression.right + if (descriptor != null && expressionRight != null) { + evaluateAssignmentExpression(descriptor, expressionRight) } } } @@ -145,7 +149,7 @@ class VarCouldBeVal(config: Config = Config.empty) : Rule(config) { private fun evaluateAssignmentExpression( descriptor: DeclarationDescriptor, - rightExpression: KtExpression? + rightExpression: KtExpression, ) { when (rightExpression) { is KtObjectLiteralExpression -> { @@ -154,8 +158,8 @@ class VarCouldBeVal(config: Config = Config.empty) : Rule(config) { } } is KtIfExpression -> { - evaluateAssignmentExpression(descriptor, rightExpression.then) - evaluateAssignmentExpression(descriptor, rightExpression.`else`) + rightExpression.then?.let { evaluateAssignmentExpression(descriptor, it) } + rightExpression.`else`?.let { evaluateAssignmentExpression(descriptor, it) } } is KtBlockExpression -> { rightExpression.lastBlockStatementOrThis() @@ -208,8 +212,7 @@ class VarCouldBeVal(config: Config = Config.empty) : Rule(config) { (containingClassOrObject as? KtObjectDeclaration)?.isObjectLiteral() == true } - private fun visitAssignment(assignedExpression: KtExpression?) { - if (assignedExpression == null) return + private fun visitAssignment(assignedExpression: KtExpression) { val name = if (assignedExpression is KtQualifiedExpression) { assignedExpression.selectorExpression } else {