Skip to content

Commit 834c3f5

Browse files
committed
if-then --> elvis: run write action manually to avoid AWT events inside
1 parent 9594147 commit 834c3f5

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/IfThenToElvisIntention.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.intentions.SelfTargetingOffsetIndependentIntent
2626
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.*
2727
import org.jetbrains.kotlin.idea.intentions.getLeftMostReceiverExpression
2828
import org.jetbrains.kotlin.idea.intentions.replaceFirstReceiver
29+
import org.jetbrains.kotlin.idea.util.application.runWriteAction
2930
import org.jetbrains.kotlin.lexer.KtTokens
3031
import org.jetbrains.kotlin.psi.*
3132
import org.jetbrains.kotlin.resolve.BindingContext
@@ -114,6 +115,8 @@ class IfThenToElvisIntention : SelfTargetingOffsetIndependentIntention<KtIfExpre
114115
return this
115116
}
116117

118+
override fun startInWriteAction() = false
119+
117120
override fun applyTo(element: KtIfExpression, editor: Editor?) {
118121
val condition = element.condition as KtOperationExpression
119122

@@ -142,20 +145,22 @@ class IfThenToElvisIntention : SelfTargetingOffsetIndependentIntention<KtIfExpre
142145
it.typeReference!!)
143146
}
144147
val checkedExpression = condition.checkedExpression()!!
145-
val replacedLeft = if (left.evaluatesTo(checkedExpression)) {
146-
if (condition is KtIsExpression) newReceiver!! else left
147-
}
148-
else {
149-
if (condition is KtIsExpression) {
150-
(left as KtDotQualifiedExpression).replaceFirstReceiver(
151-
factory, newReceiver!!, safeAccess = true)
148+
val elvis = runWriteAction {
149+
val replacedLeft = if (left.evaluatesTo(checkedExpression)) {
150+
if (condition is KtIsExpression) newReceiver!! else left
152151
}
153152
else {
154-
left.insertSafeCalls(factory)
153+
if (condition is KtIsExpression) {
154+
(left as KtDotQualifiedExpression).replaceFirstReceiver(
155+
factory, newReceiver!!, safeAccess = true)
156+
}
157+
else {
158+
left.insertSafeCalls(factory)
159+
}
155160
}
161+
val newExpr = element.replaced(factory.createExpressionByPattern("$0 ?: $1", replacedLeft, right))
162+
KtPsiUtil.deparenthesize(newExpr) as KtBinaryExpression
156163
}
157-
val newExpr = element.replaced(factory.createExpressionByPattern("$0 ?: $1", replacedLeft, right))
158-
val elvis = KtPsiUtil.deparenthesize(newExpr) as KtBinaryExpression
159164

160165
if (editor != null) {
161166
elvis.inlineLeftSideIfApplicableWithPrompt(editor)

0 commit comments

Comments
 (0)