@@ -10,7 +10,6 @@ import com.intellij.openapi.editor.Editor
10
10
import com.intellij.openapi.util.TextRange
11
11
import org.jetbrains.kotlin.idea.caches.resolve.analyze
12
12
import org.jetbrains.kotlin.psi.*
13
- import org.jetbrains.kotlin.psi.psiUtil.*
14
13
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
15
14
16
15
class AddLabeledReturnInLambdaIntention : SelfTargetingRangeIntention <KtBlockExpression >(
@@ -19,14 +18,13 @@ class AddLabeledReturnInLambdaIntention : SelfTargetingRangeIntention<KtBlockExp
19
18
), LowPriorityAction {
20
19
override fun applicabilityRange (element : KtBlockExpression ): TextRange ? {
21
20
if (! isApplicableTo(element)) return null
22
- val labelName = createLabelName( element) ? : return null
21
+ val labelName = element.getParentLambdaLabelName( ) ? : return null
23
22
text = " Add return@$labelName "
24
23
return element.statements.lastOrNull()?.textRange
25
24
}
26
25
27
26
override fun applyTo (element : KtBlockExpression , editor : Editor ? ) {
28
- if (! isApplicableTo(element)) return
29
- val labelName = createLabelName(element) ? : return
27
+ val labelName = element.getParentLambdaLabelName() ? : return
30
28
val lastStatement = element.statements.lastOrNull() ? : return
31
29
val newExpression = KtPsiFactory (element.project).createExpressionByPattern(" return@$labelName $0" , lastStatement)
32
30
lastStatement.replace(newExpression)
@@ -36,14 +34,4 @@ class AddLabeledReturnInLambdaIntention : SelfTargetingRangeIntention<KtBlockExp
36
34
val lastStatement = block.statements.lastOrNull()
37
35
return lastStatement !is KtReturnExpression && lastStatement?.isUsedAsExpression(lastStatement.analyze()) == true
38
36
}
39
-
40
- private fun createLabelName (block : KtBlockExpression ): String? {
41
- val lambdaExpression = block.getStrictParentOfType<KtLambdaExpression >() ? : return null
42
- val callExpression = lambdaExpression.getStrictParentOfType<KtCallExpression >() ? : return null
43
- val valueArgument = callExpression.valueArguments.find {
44
- it.getArgumentExpression()?.unpackFunctionLiteral(allowParentheses = false ) == = lambdaExpression
45
- } ? : return null
46
- val lambdaLabelName = (valueArgument.getArgumentExpression() as ? KtLabeledExpression )?.getLabelName()
47
- return lambdaLabelName ? : callExpression.getCallNameExpression()?.text
48
- }
49
37
}
0 commit comments