diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index fb6c31c67230..155d756ceaaf 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -1115,7 +1115,7 @@ org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle intention.category.groovy/intention.category.conversions - org.jetbrains.plugins.groovy.intentions.conversions.ConvertStringToMultilineIntention + org.jetbrains.plugins.groovy.intentions.conversions.strings.ConvertStringToMultilineIntention org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertConcatenationToGstringIntention.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertConcatenationToGstringIntention.java index 9c521ae095c7..0cdd072b1b59 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertConcatenationToGstringIntention.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertConcatenationToGstringIntention.java @@ -135,7 +135,7 @@ public class ConvertConcatenationToGstringIntention extends Intention { if (multiline) { final int position = builder.length(); GrStringUtil.escapeAndUnescapeSymbols(text, "$", "'\"", builder); - fixAllTripleQuotes(builder, position); + GrStringUtil.fixAllTripleDoubleQuotes(builder, position); } else { GrStringUtil.escapeAndUnescapeSymbols(text, "$\"", "'", builder); @@ -152,12 +152,6 @@ public class ConvertConcatenationToGstringIntention extends Intention { } } - private static void fixAllTripleQuotes(StringBuilder builder, int position) { - for (int i = builder.indexOf("\"\"\"", position); i >= 0; i = builder.indexOf("\"\"\"", i)) { - builder.replace(i + 2, i + 3, "\\\""); - } - } - /** * append text to builder if the operand is 'something'.toString() */ diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertGStringToStringIntention.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertGStringToStringIntention.java index ff7e715994ef..1c51f7715440 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertGStringToStringIntention.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertGStringToStringIntention.java @@ -156,17 +156,11 @@ public class ConvertGStringToStringIntention extends Intention { final StringBuilder buffer = new StringBuilder(); if (text.indexOf('\n') >= 0) { GrStringUtil.escapeAndUnescapeSymbols(text, "", "\"$", buffer); - fixAllTripleQuotes(buffer, 0); + GrStringUtil.fixAllTripleQuotes(buffer, 0); } else { GrStringUtil.escapeAndUnescapeSymbols(text, "'", "\"$", buffer); } return GrStringUtil.addQuotes(buffer.toString(), false); } - - private static void fixAllTripleQuotes(StringBuilder builder, int position) { - for (int i = builder.indexOf("'''", position); i >= 0; i = builder.indexOf("'''", i)) { - builder.replace(i + 2, i + 3, "\\'"); - } - } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertStringToMultilineIntention.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertStringToMultilineIntention.java similarity index 90% rename from plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertStringToMultilineIntention.java rename to plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertStringToMultilineIntention.java index 62b5b8d43e03..3336ef55c071 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertStringToMultilineIntention.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertStringToMultilineIntention.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.plugins.groovy.intentions.conversions; +package org.jetbrains.plugins.groovy.intentions.conversions.strings; import com.intellij.lang.ASTNode; import com.intellij.openapi.diagnostic.Logger; @@ -93,17 +93,15 @@ public class ConvertStringToMultilineIntention extends Intention { } private static void appendSimpleStringValue(PsiElement element, StringBuilder buffer, String quote) { - final Object value = ((GrLiteralImpl)element).getValue(); - if (value instanceof String) { - if ("'''".equals(quote)) { - GrStringUtil.escapeStringCharacters(((String)value).length(), (String)value, "", false, true, buffer); - } - else { - GrStringUtil.escapeSymbolsForGString((CharSequence)value, false, false, buffer); - } + final String text = GrStringUtil.removeQuotes(element.getText()); + final int position = buffer.length(); + if ("'''".equals(quote)) { + GrStringUtil.escapeAndUnescapeSymbols(text, "", "'n", buffer); + GrStringUtil.fixAllTripleQuotes(buffer, position); } else { - buffer.append(GrStringUtil.removeQuotes(element.getText())); + GrStringUtil.escapeAndUnescapeSymbols(text, "", "\"n", buffer); + GrStringUtil.fixAllTripleDoubleQuotes(buffer, position); } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrStringUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrStringUtil.java index 25aa88b5b775..e10ab4840313 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrStringUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrStringUtil.java @@ -361,8 +361,15 @@ public class GrStringUtil { if (escaped) { if (toUnescape.indexOf(ch) < 0) { builder.append('\\'); + builder.append(ch); + } + else { + if (ch=='n') builder.append('\n'); + else if (ch=='b') builder.append('\b'); + else if (ch=='t') builder.append('\t'); + else if (ch=='f') builder.append('\r'); + else builder.append(ch); } - builder.append(ch); escaped = false; continue; } @@ -858,4 +865,16 @@ public class GrStringUtil { builder.append(buffer); } } + + public static void fixAllTripleQuotes(StringBuilder builder, int position) { + for (int i = builder.indexOf("'''", position); i >= 0; i = builder.indexOf("'''", i)) { + builder.replace(i + 2, i + 3, "\\'"); + } + } + + public static void fixAllTripleDoubleQuotes(StringBuilder builder, int position) { + for (int i = builder.indexOf("\"\"\"", position); i >= 0; i = builder.indexOf("\"\"\"", i)) { + builder.replace(i + 2, i + 3, "\\\""); + } + } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/intentions/ConvertStringToMultilineTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/intentions/ConvertStringToMultilineTest.groovy index 144dc9884b40..ca1ce6ca1693 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/intentions/ConvertStringToMultilineTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/intentions/ConvertStringToMultilineTest.groovy @@ -18,7 +18,7 @@ package org.jetbrains.plugins.groovy.intentions import com.intellij.openapi.application.WriteAction import org.jetbrains.annotations.Nullable import org.jetbrains.plugins.groovy.LightGroovyTestCase -import org.jetbrains.plugins.groovy.intentions.conversions.ConvertStringToMultilineIntention +import org.jetbrains.plugins.groovy.intentions.conversions.strings.ConvertStringToMultilineIntention /** * @author Max Medvedev