diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/MoveLambdaOutsideParenthesesInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/MoveLambdaOutsideParenthesesInspection.kt index 4627e5d3753..f6bf73d8a73 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/MoveLambdaOutsideParenthesesInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/MoveLambdaOutsideParenthesesInspection.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.inspections +import com.intellij.codeInspection.ProblemHighlightType import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement @@ -16,6 +17,20 @@ import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType class MoveLambdaOutsideParenthesesInspection : AbstractApplicabilityBasedInspection(KtCallExpression::class.java) { + private fun KtCallExpression.withInformationLevel(): Boolean { + return when { + valueArguments.lastOrNull()?.isNamed() == true -> true + valueArguments.count { it.getArgumentExpression()?.unpackFunctionLiteral() != null } > 1 -> true + else -> false + } + } + + private val KtCallExpression.verb: String + get() = if (withInformationLevel()) "can" else "should" + + override fun inspectionHighlightType(element: KtCallExpression): ProblemHighlightType = + if (element.withInformationLevel()) ProblemHighlightType.INFORMATION else ProblemHighlightType.GENERIC_ERROR_OR_WARNING + override fun isApplicable(element: KtCallExpression) = element.canMoveLambdaOutsideParentheses() override fun applyTo(element: PsiElement, project: Project, editor: Editor?) { @@ -26,7 +41,7 @@ class MoveLambdaOutsideParenthesesInspection : AbstractApplicabilityBasedInspect } } - override fun inspectionText(element: KtCallExpression) = "Lambda argument should be moved out of parentheses" + override fun inspectionText(element: KtCallExpression) = "Lambda argument ${element.verb} be moved out of parentheses" override fun inspectionTarget(element: KtCallExpression): KtElement { return element.getLastLambdaExpression()?.getStrictParentOfType()?.asElement() ?: element