From 1032e663d756a554517d0a1a0275b2e04da461ed Mon Sep 17 00:00:00 2001 From: Shaverdova Elena Date: Mon, 6 Jun 2016 16:29:48 +0200 Subject: [PATCH] WI-31889 Template project: can't save some files --- .../SaveProjectAsTemplateAction.java | 10 ++++++++- .../templates/TemplateModuleBuilder.java | 22 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/platform/templates/SaveProjectAsTemplateAction.java b/platform/lang-impl/src/com/intellij/platform/templates/SaveProjectAsTemplateAction.java index 5cb33f85b025..8eb8a8ce1222 100644 --- a/platform/lang-impl/src/com/intellij/platform/templates/SaveProjectAsTemplateAction.java +++ b/platform/lang-impl/src/com/intellij/platform/templates/SaveProjectAsTemplateAction.java @@ -292,9 +292,17 @@ public class SaveProjectAsTemplateAction extends AnAction { } char c = input.charAt(i); - if (c == '$' || c == '#') { + if (c == '#' || c == '[' || c == ']' || c =='{' || c == '}' || c =='(' || c == ')') { builder.append('\\'); } + if (c == '$') { + builder.append('\\'); + if(input.startsWith("$true", i) || input.startsWith("$false", i) || input.startsWith("$.", i)){ + builder.append(c).append('\\'); + continue; + } + } + builder.append(c); } return builder.toString(); diff --git a/platform/lang-impl/src/com/intellij/platform/templates/TemplateModuleBuilder.java b/platform/lang-impl/src/com/intellij/platform/templates/TemplateModuleBuilder.java index 00fdd3508707..7b75d6be977d 100644 --- a/platform/lang-impl/src/com/intellij/platform/templates/TemplateModuleBuilder.java +++ b/platform/lang-impl/src/com/intellij/platform/templates/TemplateModuleBuilder.java @@ -330,8 +330,26 @@ public class TemplateModuleBuilder extends ModuleBuilder { properties.put(ProjectTemplateParameterFactory.IJ_PROJECT_NAME, projectName); } String merged = FileTemplateUtil.mergeTemplate(properties, content, true, exceptionConsumer); - return StringUtilRt.convertLineSeparators(merged.replace("\\$", "$").replace("\\#", "#"), SystemInfo.isWindows ? "\r\n" : "\n"). - getBytes(CharsetToolkit.UTF8_CHARSET); + StringBuilder sb = new StringBuilder(merged.length()); + for (int i = 0; i < merged.length(); i++) { + char c = merged.charAt(i); + if (c == '\\') { + if(i < merged.length() -1){ + if(merged.startsWith("\\$\\true", i) || merged.startsWith("\\$\\false", i) || merged.startsWith("\\$\\.", i)){ + sb.append("$"); + i+=2; + continue; + } + + char d = merged.charAt(i+1); + if(d == '$' || d == '#' || d == '[' || d == ']' || d =='{' || d == '}' || d =='(' || d == ')'){ + continue; + } + } + } + sb.append(c); + } + return StringUtilRt.convertLineSeparators(sb.toString(), SystemInfo.isWindows ? "\r\n" : "\n").getBytes(CharsetToolkit.UTF8_CHARSET); } @Nullable