From 5b666ff33f32188acaa1f322d59239ce91c246aa Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Fri, 20 Sep 2019 18:00:18 +0900 Subject: [PATCH] "Create type parameter from usage": don't remove backticks if necessary #KT-33299 Fixed --- .../createTypeParameter/CreateTypeParameterFromUsageFix.kt | 4 +++- .../createTypeParameter/inContainingDeclaration/backticks.kt | 4 ++++ .../inContainingDeclaration/backticks.kt.after | 4 ++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 5 +++++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/backticks.kt create mode 100644 idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/backticks.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterFromUsageFix.kt index cbada724057..da70a0cce4b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterFromUsageFix.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch +import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.TypeProjectionImpl import org.jetbrains.kotlin.types.TypeSubstitutor @@ -96,7 +97,8 @@ class CreateTypeParameterFromUsageFix( IdeDescriptorRenderers.SOURCE_CODE.renderType(upperBoundType) } else null val upperBound = upperBoundText?.let { psiFactory.createType(it) } - val newTypeParameterText = if (upperBound != null) "${typeParameter.name} : ${upperBound.text}" else typeParameter.name + val typeParameterName = typeParameter.name.quoteIfNeeded() + val newTypeParameterText = if (upperBound != null) "$typeParameterName : ${upperBound.text}" else typeParameterName val newTypeParameter = declaration.addTypeParameter(psiFactory.createTypeParameter(newTypeParameterText)) ?: error("Couldn't create type parameter from '$newTypeParameterText' for '$declaration'") elementsToShorten += newTypeParameter diff --git a/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/backticks.kt b/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/backticks.kt new file mode 100644 index 00000000000..e5fc837ad5e --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/backticks.kt @@ -0,0 +1,4 @@ +// "Create type parameter 'test text' in function 'a'" "true" +fun a() { + val c: `test text` +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/backticks.kt.after b/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/backticks.kt.after new file mode 100644 index 00000000000..00dee53ff2e --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/backticks.kt.after @@ -0,0 +1,4 @@ +// "Create type parameter 'test text' in function 'a'" "true" +fun <`test text`> a() { + val c: `test text` +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 4f16e98803a..cef0a40fbd2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4698,6 +4698,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("backticks.kt") + public void testBackticks() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/backticks.kt"); + } + @TestMetadata("classNoExplication.kt") public void testClassNoExplication() throws Exception { runTest("idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/classNoExplication.kt");