AddModifierFix and RemoveModifierFix made extend KotlinCrossLanguageQuickFixAction
This commit is contained in:
committed by
Nicolay Mitropolsky
parent
2b0ec8abe3
commit
654f728c12
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user