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") {