From 1e5769acfd50dd5f90ff70d947033e325524466b Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 23 Dec 2014 14:00:08 +0300 Subject: [PATCH] Introduce Variable: Remove braces from replaced string template entries when possible #KT-5310 Fixed --- .../RemoveCurlyBracesFromTemplateIntention.kt | 13 ++++++++++--- .../KotlinIntroduceVariableHandler.java | 9 +++++++++ .../OccurrencesInStringTemplate.kt.after | 2 +- .../introduceVariable/StringInjection.kt.after | 2 +- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/RemoveCurlyBracesFromTemplateIntention.kt b/idea/src/org/jetbrains/jet/plugin/intentions/RemoveCurlyBracesFromTemplateIntention.kt index 700bd085983..24ee7a2ac18 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/RemoveCurlyBracesFromTemplateIntention.kt +++ b/idea/src/org/jetbrains/jet/plugin/intentions/RemoveCurlyBracesFromTemplateIntention.kt @@ -21,11 +21,13 @@ import org.jetbrains.jet.lang.psi.JetBlockStringTemplateEntry import org.jetbrains.jet.lang.psi.JetSimpleNameExpression import org.jetbrains.jet.lang.psi.JetPsiFactory import java.util.regex.* +import org.jetbrains.jet.lang.psi.JetStringTemplateEntryWithExpression public class RemoveCurlyBracesFromTemplateIntention : JetSelfTargetingIntention( "remove.unnecessary.curly.brackets.from.string.template", javaClass()) { class object { + val INSTANCE = RemoveCurlyBracesFromTemplateIntention() val pattern = Pattern.compile("[a-zA-Z0-9_].*") } @@ -35,10 +37,15 @@ public class RemoveCurlyBracesFromTemplateIntention : JetSelfTargetingIntention< return element.getExpression() is JetSimpleNameExpression } - override fun applyTo(element: JetBlockStringTemplateEntry, editor: Editor) { - if (!isApplicableTo(element)) return + fun convertIfApplicable(element: JetBlockStringTemplateEntry): JetStringTemplateEntryWithExpression { + if (!isApplicableTo(element)) return element val name = (element.getExpression() as JetSimpleNameExpression).getReferencedName() - element.replace(JetPsiFactory(element).createSimpleNameStringTemplateEntry(name)) + val newEntry = JetPsiFactory(element).createSimpleNameStringTemplateEntry(name) + return element.replace(newEntry) as JetStringTemplateEntryWithExpression + } + + override fun applyTo(element: JetBlockStringTemplateEntry, editor: Editor) { + convertIfApplicable(element) } } diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java b/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java index c5acd8e399c..4f659d23aff 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java @@ -53,6 +53,7 @@ import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; import org.jetbrains.jet.plugin.codeInsight.CodeInsightUtils; import org.jetbrains.jet.plugin.codeInsight.ShortenReferences; import org.jetbrains.jet.plugin.intentions.ConvertToBlockBodyAction; +import org.jetbrains.jet.plugin.intentions.RemoveCurlyBracesFromTemplateIntention; import org.jetbrains.jet.plugin.refactoring.JetNameSuggester; import org.jetbrains.jet.plugin.refactoring.JetNameValidatorImpl; import org.jetbrains.jet.plugin.refactoring.JetRefactoringBundle; @@ -445,6 +446,14 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase { else { result = (JetExpression)replace.replace(replacement); } + + PsiElement parent = result != null ? result.getParent() : null; + if (parent instanceof JetBlockStringTemplateEntry) { + JetStringTemplateEntryWithExpression newEntry = + RemoveCurlyBracesFromTemplateIntention.INSTANCE.convertIfApplicable((JetBlockStringTemplateEntry) parent); + result = newEntry.getExpression(); + } + references.add(result); if (isActualExpression) reference.set(result); diff --git a/idea/testData/refactoring/introduceVariable/OccurrencesInStringTemplate.kt.after b/idea/testData/refactoring/introduceVariable/OccurrencesInStringTemplate.kt.after index 6690add000b..2abba0a9a67 100644 --- a/idea/testData/refactoring/introduceVariable/OccurrencesInStringTemplate.kt.after +++ b/idea/testData/refactoring/introduceVariable/OccurrencesInStringTemplate.kt.after @@ -1,5 +1,5 @@ fun a(x: Int) { val i = x + 1 val a = i - "it's a number ${i}" + "it's a number $i" } \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/StringInjection.kt.after b/idea/testData/refactoring/introduceVariable/StringInjection.kt.after index 7caa4ba7bed..2b3281336ad 100644 --- a/idea/testData/refactoring/introduceVariable/StringInjection.kt.after +++ b/idea/testData/refactoring/introduceVariable/StringInjection.kt.after @@ -1,4 +1,4 @@ fun a() { val i = 1 - "it's a number ${i}" + "it's a number $i" } \ No newline at end of file