Correctness check for wrapper action's priority

This commit is contained in:
Valentin Kipyatkov
2015-10-14 23:01:54 +03:00
parent 670b278891
commit 412f4a30c4
2 changed files with 29 additions and 6 deletions
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
abstract class KotlinSingleIntentionActionFactoryWithDelegate<E : JetElement, D : Any>(
private val isLowPriority: Boolean = false
private val actionPriority: IntentionActionPriority = IntentionActionPriority.NORMAL
) : KotlinIntentionActionFactoryWithDelegate<E, D>() {
protected abstract fun createFix(data: D): IntentionAction?
@@ -42,10 +42,11 @@ abstract class KotlinSingleIntentionActionFactoryWithDelegate<E : JetElement, D
return createFix(data)
}
val delegateFactory = if (isLowPriority)
LowPriorityQuickFixWithDelegateFactory(::createAction)
else
QuickFixWithDelegateFactory(::createAction)
val delegateFactory = when (actionPriority) {
IntentionActionPriority.NORMAL -> QuickFixWithDelegateFactory(::createAction)
IntentionActionPriority.HIGH -> HighPriorityQuickFixWithDelegateFactory(::createAction)
IntentionActionPriority.LOW -> LowPriorityQuickFixWithDelegateFactory(::createAction)
}
return listOf(delegateFactory)
}
}
@@ -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
): 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
}
}