From a23105ad9d175751eec28a2d69e64acbcc01b2d4 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 21 May 2024 15:08:47 +0200 Subject: [PATCH] [kotlin] k2 introduce property: specify a functional type explicitly ^KTIJ-6298 fixed GitOrigin-RevId: 6aeae17e0d189e6d349ba70f803db36434183818 --- .../refactoring/introduce/AbstractExtractionTest.kt | 2 +- .../introduce/ExtractionTestGenerated.java | 5 +++++ .../refactoring/introduceProperty/functionalType.kt | 11 +++++++++++ .../introduceProperty/functionalType.kt.after | 13 +++++++++++++ .../extractionEngine/ExtractFunctionGenerator.kt | 6 +++++- .../introduce/K2IntroducePropertyTestGenerated.java | 5 +++++ 6 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/introduceProperty/functionalType.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/introduceProperty/functionalType.kt.after diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/AbstractExtractionTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/AbstractExtractionTest.kt index c9679f1baece..5ff2a1a5423c 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/AbstractExtractionTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/AbstractExtractionTest.kt @@ -312,7 +312,7 @@ abstract class AbstractExtractionTest : KotlinLightCodeInsightFixtureTestCase() } protected open fun doIntroducePropertyTest(unused: String) { - doTest { file -> + doTestIfNotDisabledByFileDirective { file -> file as KtFile val extractionTarget = propertyTargets.single { diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java index 696ffa9cb3da..531b8a7c1f18 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java @@ -3235,6 +3235,11 @@ public abstract class ExtractionTestGenerated extends AbstractExtractionTest { runTest("testData/refactoring/introduceProperty/extractWithParams.kt"); } + @TestMetadata("functionalType.kt") + public void testFunctionalType() throws Exception { + runTest("testData/refactoring/introduceProperty/functionalType.kt"); + } + @TestMetadata("kt21530.kt") public void testKt21530() throws Exception { runTest("testData/refactoring/introduceProperty/kt21530.kt"); diff --git a/plugins/kotlin/idea/tests/testData/refactoring/introduceProperty/functionalType.kt b/plugins/kotlin/idea/tests/testData/refactoring/introduceProperty/functionalType.kt new file mode 100644 index 000000000000..e506eac53aab --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/introduceProperty/functionalType.kt @@ -0,0 +1,11 @@ +// EXTRACTION_TARGET: property with initializer + +fun foo(p: (String) -> Boolean) { + +} + +fun bar() { + foo { it.isBlank() } +} + +// IGNORE_K1 \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/introduceProperty/functionalType.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/introduceProperty/functionalType.kt.after new file mode 100644 index 000000000000..404eb19ede5b --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/introduceProperty/functionalType.kt.after @@ -0,0 +1,13 @@ +// EXTRACTION_TARGET: property with initializer + +fun foo(p: (String) -> Boolean) { + +} + +private val function: (String) -> Boolean = { it.isBlank() } + +fun bar() { + foo(function) +} + +// IGNORE_K1 \ No newline at end of file diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractFunctionGenerator.kt b/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractFunctionGenerator.kt index 89428ccc1e26..08af5e7919c5 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractFunctionGenerator.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractFunctionGenerator.kt @@ -12,6 +12,8 @@ import org.jetbrains.kotlin.analysis.api.KtAllowAnalysisOnEdt 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.analysis.api.types.KtFunctionalType +import org.jetbrains.kotlin.analysis.api.types.KtUsualClassType import org.jetbrains.kotlin.idea.base.codeInsight.ShortenReferencesFacility import org.jetbrains.kotlin.idea.base.psi.isMultiLine import org.jetbrains.kotlin.idea.base.psi.moveInsideParenthesesAndReplaceWith @@ -645,7 +647,9 @@ abstract class ExtractFunctionGenerator