diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinIntentionActionFactoryWithDelegate.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinIntentionActionFactoryWithDelegate.kt index 3f2da81f791..d580df5e6e0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinIntentionActionFactoryWithDelegate.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinIntentionActionFactoryWithDelegate.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode abstract class KotlinSingleIntentionActionFactoryWithDelegate( - private val isLowPriority: Boolean = false + private val actionPriority: IntentionActionPriority = IntentionActionPriority.NORMAL ) : KotlinIntentionActionFactoryWithDelegate() { protected abstract fun createFix(data: D): IntentionAction? @@ -42,10 +42,11 @@ abstract class KotlinSingleIntentionActionFactoryWithDelegate QuickFixWithDelegateFactory(::createAction) + IntentionActionPriority.HIGH -> HighPriorityQuickFixWithDelegateFactory(::createAction) + IntentionActionPriority.LOW -> LowPriorityQuickFixWithDelegateFactory(::createAction) + } return listOf(delegateFactory) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixWithDelegateFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixWithDelegateFactory.kt index a2c49c08807..bfd0d765627 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixWithDelegateFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixWithDelegateFactory.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.quickfix +import com.intellij.codeInsight.intention.HighPriorityAction import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.LowPriorityAction import com.intellij.openapi.editor.Editor @@ -49,10 +50,31 @@ public open class QuickFixWithDelegateFactory( override fun invoke(project: Project, editor: Editor?, file: PsiFile?) { val action = delegateFactory() ?: return + + assert(action.detectPriority() == this.detectPriority()) { + "Incorrect priority of QuickFixWithDelegateFactory wrapper for ${action.javaClass.name}" + } + action.invoke(project, editor, file) } } public class LowPriorityQuickFixWithDelegateFactory( delegateFactory: () -> IntentionAction? -): QuickFixWithDelegateFactory(delegateFactory), LowPriorityAction \ No newline at end of file +): QuickFixWithDelegateFactory(delegateFactory), LowPriorityAction + +public class HighPriorityQuickFixWithDelegateFactory( + delegateFactory: () -> IntentionAction? +): QuickFixWithDelegateFactory(delegateFactory), HighPriorityAction + +enum class IntentionActionPriority { + LOW, NORMAL, HIGH +} + +fun IntentionAction.detectPriority(): IntentionActionPriority { + return when (this) { + is LowPriorityAction -> IntentionActionPriority.LOW + is HighPriorityAction -> IntentionActionPriority.HIGH + else -> IntentionActionPriority.NORMAL + } +} \ No newline at end of file