diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt index 794873140b6..dcb5973510d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt @@ -452,10 +452,12 @@ object KotlinIntroduceVariableHandler : KotlinIntroduceHandlerBase() { private fun suggestNamesForComponent(descriptor: FunctionDescriptor, project: Project, validator: (String) -> Boolean): Set { return LinkedHashSet().apply { - descriptor.returnType?.let { addAll(KotlinNameSuggester.suggestNamesByType(it, validator)) } - + val descriptorName = descriptor.name.asString() val componentName = (DescriptorToSourceUtilsIde.getAnyDeclaration(project, descriptor) as? PsiNamedElement)?.name - ?: descriptor.name.asString() + ?: descriptorName + if (componentName == descriptorName) { + descriptor.returnType?.let { addAll(KotlinNameSuggester.suggestNamesByType(it, validator)) } + } add(KotlinNameSuggester.suggestNameByName(componentName, validator)) } } diff --git a/idea/testData/refactoring/introduceVariable/multiDeclarations/userDataClass.kt b/idea/testData/refactoring/introduceVariable/multiDeclarations/userDataClass.kt new file mode 100644 index 00000000000..7b3569db2d4 --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/multiDeclarations/userDataClass.kt @@ -0,0 +1,5 @@ +fun test() { + Dimension(1, 2) +} + +data class Dimension(val width: Int, val height: Int) \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/multiDeclarations/userDataClass.kt.after b/idea/testData/refactoring/introduceVariable/multiDeclarations/userDataClass.kt.after new file mode 100644 index 00000000000..7c6f228bdef --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/multiDeclarations/userDataClass.kt.after @@ -0,0 +1,5 @@ +fun test() { + val (width, height) = Dimension(1, 2) +} + +data class Dimension(val width: Int, val height: Int) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java index 7de1ee38986..14b4203c284 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java @@ -563,6 +563,12 @@ public class ExtractionTestGenerated extends AbstractExtractionTest { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/multiDeclarations/usedExpr.kt"); doIntroduceVariableTest(fileName); } + + @TestMetadata("userDataClass.kt") + public void testUserDataClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/multiDeclarations/userDataClass.kt"); + doIntroduceVariableTest(fileName); + } } @TestMetadata("idea/testData/refactoring/introduceVariable/script")