Extract resolve from write action & cleanup AddOperatorModifierInspection
Relates to #KT-31533
This commit is contained in:
@@ -10,20 +10,21 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
import org.jetbrains.kotlin.idea.refactoring.withExpectedActuals
|
import org.jetbrains.kotlin.idea.refactoring.withExpectedActuals
|
||||||
|
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
import org.jetbrains.kotlin.util.OperatorChecks
|
import org.jetbrains.kotlin.util.OperatorChecks
|
||||||
|
|
||||||
class AddOperatorModifierInspection : AbstractApplicabilityBasedInspection<KtNamedFunction>(
|
class AddOperatorModifierInspection : AbstractApplicabilityBasedInspection<KtNamedFunction>(KtNamedFunction::class.java) {
|
||||||
KtNamedFunction::class.java
|
override fun inspectionRange(element: KtNamedFunction) = element.nameIdentifier?.textRange?.shiftLeft(element.startOffset)
|
||||||
) {
|
|
||||||
override fun inspectionTarget(element: KtNamedFunction) = element.nameIdentifier ?: element
|
|
||||||
|
|
||||||
override fun inspectionText(element: KtNamedFunction) = "Function should have 'operator' modifier"
|
override fun inspectionText(element: KtNamedFunction) = "Function should have 'operator' modifier"
|
||||||
|
|
||||||
override val defaultFixText = "Add 'operator' modifier"
|
override val defaultFixText = "Add 'operator' modifier"
|
||||||
|
|
||||||
|
override val startFixInWriteAction: Boolean = false
|
||||||
|
|
||||||
override fun isApplicable(element: KtNamedFunction): Boolean {
|
override fun isApplicable(element: KtNamedFunction): Boolean {
|
||||||
if (element.nameIdentifier == null || element.hasModifier(KtTokens.OPERATOR_KEYWORD)) return false
|
if (element.nameIdentifier == null || element.hasModifier(KtTokens.OPERATOR_KEYWORD)) return false
|
||||||
val functionDescriptor = element.resolveToDescriptorIfAny() ?: return false
|
val functionDescriptor = element.resolveToDescriptorIfAny() ?: return false
|
||||||
@@ -31,7 +32,9 @@ class AddOperatorModifierInspection : AbstractApplicabilityBasedInspection<KtNam
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun applyTo(element: PsiElement, project: Project, editor: Editor?) {
|
override fun applyTo(element: PsiElement, project: Project, editor: Editor?) {
|
||||||
val function = element.getStrictParentOfType<KtNamedFunction>() ?: return
|
val declarations = (element as KtNamedFunction).withExpectedActuals()
|
||||||
function.withExpectedActuals().forEach { it.addModifier(KtTokens.OPERATOR_KEYWORD) }
|
project.executeWriteCommand(defaultFixText) {
|
||||||
|
for (declaration in declarations) declaration.addModifier(KtTokens.OPERATOR_KEYWORD)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user