diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt index b5347ea5964..0b6433513f5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt @@ -70,7 +70,13 @@ fun ExtractionGeneratorConfiguration.getDeclarationText( return CallableBuilder(builderTarget).let { builder -> builder.modifier(descriptor.visibility) - builder.typeParams(descriptor.typeParameters.map { it.originalDeclaration.getText()!! }) + builder.typeParams( + descriptor.typeParameters.map { + val typeParameter = it.originalDeclaration + val bound = typeParameter.extendsBound + typeParameter.name + (bound?.let { " : " + it.text } ?: "") + } + ) fun JetType.typeAsString(): String { return if (isSpecial()) DEBUG_TYPE_REFERENCE_STRING else descriptorRenderer.renderType(this) diff --git a/idea/testData/refactoring/extractFunction/typeParameters/noVarianceInFun.kt b/idea/testData/refactoring/extractFunction/typeParameters/noVarianceInFun.kt new file mode 100644 index 00000000000..4dd0ab516db --- /dev/null +++ b/idea/testData/refactoring/extractFunction/typeParameters/noVarianceInFun.kt @@ -0,0 +1,13 @@ +// PARAM_DESCRIPTOR: val e: T? defined in EntityClass.foo +// PARAM_TYPES: T?, Entity? +// SIBLING: +abstract public class EntityClass() { + fun foo() { + val e: T? = null + e?.value + } +} + +open class Entity { + var value: String? = null +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/typeParameters/noVarianceInFun.kt.after b/idea/testData/refactoring/extractFunction/typeParameters/noVarianceInFun.kt.after new file mode 100644 index 00000000000..004ba7e5381 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/typeParameters/noVarianceInFun.kt.after @@ -0,0 +1,17 @@ +// PARAM_DESCRIPTOR: val e: T? defined in EntityClass.foo +// PARAM_TYPES: T?, Entity? +// SIBLING: +abstract public class EntityClass() { + fun foo() { + val e: T? = null + __dummyTestFun__(e) + } +} + +private fun __dummyTestFun__(e: T?) { + e?.value +} + +open class Entity { + var value: String? = null +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java index 8a115ac8f4d..9525d80fa4f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java @@ -2292,6 +2292,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { doExtractFunctionTest(fileName); } + @TestMetadata("noVarianceInFun.kt") + public void testNoVarianceInFun() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/typeParameters/noVarianceInFun.kt"); + doExtractFunctionTest(fileName); + } + @TestMetadata("simpleTypeParameter.kt") public void testSimpleTypeParameter() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/typeParameters/simpleTypeParameter.kt");