From 73bca21f94228665a906eb81bfbbf89596902629 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 27 Dec 2017 19:03:10 +0300 Subject: [PATCH] Allow using add modifier quick-fixes in batch mode #KT-21950 Fixed --- .../idea/highlighter/KotlinPsiChecker.kt | 8 ++++- .../inspections/KotlinUniversalQuickFix.kt | 30 +++++++++++++++++++ .../kotlin/idea/quickfix/AddModifierFix.kt | 5 ++-- .../idea/quickfix/AddSuspendModifierFix.kt | 9 ++++-- 4 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/KotlinUniversalQuickFix.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt index a28c656ee4b..446e9edac47 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt @@ -44,6 +44,7 @@ import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult +import org.jetbrains.kotlin.idea.inspections.KotlinUniversalQuickFix import org.jetbrains.kotlin.idea.quickfix.QuickFixes import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.psi.KtFile @@ -285,7 +286,12 @@ private class ElementAnnotator(private val element: PsiElement, val annotation = data.create(diagnostic, range, holder) val fixes = fixesMap[diagnostic] - fixes.forEach { annotation.registerFix(it) } + fixes.forEach { + when (it) { + is KotlinUniversalQuickFix -> annotation.registerUniversalFix(it, null, null) + is IntentionAction -> annotation.registerFix(it) + } + } if (diagnostic.severity == Severity.WARNING) { annotation.problemGroup = KotlinSuppressableWarningProblemGroup(diagnostic.factory) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/KotlinUniversalQuickFix.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/KotlinUniversalQuickFix.kt new file mode 100644 index 00000000000..bfff0e3aff6 --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/KotlinUniversalQuickFix.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.inspections + +import com.intellij.codeInsight.intention.IntentionAction +import com.intellij.codeInspection.LocalQuickFix +import com.intellij.codeInspection.ProblemDescriptor +import com.intellij.openapi.project.Project + +interface KotlinUniversalQuickFix : IntentionAction, LocalQuickFix { + override fun getName() = text + + override fun applyFix(project: Project, descriptor: ProblemDescriptor) { + invoke(project, null, descriptor.psiElement?.containingFile) + } +} \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt index 851ecb63fac..d47a0790af9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction +import com.intellij.codeInspection.ProblemDescriptor import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiNameIdentifierOwner @@ -27,6 +28,7 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil +import org.jetbrains.kotlin.idea.inspections.KotlinUniversalQuickFix import org.jetbrains.kotlin.idea.refactoring.canRefactor import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens @@ -42,8 +44,7 @@ import org.jetbrains.kotlin.types.TypeUtils open class AddModifierFix( element: KtModifierListOwner, protected val modifier: KtModifierKeywordToken -) : KotlinQuickFixAction(element) { - +) : KotlinQuickFixAction(element), KotlinUniversalQuickFix { override fun getText(): String { val element = element ?: return "" if (modifier in modalityModifiers || modifier in KtTokens.VISIBILITY_MODIFIERS || modifier == KtTokens.CONST_KEYWORD) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt index 38fc80ac6b5..537f8725b50 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt @@ -28,12 +28,15 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode -class AddSuspendModifierFix(element: KtModifierListOwner, private val name: String?): AddModifierFix(element, KtTokens.SUSPEND_KEYWORD) { +class AddSuspendModifierFix( + element: KtModifierListOwner, + private val declarationName: String? +): AddModifierFix(element, KtTokens.SUSPEND_KEYWORD) { override fun getText() = when (element) { - is KtNamedFunction -> "Make ${name ?: "containing function"} suspend" - is KtTypeReference -> "Make ${name ?: "receiver"} type suspend" + is KtNamedFunction -> "Make ${declarationName ?: "containing function"} suspend" + is KtTypeReference -> "Make ${declarationName ?: "receiver"} type suspend" else -> super.getText() }