From 32bdb6becb8b642ea532f987b2728007fcf2092c Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 9 Mar 2017 16:06:14 +0300 Subject: [PATCH] KT-16714 related refactoring of tryRunWriteAction (now runWriteAction is not used if intention is called from J2K) --- .../kotlin/idea/inspections/IntentionBasedInspection.kt | 2 +- .../kotlin/idea/intentions/SelfTargetingIntention.kt | 4 ++-- .../intentions/IfThenToElvisIntention.kt | 6 ++++-- .../intentions/IfThenToSafeAccessIntention.kt | 9 ++++++--- .../org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt | 4 ++-- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt index fea61503938..ae629629023 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt @@ -78,7 +78,7 @@ abstract class IntentionBasedInspection( override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor { val intentionsAndCheckers = intentionInfos.map { - val instance = it.intention.constructors.single().call() + val instance = it.intention.constructors.single { it.parameters.isEmpty() } .call() instance.inspection = this instance to it.additionalChecker } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/SelfTargetingIntention.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/SelfTargetingIntention.kt index 5244976ac1a..d4d51a189b6 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/SelfTargetingIntention.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/SelfTargetingIntention.kt @@ -58,8 +58,8 @@ abstract class SelfTargetingIntention( abstract fun applyTo(element: TElement, editor: Editor?) - protected fun tryRunWriteAction(action: () -> R): R = - if (ApplicationManager.getApplication().isDispatchThread) runWriteAction(action) + protected fun runInWriteActionOrHere(inWriteAction: Boolean = true, action: () -> R): R = + if (inWriteAction) runWriteAction(action) else run(action) private fun getTarget(editor: Editor, file: PsiFile): TElement? { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/IfThenToElvisIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/IfThenToElvisIntention.kt index 62384649194..925c07a428e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/IfThenToElvisIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/IfThenToElvisIntention.kt @@ -41,10 +41,12 @@ class IfThenToElvisInspection : IntentionBasedInspection( { it -> it.isUsedAsExpression(it.analyze(BodyResolveMode.PARTIAL)) } ) -class IfThenToElvisIntention : SelfTargetingOffsetIndependentIntention( +class IfThenToElvisIntention(private val fromJ2K: Boolean) : SelfTargetingOffsetIndependentIntention( KtIfExpression::class.java, "Replace 'if' expression with elvis expression" ) { + @Suppress("unused") + constructor(): this(fromJ2K = false) private fun KtExpression.clausesReplaceableByElvis(firstClause: KtExpression, secondClause: KtExpression, context: BindingContext) = !firstClause.isNullOrBlockExpression() && @@ -145,7 +147,7 @@ class IfThenToElvisIntention : SelfTargetingOffsetIndependentIntention(IfThenToSafeAccessIntention::class) -class IfThenToSafeAccessIntention : SelfTargetingOffsetIndependentIntention(KtIfExpression::class.java, "Replace 'if' expression with safe access expression") { +class IfThenToSafeAccessIntention(private val fromJ2K: Boolean) : SelfTargetingOffsetIndependentIntention( + KtIfExpression::class.java, "Replace 'if' expression with safe access expression" +) { + @Suppress("unused") + constructor(): this(fromJ2K = false) override fun isApplicableTo(element: KtIfExpression): Boolean { val condition = element.condition as? KtBinaryExpression ?: return false @@ -67,7 +70,7 @@ class IfThenToSafeAccessIntention : SelfTargetingOffsetIndependentIntention