Add intention to remove suspend from parameter on suspend inline function
This commit is contained in:
@@ -57,11 +57,18 @@ class AddInlineModifierFix(
|
||||
}
|
||||
}
|
||||
|
||||
object SuspendFactory : KotlinSingleIntentionActionFactory() {
|
||||
object NoInlineSuspendFactory : KotlinSingleIntentionActionFactory() {
|
||||
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
||||
val parameter = diagnostic.psiElement as? KtParameter ?: return null
|
||||
return AddInlineModifierFix(parameter, KtTokens.NOINLINE_KEYWORD)
|
||||
}
|
||||
}
|
||||
|
||||
object CrossInlineSuspendFactory : KotlinSingleIntentionActionFactory() {
|
||||
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
||||
val parameter = diagnostic.psiElement as? KtParameter ?: return null
|
||||
return AddInlineModifierFix(parameter, KtTokens.CROSSINLINE_KEYWORD)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -112,6 +112,7 @@ class QuickFixRegistrar : QuickFixContributor {
|
||||
val removeRedundantModifierFactory = RemoveModifierFix.createRemoveModifierFactory(true)
|
||||
REDUNDANT_MODIFIER.registerFactory(removeRedundantModifierFactory)
|
||||
REDUNDANT_OPEN_IN_INTERFACE.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD, true))
|
||||
REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE.registerFactory(RemoveModifierFix.createRemoveSuspendFactory())
|
||||
UNNECESSARY_LATEINIT.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerFactory(LATEINIT_KEYWORD))
|
||||
|
||||
REDUNDANT_PROJECTION.registerFactory(RemoveModifierFix.createRemoveProjectionFactory(true))
|
||||
@@ -487,7 +488,8 @@ class QuickFixRegistrar : QuickFixContributor {
|
||||
ErrorsJs.WRONG_EXTERNAL_DECLARATION.registerFactory(MigrateExternalExtensionFix)
|
||||
|
||||
ILLEGAL_SUSPEND_FUNCTION_CALL.registerFactory(AddSuspendModifierFix)
|
||||
INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED.registerFactory(AddInlineModifierFix.SuspendFactory)
|
||||
INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED.registerFactory(AddInlineModifierFix.NoInlineSuspendFactory)
|
||||
INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED.registerFactory(AddInlineModifierFix.CrossInlineSuspendFactory)
|
||||
|
||||
UNRESOLVED_REFERENCE.registerFactory(AddSuspendModifierFix.UnresolvedReferenceFactory)
|
||||
UNRESOLVED_REFERENCE_WRONG_RECEIVER.registerFactory(AddSuspendModifierFix.UnresolvedReferenceFactory)
|
||||
|
||||
@@ -22,10 +22,7 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
|
||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtModifierListOwner
|
||||
import org.jetbrains.kotlin.psi.KtTypeParameter
|
||||
import org.jetbrains.kotlin.psi.KtTypeProjection
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
@@ -110,5 +107,17 @@ class RemoveModifierFix(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun createRemoveSuspendFactory(): KotlinSingleIntentionActionFactory {
|
||||
return object : KotlinSingleIntentionActionFactory() {
|
||||
override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction<KtModifierListOwner>? {
|
||||
val suspendKeyword = diagnostic.psiElement
|
||||
val modifierList = suspendKeyword.parent as KtDeclarationModifierList
|
||||
val type = modifierList.parent as KtTypeReference
|
||||
if (!type.hasModifier(KtTokens.SUSPEND_KEYWORD)) return null
|
||||
return RemoveModifierFix(type, KtTokens.SUSPEND_KEYWORD, isRedundant = false)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user