Bug 571472: Don't resolve multi-line strings
Change-Id: Id6a8b208cb6bc965a2c8d781ba41bca3b3094685
diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/CdtVariableResolverTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/CdtVariableResolverTest.java
index 677885b..5d202c7 100644
--- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/CdtVariableResolverTest.java
+++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/CdtVariableResolverTest.java
@@ -50,6 +50,15 @@
if (macroName.equals("LOOP")) {
return "${loop}";
}
+ if (macroName.equals("VAR1")) {
+ return "var1";
+ }
+ if (macroName.equals("VAR2")) {
+ return "var\n2";
+ }
+ if (macroName.equals("VAR3")) {
+ return "var3";
+ }
if (macroName.equals(acceptedChars)) {
return "OK";
}
@@ -110,6 +119,8 @@
assertEquals("#workspace_loc:#Macro1#/#Macro2##", resolveToString("${workspace_loc:${Macro1}/${Macro2}}"));
assertEquals("#workspace_loc:#project_loc:/#Macro###",
resolveToString("${workspace_loc:${project_loc:/${Macro}}}"));
+ assertEquals("${ignored}\n${multiline}", resolveToString("${ignored}\n${multiline}"));
+ assertEquals("var1 var\n2 var3", resolveToString("${VAR1} ${VAR2} ${VAR3}"));
}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/cdtvariables/CdtVariableResolver.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/cdtvariables/CdtVariableResolver.java
index 818f50f..b5ec1ec 100644
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/cdtvariables/CdtVariableResolver.java
+++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/cdtvariables/CdtVariableResolver.java
@@ -95,6 +95,8 @@
* ${workspace_loc:/${ProjName}/} but resolved just once. No recursive
* macro names are allowed.
* It is not possible to prevent macros from expanding.
+ * For historical reasons (See Bug 571472), macros that are multi-line according to
+ * {@link Pattern}'s Line Terminators are not expanded.
*
* @param string - macro expression.
* @param substitutor - macro resolution provider to retrieve macro values.
@@ -106,6 +108,12 @@
if (string == null) {
return EMPTY_STRING;
}
+ // Bug 571472 to match historical behaviour, don't substitute multi-line strings
+ for (char ch : string.toCharArray()) {
+ if (ch == '\n' || ch == '\r' || (ch | 1) == '\u2029' || ch == '\u0085') {
+ return string;
+ }
+ }
final Pattern pattern = Pattern.compile("(\\$\\{([^${}]*)\\})"); //$NON-NLS-1$
final String VARIABLE_PREFIX_MASKED = "$\1"; //$NON-NLS-1$