From 72ed74ab9a279fe56fc537ccd47652c63bea38ff Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 9 Jul 2013 16:10:28 +0400 Subject: [PATCH] Adding {} in string template if necessary. #KT-2637 in progress --- .../jetbrains/jet/lang/psi/JetPsiFactory.java | 6 ++++++ .../inline/KotlinInlineLocalHandler.java | 16 ++++++++++------ .../inline/addParenthesis/StringTemplate.kt | 4 ++++ .../addParenthesis/StringTemplate.kt.after | 3 +++ .../StringTemplateAlreadyInBraces.kt | 4 ++++ .../StringTemplateAlreadyInBraces.kt.after | 3 +++ .../addParenthesis/StringTemplateDontAdd.kt | 4 ++++ .../StringTemplateDontAdd.kt.after | 3 +++ .../refactoring/inline/InlineTestGenerated.java | 15 +++++++++++++++ 9 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 idea/testData/refactoring/inline/addParenthesis/StringTemplate.kt create mode 100644 idea/testData/refactoring/inline/addParenthesis/StringTemplate.kt.after create mode 100644 idea/testData/refactoring/inline/addParenthesis/StringTemplateAlreadyInBraces.kt create mode 100644 idea/testData/refactoring/inline/addParenthesis/StringTemplateAlreadyInBraces.kt.after create mode 100644 idea/testData/refactoring/inline/addParenthesis/StringTemplateDontAdd.kt create mode 100644 idea/testData/refactoring/inline/addParenthesis/StringTemplateDontAdd.kt.after diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java index b4aa38c5925..c8eddffae9d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java @@ -219,6 +219,12 @@ public class JetPsiFactory { return whenEntry; } + public static JetStringTemplateEntryWithExpression createBlockStringTemplateEntry(@NotNull Project project, @NotNull JetExpression expression) { + JetStringTemplateExpression stringTemplateExpression = (JetStringTemplateExpression) createExpression(project, + "\"${" + expression.getText() + "}\""); + return (JetStringTemplateEntryWithExpression) stringTemplateExpression.getEntries()[0]; + } + @NotNull public static JetImportDirective createImportDirective(Project project, @NotNull String path) { return createImportDirective(project, new ImportPath(path)); diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/inline/KotlinInlineLocalHandler.java b/idea/src/org/jetbrains/jet/plugin/refactoring/inline/KotlinInlineLocalHandler.java index 9a3a37e6bc0..7663295a17e 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/inline/KotlinInlineLocalHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/inline/KotlinInlineLocalHandler.java @@ -19,10 +19,7 @@ import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.refactoring.HelpID; import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.util.RefactoringMessageDialog; -import com.intellij.util.Processor; -import com.intellij.util.Query; -import org.jetbrains.jet.lang.psi.JetExpression; -import org.jetbrains.jet.lang.psi.JetProperty; +import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.plugin.JetLanguage; import java.util.Collection; @@ -43,7 +40,7 @@ public class KotlinInlineLocalHandler extends InlineActionHandler { } @Override - public void inlineElement(Project project, Editor editor, PsiElement element) { + public void inlineElement(final Project project, Editor editor, PsiElement element) { final JetProperty val = (JetProperty) element; String name = val.getName(); @@ -82,7 +79,14 @@ public class KotlinInlineLocalHandler extends InlineActionHandler { @Override public void run() { for (PsiReference reference : references) { - reference.getElement().replace(initializer.copy()); + PsiElement referenceElement = reference.getElement(); + if (referenceElement.getParent() instanceof JetSimpleNameStringTemplateEntry && + !(initializer instanceof JetSimpleNameExpression)) { + referenceElement.getParent().replace(JetPsiFactory.createBlockStringTemplateEntry(project, initializer)); + } + else { + referenceElement.replace(initializer.copy()); + } } val.delete(); diff --git a/idea/testData/refactoring/inline/addParenthesis/StringTemplate.kt b/idea/testData/refactoring/inline/addParenthesis/StringTemplate.kt new file mode 100644 index 00000000000..d96d2cbb1fd --- /dev/null +++ b/idea/testData/refactoring/inline/addParenthesis/StringTemplate.kt @@ -0,0 +1,4 @@ +fun f() { + val v = 150 + 150 + println("value is $v") +} \ No newline at end of file diff --git a/idea/testData/refactoring/inline/addParenthesis/StringTemplate.kt.after b/idea/testData/refactoring/inline/addParenthesis/StringTemplate.kt.after new file mode 100644 index 00000000000..dbce802673c --- /dev/null +++ b/idea/testData/refactoring/inline/addParenthesis/StringTemplate.kt.after @@ -0,0 +1,3 @@ +fun f() { + println("value is ${150 + 150}") +} \ No newline at end of file diff --git a/idea/testData/refactoring/inline/addParenthesis/StringTemplateAlreadyInBraces.kt b/idea/testData/refactoring/inline/addParenthesis/StringTemplateAlreadyInBraces.kt new file mode 100644 index 00000000000..3b7f67dc99f --- /dev/null +++ b/idea/testData/refactoring/inline/addParenthesis/StringTemplateAlreadyInBraces.kt @@ -0,0 +1,4 @@ +fun f() { + val v = 150 + 150 + println("value is ${v}") +} \ No newline at end of file diff --git a/idea/testData/refactoring/inline/addParenthesis/StringTemplateAlreadyInBraces.kt.after b/idea/testData/refactoring/inline/addParenthesis/StringTemplateAlreadyInBraces.kt.after new file mode 100644 index 00000000000..dbce802673c --- /dev/null +++ b/idea/testData/refactoring/inline/addParenthesis/StringTemplateAlreadyInBraces.kt.after @@ -0,0 +1,3 @@ +fun f() { + println("value is ${150 + 150}") +} \ No newline at end of file diff --git a/idea/testData/refactoring/inline/addParenthesis/StringTemplateDontAdd.kt b/idea/testData/refactoring/inline/addParenthesis/StringTemplateDontAdd.kt new file mode 100644 index 00000000000..a604421fe47 --- /dev/null +++ b/idea/testData/refactoring/inline/addParenthesis/StringTemplateDontAdd.kt @@ -0,0 +1,4 @@ +fun f() { + val v = otherValue + println("value is $v") +} \ No newline at end of file diff --git a/idea/testData/refactoring/inline/addParenthesis/StringTemplateDontAdd.kt.after b/idea/testData/refactoring/inline/addParenthesis/StringTemplateDontAdd.kt.after new file mode 100644 index 00000000000..eacd499b24e --- /dev/null +++ b/idea/testData/refactoring/inline/addParenthesis/StringTemplateDontAdd.kt.after @@ -0,0 +1,3 @@ +fun f() { + println("value is $otherValue") +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/inline/InlineTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/inline/InlineTestGenerated.java index 77561676703..0829a04fcb8 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/inline/InlineTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/inline/InlineTestGenerated.java @@ -218,6 +218,21 @@ public class InlineTestGenerated extends AbstractInlineTest { doTest("idea/testData/refactoring/inline/addParenthesis/UnaryIntoBinary.kt"); } + @TestMetadata("StringTemplate.kt") + public void testStringTemplate() throws Exception { + doTest("idea/testData/refactoring/inline/addParenthesis/StringTemplate.kt"); + } + + @TestMetadata("StringTemplateAlreadyInBraces.kt") + public void testStringTemplateAlreadyInBraces() throws Exception { + doTest("idea/testData/refactoring/inline/addParenthesis/StringTemplateAlreadyInBraces.kt"); + } + + @TestMetadata("StringTemplateDontAdd.kt") + public void testStringTemplateDontAdd() throws Exception { + doTest("idea/testData/refactoring/inline/addParenthesis/StringTemplateDontAdd.kt"); + } + } public static Test suite() {