diff --git a/org.eclipse.xtext.xbase.tests/src/org/eclipse/xtext/xbase/tests/compiler/Compiler2Tests.java b/org.eclipse.xtext.xbase.tests/src/org/eclipse/xtext/xbase/tests/compiler/Compiler2Tests.java index a18a6b70a68..9b13b56fc60 100644 --- a/org.eclipse.xtext.xbase.tests/src/org/eclipse/xtext/xbase/tests/compiler/Compiler2Tests.java +++ b/org.eclipse.xtext.xbase.tests/src/org/eclipse/xtext/xbase/tests/compiler/Compiler2Tests.java @@ -2201,14 +2201,14 @@ public void testStringLiteralWithUnixEOL_Issue2293() throws Exception { @Test public void testStringLiteralWithWindowsEOL_Issue2293() throws Exception { compilesTo( - "{var s = \"a multiline\r\nstring\"}", - "String s = \"a multiline\\nstring\";"); + "{var s = \"a multiline\r\nstring\\r\\nstring\"}", + "String s = \"a multiline\\nstring\\nstring\";"); } @Test - public void testStringLiteralWithEscapedWindowsEOL_Issue2293() throws Exception { + public void testStringLiteralWithCarriageReturn_Issue2293() throws Exception { compilesTo( - "{var s = \"a multiline\\\\r\nstring\"}", - "String s = \"a multiline\\\\r\\nstring\";"); + "{\"astring\".toString.replace(\"\\r\", \"\");}", + "return \"astring\".toString().replace(\"\\r\", \"\");"); } } diff --git a/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/compiler/LiteralsCompiler.java b/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/compiler/LiteralsCompiler.java index 5ef0c774b11..c528982ee35 100644 --- a/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/compiler/LiteralsCompiler.java +++ b/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/compiler/LiteralsCompiler.java @@ -90,7 +90,7 @@ protected void toJavaExpression(XStringLiteral literal, ITreeAppendable appendab // this would result in different generated Java files in Windows // see https://github.com/eclipse/xtext/issues/2293 // This is aligned with Java text blocks' "Normalization of Line Terminators" - String normalizationOfLineTerminators = literal.getValue().replace("\r", ""); + String normalizationOfLineTerminators = Strings.toUnixLineSeparator(literal.getValue()); String javaString = Strings.convertToJavaString(normalizationOfLineTerminators, useUnicodeEscapes); appendable.append("\"").append(javaString).append("\""); } diff --git a/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/interpreter/impl/XbaseInterpreter.java b/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/interpreter/impl/XbaseInterpreter.java index de19f728893..7539da3e4aa 100644 --- a/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/interpreter/impl/XbaseInterpreter.java +++ b/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/interpreter/impl/XbaseInterpreter.java @@ -52,6 +52,7 @@ import org.eclipse.xtext.nodemodel.util.NodeModelUtils; import org.eclipse.xtext.util.CancelIndicator; import org.eclipse.xtext.util.ReflectionUtil; +import org.eclipse.xtext.util.Strings; import org.eclipse.xtext.xbase.XAbstractFeatureCall; import org.eclipse.xtext.xbase.XAssignment; import org.eclipse.xtext.xbase.XBasicForLoopExpression; @@ -324,7 +325,7 @@ protected Object _doEvaluate(XStringLiteral literal, IEvaluationContext context, return literal.getValue().charAt(0); } // see org.eclipse.xtext.xbase.compiler.LiteralsCompiler.toJavaExpression(XStringLiteral, ITreeAppendable, boolean) - return literal.getValue().replace("\r", ""); + return Strings.toUnixLineSeparator(literal.getValue()); } /**