Add quick-fix to "Unlabeled return inside lambda" inspection #KT-27007 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
d7b885159e
commit
725cb88f41
+14
-3
@@ -5,24 +5,35 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.inspections
|
||||
|
||||
import com.intellij.codeInspection.IntentionWrapper
|
||||
import com.intellij.codeInspection.ProblemHighlightType
|
||||
import com.intellij.codeInspection.ProblemsHolder
|
||||
import com.intellij.psi.PsiElementVisitor
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.quickfix.ChangeToLabeledReturnFix
|
||||
import org.jetbrains.kotlin.psi.KtLambdaExpression
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
import org.jetbrains.kotlin.psi.KtReturnExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
import org.jetbrains.kotlin.psi.returnExpressionVisitor
|
||||
|
||||
class UnlabeledReturnInsideLambdaInspection : AbstractKotlinInspection() {
|
||||
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor =
|
||||
returnExpressionVisitor(fun(returnExpression: KtReturnExpression) {
|
||||
if (returnExpression.labelQualifier != null) return
|
||||
if (returnExpression.getParentOfType<KtLambdaExpression>(true, KtNamedFunction::class.java) == null) return
|
||||
val lambda = returnExpression.getParentOfType<KtLambdaExpression>(true, KtNamedFunction::class.java) ?: return
|
||||
val parentFunction = lambda.getStrictParentOfType<KtNamedFunction>() ?: return
|
||||
if (returnExpression.analyze().diagnostics.forElement(returnExpression).any { it.severity == Severity.ERROR }) return
|
||||
holder.registerProblem(
|
||||
returnExpression,
|
||||
returnExpression.returnKeyword,
|
||||
"Unlabeled return inside lambda",
|
||||
ProblemHighlightType.GENERIC_ERROR_OR_WARNING
|
||||
ProblemHighlightType.GENERIC_ERROR_OR_WARNING,
|
||||
IntentionWrapper(
|
||||
ChangeToLabeledReturnFix(returnExpression, labeledReturn = "return@${parentFunction.name}"),
|
||||
returnExpression.containingFile
|
||||
)
|
||||
)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user