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