'Convert Gstring to String' honor existing escapes

This commit is contained in:
Maxim.Medvedev
2012-07-05 16:16:07 +04:00
parent 0d255e5fee
commit 1f96dbed5b
5 changed files with 18 additions and 9 deletions
+1 -1
View File
@@ -1065,7 +1065,7 @@
<intentionAction>
<bundleName>org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle</bundleName>
<categoryKey>intention.category.groovy/intention.category.conversions</categoryKey>
<className>org.jetbrains.plugins.groovy.intentions.conversions.ConvertGStringToStringIntention</className>
<className>org.jetbrains.plugins.groovy.intentions.conversions.strings.ConvertGStringToStringIntention</className>
</intentionAction>
<intentionAction>
<bundleName>org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle</bundleName>
@@ -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, "\\'");
}
}
}
@@ -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;
@@ -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;
@@ -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\\'''
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\\'