Skip to content

Commit 32bdb6b

Browse files
committed
KT-16714 related refactoring of tryRunWriteAction (now runWriteAction is not used if intention is called from J2K)
1 parent faa0dff commit 32bdb6b

File tree

5 files changed

+15
-10
lines changed

5 files changed

+15
-10
lines changed

idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ abstract class IntentionBasedInspection<TElement : PsiElement>(
7878
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor {
7979

8080
val intentionsAndCheckers = intentionInfos.map {
81-
val instance = it.intention.constructors.single().call()
81+
val instance = it.intention.constructors.single { it.parameters.isEmpty() } .call()
8282
instance.inspection = this
8383
instance to it.additionalChecker
8484
}

idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/SelfTargetingIntention.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ abstract class SelfTargetingIntention<TElement : PsiElement>(
5858

5959
abstract fun applyTo(element: TElement, editor: Editor?)
6060

61-
protected fun <R> tryRunWriteAction(action: () -> R): R =
62-
if (ApplicationManager.getApplication().isDispatchThread) runWriteAction(action)
61+
protected fun <R> runInWriteActionOrHere(inWriteAction: Boolean = true, action: () -> R): R =
62+
if (inWriteAction) runWriteAction(action)
6363
else run(action)
6464

6565
private fun getTarget(editor: Editor, file: PsiFile): TElement? {

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ class IfThenToElvisInspection : IntentionBasedInspection<KtIfExpression>(
4141
{ it -> it.isUsedAsExpression(it.analyze(BodyResolveMode.PARTIAL)) }
4242
)
4343

44-
class IfThenToElvisIntention : SelfTargetingOffsetIndependentIntention<KtIfExpression>(
44+
class IfThenToElvisIntention(private val fromJ2K: Boolean) : SelfTargetingOffsetIndependentIntention<KtIfExpression>(
4545
KtIfExpression::class.java,
4646
"Replace 'if' expression with elvis expression"
4747
) {
48+
@Suppress("unused")
49+
constructor(): this(fromJ2K = false)
4850

4951
private fun KtExpression.clausesReplaceableByElvis(firstClause: KtExpression, secondClause: KtExpression, context: BindingContext) =
5052
!firstClause.isNullOrBlockExpression() &&
@@ -145,7 +147,7 @@ class IfThenToElvisIntention : SelfTargetingOffsetIndependentIntention<KtIfExpre
145147
it.typeReference!!)
146148
}
147149
val checkedExpression = condition.checkedExpression()!!
148-
val elvis = tryRunWriteAction {
150+
val elvis = runInWriteActionOrHere(inWriteAction = !fromJ2K) {
149151
val replacedLeft = if (left.evaluatesTo(checkedExpression)) {
150152
if (condition is KtIsExpression) newReceiver!! else left
151153
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@ import org.jetbrains.kotlin.idea.core.replaced
2121
import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection
2222
import org.jetbrains.kotlin.idea.intentions.SelfTargetingOffsetIndependentIntention
2323
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.*
24-
import org.jetbrains.kotlin.idea.util.application.runWriteAction
2524
import org.jetbrains.kotlin.lexer.KtTokens
2625
import org.jetbrains.kotlin.psi.*
2726

2827
class IfThenToSafeAccessInspection : IntentionBasedInspection<KtIfExpression>(IfThenToSafeAccessIntention::class)
2928

30-
class IfThenToSafeAccessIntention : SelfTargetingOffsetIndependentIntention<KtIfExpression>(KtIfExpression::class.java, "Replace 'if' expression with safe access expression") {
29+
class IfThenToSafeAccessIntention(private val fromJ2K: Boolean) : SelfTargetingOffsetIndependentIntention<KtIfExpression>(
30+
KtIfExpression::class.java, "Replace 'if' expression with safe access expression"
31+
) {
32+
@Suppress("unused")
33+
constructor(): this(fromJ2K = false)
3134

3235
override fun isApplicableTo(element: KtIfExpression): Boolean {
3336
val condition = element.condition as? KtBinaryExpression ?: return false
@@ -67,7 +70,7 @@ class IfThenToSafeAccessIntention : SelfTargetingOffsetIndependentIntention<KtIf
6770
}
6871

6972
val newExpr = KtPsiFactory(element).createExpressionByPattern("$0?.$1", receiverExpression, selectorExpression) as KtSafeQualifiedExpression
70-
val safeAccessExpr = tryRunWriteAction {
73+
val safeAccessExpr = runInWriteActionOrHere(inWriteAction = !fromJ2K) {
7174
element.replaced(newExpr)
7275
}
7376

idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ object J2KPostProcessingRegistrar {
6969
_processings.add(RemoveRedundantCastToNullableProcessing())
7070

7171
registerIntentionBasedProcessing(ConvertToExpressionBodyIntention(convertEmptyToUnit = false)) { it is KtPropertyAccessor }
72-
registerIntentionBasedProcessing(IfThenToSafeAccessIntention())
73-
registerIntentionBasedProcessing(IfThenToElvisIntention())
72+
registerIntentionBasedProcessing(IfThenToSafeAccessIntention(fromJ2K = true))
73+
registerIntentionBasedProcessing(IfThenToElvisIntention(fromJ2K = true))
7474
registerIntentionBasedProcessing(FoldInitializerAndIfToElvisIntention())
7575
registerIntentionBasedProcessing(SimplifyNegatedBinaryExpressionIntention())
7676
registerIntentionBasedProcessing(ReplaceGetOrSetIntention(), additionalChecker = ReplaceGetOrSetInspection.additionalChecker)

0 commit comments

Comments
 (0)