diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/resources/kotlin.refactorings.k2.xml b/plugins/kotlin/refactorings/kotlin.refactorings.k2/resources/kotlin.refactorings.k2.xml index 1817a5d62ad0..4ebd5ba5e26c 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/resources/kotlin.refactorings.k2.xml +++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/resources/kotlin.refactorings.k2.xml @@ -43,5 +43,10 @@ + + + + diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/ExtractK2FunctionAction.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/ExtractK2FunctionAction.kt index 4d4150e5fe17..fde187586c4a 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/ExtractK2FunctionAction.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/ExtractK2FunctionAction.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.psi.KtElement class ExtractK2FunctionAction : BasePlatformRefactoringAction() { override fun getRefactoringHandler(provider: RefactoringSupportProvider): RefactoringActionHandler? = - KotlinFirExtractFunctionHandler() + KotlinFirExtractFunctionHandler(false) override fun isAvailableInEditorOnly(): Boolean { return true diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/ExtractK2FunctionToScopeAction.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/ExtractK2FunctionToScopeAction.kt new file mode 100644 index 000000000000..d6db43c853b6 --- /dev/null +++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/ExtractK2FunctionToScopeAction.kt @@ -0,0 +1,22 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +package org.jetbrains.kotlin.idea.k2.refactoring.extractFunction + +import com.intellij.lang.refactoring.RefactoringSupportProvider +import com.intellij.psi.PsiElement +import com.intellij.refactoring.RefactoringActionHandler +import com.intellij.refactoring.actions.BasePlatformRefactoringAction +import org.jetbrains.kotlin.idea.k2.refactoring.introduce.extractFunction.KotlinFirExtractFunctionHandler +import org.jetbrains.kotlin.psi.KtElement + +class ExtractK2FunctionToScopeAction : BasePlatformRefactoringAction() { + override fun getRefactoringHandler(provider: RefactoringSupportProvider): RefactoringActionHandler? = + KotlinFirExtractFunctionHandler(true) + + override fun isAvailableInEditorOnly(): Boolean { + return true + } + + override fun isEnabledOnElements(elements: Array): Boolean = + elements.all { it is KtElement } +} \ No newline at end of file diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/KotlinFirExtractFunctionHandler.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/KotlinFirExtractFunctionHandler.kt index 46c2e1ba5296..c5f041c02174 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/KotlinFirExtractFunctionHandler.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/extractFunction/KotlinFirExtractFunctionHandler.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.idea.k2.refactoring.extractFunction.ExtractionData import org.jetbrains.kotlin.idea.k2.refactoring.extractFunction.ExtractionGeneratorConfiguration import org.jetbrains.kotlin.idea.k2.refactoring.extractFunction.ExtractionResult import org.jetbrains.kotlin.idea.k2.refactoring.extractFunction.ui.KotlinFirExtractFunctionDialog +import org.jetbrains.kotlin.idea.k2.refactoring.introduce.extractFunction.KotlinFirExtractFunctionHandler.InteractiveExtractionHelper import org.jetbrains.kotlin.idea.k2.refactoring.introduce.extractionEngine.ExtractionDataAnalyzer import org.jetbrains.kotlin.idea.k2.refactoring.introduce.extractionEngine.ExtractionEngineHelper import org.jetbrains.kotlin.idea.refactoring.introduce.extractFunction.AbstractExtractKotlinFunctionHandler @@ -36,8 +37,11 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.isIdentifier import org.jetbrains.kotlin.utils.addToStdlib.safeAs -class KotlinFirExtractFunctionHandler(private val helper: ExtractionEngineHelper = InplaceExtractionHelper) : - AbstractExtractKotlinFunctionHandler() { +class KotlinFirExtractFunctionHandler( + private val acceptAllScopes: Boolean, + private val helper: ExtractionEngineHelper = InplaceExtractionHelper(acceptAllScopes) +) : + AbstractExtractKotlinFunctionHandler(acceptAllScopes) { object InteractiveExtractionHelper : ExtractionEngineHelper(EXTRACT_FUNCTION) { @OptIn(KtAllowAnalysisOnEdt::class) @@ -59,10 +63,10 @@ class KotlinFirExtractFunctionHandler(private val helper: ExtractionEngineHelper } } - object InplaceExtractionHelper : ExtractionEngineHelper(EXTRACT_FUNCTION), - AbstractInplaceExtractionHelper { + class InplaceExtractionHelper(private val acceptAllScopes: Boolean) : ExtractionEngineHelper(EXTRACT_FUNCTION), + AbstractInplaceExtractionHelper { override fun createRestartHandler(): AbstractExtractKotlinFunctionHandler = - KotlinFirExtractFunctionHandler(InteractiveExtractionHelper) + KotlinFirExtractFunctionHandler(acceptAllScopes, InteractiveExtractionHelper) override fun extractDuplicates( duplicateReplacers: Map Unit>, project: Project, editor: Editor diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/introduceFunction/AbstractK2IntroduceFunctionTest.kt b/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/introduceFunction/AbstractK2IntroduceFunctionTest.kt index 2a7cd64e533a..e7e35f6d34fe 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/introduceFunction/AbstractK2IntroduceFunctionTest.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/introduceFunction/AbstractK2IntroduceFunctionTest.kt @@ -33,6 +33,7 @@ abstract class AbstractK2IntroduceFunctionTest : AbstractExtractionTest() { extractionOptions: ExtractionOptions ): AbstractExtractKotlinFunctionHandler { return KotlinFirExtractFunctionHandler( + false, helper = object : ExtractionEngineHelper(EXTRACT_FUNCTION) { override fun adjustExtractionData(data: ExtractionData): ExtractionData { return ActionUtil.underModalProgress(project, "adjust for tests") {