xtend の JvmModelinferrer でクラス フィールドを生成しています。
val exp = NodeModelUtils::getNode(rule.expression);
members+=rule.toField("text",rule.newTypeRef('java.lang.String'))[
^static = true
val Procedure1<ITreeAppendable> b = [
append('''"«exp.text.replace('"','').replaceAll("\n"," \\n ")»"''')
]
initializer = b
setFinal(true)
setVisibility(JvmVisibility::PUBLIC)
]
最初の exp.text が
'a
b'
生成されたフィールドを次のようにしたいと思います。
String text = "a \n b";
代わりに、次のようになります。
String text = "a n b";
改行文字をまったく置き換えないかのように、次のようになります。
String text = "a
b";
もちろん、これはコンパイルされません。問題は、xtend が Java 文字列を評価しているように思われるため、Java では "\n" が "\n" にコンパイルされますが、xtend では "n" に評価されます。
\n を評価しないように xtend を取得して、生成された Java 文字列に保存するにはどうすればよいですか?