diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index 4eb99e3bd30f..fb6c31c67230 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -1065,7 +1065,7 @@ org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle intention.category.groovy/intention.category.conversions - org.jetbrains.plugins.groovy.intentions.conversions.ConvertGStringToStringIntention + org.jetbrains.plugins.groovy.intentions.conversions.strings.ConvertGStringToStringIntention org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertGStringToStringIntention.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertGStringToStringIntention.java similarity index 91% rename from plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertGStringToStringIntention.java rename to plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertGStringToStringIntention.java index 3589bfe53ed4..ff7e715994ef 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertGStringToStringIntention.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertGStringToStringIntention.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.openapi.editor.Editor; import com.intellij.openapi.project.Project; @@ -154,9 +154,19 @@ public class ConvertGStringToStringIntention extends Intention { final StringBuilder buffer = new StringBuilder(); - boolean containsLineFeeds = text.indexOf('\n') >= 0 || text.indexOf('\r') >= 0; - GrStringUtil.escapeStringCharacters(text.length(), text, "'", false, false, buffer); - GrStringUtil.unescapeCharacters(buffer, containsLineFeeds ? "$'\"" : "$\"", true); + if (text.indexOf('\n') >= 0) { + GrStringUtil.escapeAndUnescapeSymbols(text, "", "\"$", buffer); + 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/ConvertibleGStringLiteralPredicate.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertibleGStringLiteralPredicate.java similarity index 96% rename from plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertibleGStringLiteralPredicate.java rename to plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertibleGStringLiteralPredicate.java index bc9205e3734e..ab6641e95de3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertibleGStringLiteralPredicate.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/strings/ConvertibleGStringLiteralPredicate.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.psi.PsiElement; import org.jetbrains.annotations.NonNls; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ExpressionGenerator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ExpressionGenerator.java index 90a565d8feaa..aa275520e18f 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ExpressionGenerator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ExpressionGenerator.java @@ -26,7 +26,7 @@ import com.intellij.psi.tree.IElementType; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.groovy.intentions.conversions.ConvertGStringToStringIntention; +import org.jetbrains.plugins.groovy.intentions.conversions.strings.ConvertGStringToStringIntention; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory; import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; diff --git a/plugins/groovy/testdata/intentions/convertGStringToString/ComplicatedCase_after.groovy b/plugins/groovy/testdata/intentions/convertGStringToString/ComplicatedCase_after.groovy index 1046430dd38c..affe87857c31 100644 --- a/plugins/groovy/testdata/intentions/convertGStringToString/ComplicatedCase_after.groovy +++ b/plugins/groovy/testdata/intentions/convertGStringToString/ComplicatedCase_after.groovy @@ -1,5 +1,4 @@ def x=5; def y=7; def name="abc" -print String.valueOf(x++ + ++y) + ' is very "strange" \'expression\'. x=' + String.valueOf(x) + String.valueOf(y) + '=y; ' + name + ' ' + String.valueOf(name.collect {true}) + ''' - wow\\''' \ No newline at end of file +print String.valueOf(x++ + ++y) + ' is very "strange" \'expression\'. x=' + String.valueOf(x) + String.valueOf(y) + '=y; ' + name + ' ' + String.valueOf(name.collect {true}) + ' \n wow\\' \ No newline at end of file