diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.kt index 8a9bceb32cf..1f0d80f4c73 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.kt @@ -75,11 +75,7 @@ class ChangeFunctionLiteralSignatureFix( return Data(element, descriptor, parameterTypes) } - override fun createQuickFix(diagnostic: Diagnostic, quickFixDataFactory: () -> Data?): QuickFixWithDelegateFactory? { - return QuickFixWithDelegateFactory { - val (functionLiteral, descriptor, parameterTypes) = quickFixDataFactory() ?: return@QuickFixWithDelegateFactory null - ChangeFunctionLiteralSignatureFix(functionLiteral, descriptor, parameterTypes) - } - } + override fun createQuickFix(data: Data) + = ChangeFunctionLiteralSignatureFix(data.functionLiteral, data.descriptor, data.parameterTypes) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt index bb85c75a8c0..9f25b162df8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt @@ -88,12 +88,7 @@ abstract class ChangeFunctionSignatureFix( return Data(element, descriptor) } - override fun createQuickFix(diagnostic: Diagnostic, quickFixDataFactory: () -> Data?): QuickFixWithDelegateFactory { - return QuickFixWithDelegateFactory { - val (callElement, descriptor) = quickFixDataFactory() ?: return@QuickFixWithDelegateFactory null - createFix(callElement, callElement, descriptor) - } - } + override fun createQuickFix(data: Data) = createFix(data.callElement, data.callElement, data.descriptor) private fun createFix(callElement: JetCallElement, context: PsiElement, descriptor: CallableDescriptor): ChangeFunctionSignatureFix? { val functionDescriptor = when (descriptor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinIntentionActionFactoryWithDelegate.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinIntentionActionFactoryWithDelegate.kt index 7027a8b3404..64ad993c51b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinIntentionActionFactoryWithDelegate.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinIntentionActionFactoryWithDelegate.kt @@ -25,16 +25,29 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.psi.JetElement import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode -import org.jetbrains.kotlin.utils.singletonOrEmptyList -abstract class KotlinSingleIntentionActionFactoryWithDelegate : KotlinIntentionActionFactoryWithDelegate() { - protected open fun createQuickFix(diagnostic: Diagnostic, quickFixDataFactory: () -> D?): QuickFixWithDelegateFactory? = null +abstract class KotlinSingleIntentionActionFactoryWithDelegate( + private val isLowPriority: Boolean = false +) : KotlinIntentionActionFactoryWithDelegate() { + + protected abstract fun createQuickFix(data: D): IntentionAction? protected override final fun createQuickFixes( originalElementPointer: SmartPsiElementPointer, diagnostic: Diagnostic, quickFixDataFactory: () -> D? - ): List = createQuickFix(diagnostic, quickFixDataFactory).singletonOrEmptyList() + ): List { + fun createAction(): IntentionAction? { + val data = quickFixDataFactory() ?: return null + return createQuickFix(data) + } + + val delegateFactory = if (isLowPriority) + LowPriorityQuickFixWithDelegateFactory(::createAction) + else + QuickFixWithDelegateFactory(::createAction) + return listOf(delegateFactory) + } } abstract class KotlinIntentionActionFactoryWithDelegate : JetIntentionActionsFactory() { @@ -60,9 +73,8 @@ abstract class KotlinIntentionActionFactoryWithDelegate // Cache data so that it can be shared between quick fixes bound to the same element & diagnostic // Cache null values var cachedData: Ref? = null - val actions: List - try { - actions = createQuickFixes(originalElementPointer, diagnostic) factory@ { + val actions: List = try { + createQuickFixes(originalElementPointer, diagnostic) factory@ { val element = originalElementPointer.element ?: return@factory null val diagnosticElement = diagnosticElementPointer.element ?: return@factory null if (!diagnosticElement.isValid || !element.isValid) return@factory null diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFactory.kt index e601c318194..9f85d0adae0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFactory.kt @@ -16,10 +16,9 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createVariable +import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactoryWithDelegate -import org.jetbrains.kotlin.idea.quickfix.QuickFixWithDelegateFactory import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetParameterInfo import org.jetbrains.kotlin.psi.JetElement import org.jetbrains.kotlin.resolve.BindingContext @@ -31,17 +30,10 @@ data class CreateParameterData( ) abstract class CreateParameterFromUsageFactory: KotlinSingleIntentionActionFactoryWithDelegate>() { - override fun createQuickFix( - diagnostic: Diagnostic, - quickFixDataFactory: () -> CreateParameterData? - ): QuickFixWithDelegateFactory? { - return QuickFixWithDelegateFactory { - quickFixDataFactory()?.let { data -> - CreateParameterFromUsageFix( - data.parameterInfo.callableDescriptor as FunctionDescriptor, - data.parameterInfo, - data.originalExpression) - } - } + override fun createQuickFix(data: CreateParameterData): IntentionAction? { + return CreateParameterFromUsageFix( + data.parameterInfo.callableDescriptor as FunctionDescriptor, + data.parameterInfo, + data.originalExpression) } } \ No newline at end of file