AddModifierFix and RemoveModifierFix made extend KotlinCrossLanguageQuickFixAction

This commit is contained in:
Dmitry Batkovich
2018-12-07 16:30:43 +03:00
committed by Nicolay Mitropolsky
parent 2b0ec8abe3
commit 654f728c12
2 changed files with 14 additions and 13 deletions
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.codeInsight.intention.IntentionAction
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiNameIdentifierOwner
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassDescriptor
@@ -32,7 +33,6 @@ import org.jetbrains.kotlin.idea.inspections.KotlinUniversalQuickFix
import org.jetbrains.kotlin.idea.refactoring.canRefactor
import org.jetbrains.kotlin.idea.util.runOnExpectAndAllActuals
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.lexer.KtToken
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.lexer.KtTokens.*
import org.jetbrains.kotlin.psi.*
@@ -46,7 +46,7 @@ import org.jetbrains.kotlin.types.TypeUtils
open class AddModifierFix(
element: KtModifierListOwner,
protected val modifier: KtModifierKeywordToken
) : KotlinQuickFixAction<KtModifierListOwner>(element), KotlinUniversalQuickFix {
) : KotlinCrossLanguageQuickFixAction<KtModifierListOwner>(element), KotlinUniversalQuickFix {
override fun getText(): String {
val element = element ?: return ""
if (modifier in modalityModifiers || modifier in KtTokens.VISIBILITY_MODIFIERS || modifier == KtTokens.CONST_KEYWORD) {
@@ -69,7 +69,7 @@ open class AddModifierFix(
}
}
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
override fun invokeImpl(project: Project, editor: Editor?, file: PsiFile) {
val originalElement = element
if (originalElement is KtDeclaration && modifier.isMultiplatformPersistent()) {
originalElement.runOnExpectAndAllActuals { invokeOnElement(it) }
@@ -77,7 +77,7 @@ open class AddModifierFix(
invokeOnElement(originalElement)
}
override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean {
override fun isAvailableImpl(project: Project, editor: Editor?, file: PsiFile): Boolean {
val element = element ?: return false
return element.canRefactor()
}
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
@@ -30,7 +31,7 @@ class RemoveModifierFix(
element: KtModifierListOwner,
private val modifier: KtModifierKeywordToken,
private val isRedundant: Boolean
) : KotlinQuickFixAction<KtModifierListOwner>(element) {
) : KotlinCrossLanguageQuickFixAction<KtModifierListOwner>(element) {
private val text = run {
val modifierText = modifier.value
@@ -48,9 +49,9 @@ class RemoveModifierFix(
override fun getText() = text
override fun isAvailable(project: Project, editor: Editor?, file: KtFile) = (element?.hasModifier(modifier) ?: false)
override fun isAvailableImpl(project: Project, editor: Editor?, file: PsiFile) = (element?.hasModifier(modifier) ?: false)
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
override fun invokeImpl(project: Project, editor: Editor?, file: PsiFile) {
invoke()
}
@@ -68,7 +69,7 @@ class RemoveModifierFix(
isRedundant: Boolean = false
): KotlinSingleIntentionActionFactory {
return object : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction<KtModifierListOwner>? {
override fun createAction(diagnostic: Diagnostic): RemoveModifierFix? {
val modifierListOwner = QuickFixUtil.getParentElementOfType(diagnostic, KtModifierListOwner::class.java) ?: return null
return RemoveModifierFix(modifierListOwner, modifier, isRedundant)
}
@@ -77,7 +78,7 @@ class RemoveModifierFix(
fun createRemoveModifierFactory(isRedundant: Boolean = false): KotlinSingleIntentionActionFactory {
return object : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction<KtModifierListOwner>? {
override fun createAction(diagnostic: Diagnostic): RemoveModifierFix? {
val psiElement = diagnostic.psiElement
val elementType = psiElement.node.elementType as? KtModifierKeywordToken ?: return null
val modifierListOwner = psiElement.getStrictParentOfType<KtModifierListOwner>() ?: return null
@@ -88,7 +89,7 @@ class RemoveModifierFix(
fun createRemoveProjectionFactory(isRedundant: Boolean): KotlinSingleIntentionActionFactory {
return object : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction<KtModifierListOwner>? {
override fun createAction(diagnostic: Diagnostic): RemoveModifierFix? {
val projection = diagnostic.psiElement as KtTypeProjection
val elementType = projection.projectionToken?.node?.elementType as? KtModifierKeywordToken ?: return null
return RemoveModifierFix(projection, elementType, isRedundant)
@@ -98,7 +99,7 @@ class RemoveModifierFix(
fun createRemoveVarianceFactory(): KotlinSingleIntentionActionFactory {
return object : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction<KtModifierListOwner>? {
override fun createAction(diagnostic: Diagnostic): RemoveModifierFix? {
val psiElement = diagnostic.psiElement as KtTypeParameter
val modifier = when (psiElement.variance) {
Variance.IN_VARIANCE -> KtTokens.IN_KEYWORD
@@ -112,7 +113,7 @@ class RemoveModifierFix(
fun createRemoveSuspendFactory(): KotlinSingleIntentionActionFactory {
return object : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction<KtModifierListOwner>? {
override fun createAction(diagnostic: Diagnostic): RemoveModifierFix? {
val suspendKeyword = diagnostic.psiElement
val modifierList = suspendKeyword.parent as KtDeclarationModifierList
val type = modifierList.parent as KtTypeReference
@@ -124,7 +125,7 @@ class RemoveModifierFix(
fun createRemoveLateinitFactory(): KotlinSingleIntentionActionFactory {
return object : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction<KtModifierListOwner>? {
override fun createAction(diagnostic: Diagnostic): RemoveModifierFix? {
val keyword = diagnostic.psiElement
val modifierList = keyword.parent as? KtDeclarationModifierList ?: return null
val property = modifierList.parent as? KtProperty ?: return null