diff --git a/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/KotlinApplicableTool.kt b/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/KotlinApplicableTool.kt index 6d3bd7bf39cd..e21c579ca258 100644 --- a/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/KotlinApplicableTool.kt +++ b/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/KotlinApplicableTool.kt @@ -1,19 +1,16 @@ // Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.codeinsight.api.applicable -import org.jetbrains.kotlin.analysis.api.KtAllowAnalysisFromWriteAction -import org.jetbrains.kotlin.analysis.api.KtAllowAnalysisOnEdt import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.analyze -import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisFromWriteAction -import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisOnEdt import org.jetbrains.kotlin.psi.KtElement -/** - * A common base interface for [org.jetbrains.kotlin.idea.codeinsight.api.applicable.intentions.AbstractKotlinApplicableModCommandIntention] and - * [org.jetbrains.kotlin.idea.codeinsight.api.applicable.inspections.AbstractKotlinApplicableInspection]. - */ interface KotlinApplicableTool : KotlinApplicableToolBase { + /** + * A common base interface for [org.jetbrains.kotlin.idea.codeinsight.api.applicable.intentions.AbstractKotlinApplicableModCommandIntention], + * [org.jetbrains.kotlin.idea.codeinsight.api.applicable.intentions.AbstractKotlinModCommandWithContext], and + * [org.jetbrains.kotlin.idea.codeinsight.api.applicable.inspections.AbstractKotlinApplicableInspection]. + */ /** * Whether this tool is applicable to [element] by performing some resolution with the Analysis API. Any checks which don't require the @@ -27,12 +24,3 @@ internal fun KotlinApplicableTool.isApplicableWit analyze(element) { isApplicableByAnalyze(element) } - -@OptIn(KtAllowAnalysisOnEdt::class) -internal fun KotlinApplicableTool.isApplicableWithAnalyzeAllowEdt(element: ELEMENT): Boolean = - allowAnalysisOnEdt { - @OptIn(KtAllowAnalysisFromWriteAction::class) - allowAnalysisFromWriteAction { - isApplicableWithAnalyze(element) - } - } diff --git a/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/intentions/AbstractKotlinApplicableModCommandIntention.kt b/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/intentions/AbstractKotlinApplicableModCommandIntention.kt index 4b89fa0a8eba..fe8c6d94e3ad 100644 --- a/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/intentions/AbstractKotlinApplicableModCommandIntention.kt +++ b/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/intentions/AbstractKotlinApplicableModCommandIntention.kt @@ -3,7 +3,6 @@ package org.jetbrains.kotlin.idea.codeinsight.api.applicable.intentions import com.intellij.modcommand.ActionContext import com.intellij.modcommand.ModPsiUpdater -import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.idea.codeinsight.api.applicable.KotlinApplicableTool import org.jetbrains.kotlin.idea.codeinsight.api.applicable.isApplicableWithAnalyze import org.jetbrains.kotlin.psi.KtElement @@ -11,17 +10,14 @@ import kotlin.reflect.KClass abstract class AbstractKotlinApplicableModCommandIntention( elementType: KClass -) : AbstractKotlinApplicableModCommandIntentionBase(elementType), KotlinApplicableTool { +) : AbstractKotlinApplicableModCommandIntentionBase(elementType), + KotlinApplicableTool { - override fun isElementApplicable(element: ELEMENT, context: ActionContext): Boolean { - if (!super.isElementApplicable(element, context)) return false - - val applicableByAnalyze = analyze(element) { isApplicableByAnalyze(element) } - return applicableByAnalyze - } - - final override fun isApplicableTo(element: ELEMENT, caretOffset: Int): Boolean = - super.isApplicableTo(element, caretOffset) && isApplicableWithAnalyze(element) + override fun isElementApplicable( + element: ELEMENT, + context: ActionContext, + ): Boolean = super.isElementApplicable(element, context) + && isApplicableWithAnalyze(element) abstract fun apply(element: ELEMENT, context: ActionContext, updater: ModPsiUpdater) diff --git a/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/intentions/AbstractKotlinApplicableModCommandIntentionBase.kt b/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/intentions/AbstractKotlinApplicableModCommandIntentionBase.kt index 210f0715d7a1..99765bb7e711 100644 --- a/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/intentions/AbstractKotlinApplicableModCommandIntentionBase.kt +++ b/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/applicable/intentions/AbstractKotlinApplicableModCommandIntentionBase.kt @@ -8,10 +8,8 @@ import com.intellij.modcommand.Presentation import com.intellij.modcommand.PsiUpdateModCommandAction import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile -import com.intellij.refactoring.suggested.startOffset import org.jetbrains.kotlin.idea.codeinsight.api.applicable.KotlinApplicableToolBase import org.jetbrains.kotlin.idea.codeinsight.api.applicable.isApplicableToElement -import org.jetbrains.kotlin.idea.codeinsight.api.applicators.KotlinApplicabilityRange import org.jetbrains.kotlin.psi.KtBlockExpression import org.jetbrains.kotlin.psi.KtElement import kotlin.reflect.KClass @@ -26,24 +24,10 @@ abstract class AbstractKotlinApplicableModCommandIntentionBase( clazz: KClass ) : PsiUpdateModCommandAction(clazz.java), - KotlinApplicableToolWithContext { + KotlinApplicableToolWithContext, + KotlinApplicableTool { /** * @see com.intellij.codeInsight.intention.IntentionAction.getText @@ -37,19 +36,11 @@ abstract class AbstractKotlinModCommandWithContext * * @param element is a non-physical [PsiElement] */ - override fun isElementApplicable(element: ELEMENT, context: ActionContext): Boolean { - return isApplicableToElement(element, context.offset) && analyze(element) { isApplicableByAnalyze(element) } - } - - /* - * Checks if the element is applicable performing analysis. - * - * To be invoked on a background thread only. - * - * @param element is a non-physical [PsiElement] - */ - context(KtAnalysisSession) - protected open fun isApplicableByAnalyze(element: ELEMENT): Boolean = true + override fun isElementApplicable( + element: ELEMENT, + context: ActionContext, + ): Boolean = isApplicableToElement(element, context.offset) + && isApplicableWithAnalyze(element) protected open val isKotlinOnlyIntention: Boolean = true