Why does Javac reject text blocks ending with four or more " ?

Alex Buckley alex.buckley at oracle.com
Thu Jul 30 08:13:12 UTC 2020


" and "" can be used anywhere in a text block except immediately prior 
to the closing delimiter. If a text block needs to end with " or "", 
then the " and "" may be escaped:

String s1 = """
   ...
   \"""";
String s2 = """
   ...
   \"\"""";

Writing just """" or """"" runs afoul of the longstanding JLS 3.2 rule 
about lexical translation choosing the longest possible token. That is, 
during the process of translating characters into the TextBlock token of 
the lexical grammar, the discovery of """ is translated as the closing 
delimiter of TextBlock, even if a further " follows immediately.

Alex

On 7/29/2020 10:05 PM, Jayaprakash Artanareeswaran wrote:
> Hello,
> 
> The following code is rejected by Javac in JDK 15, although JEP 378 doesn't say anything about it.
> 
>      static final String TEXT_BLOCK = """
>                1
>              """"; // Notice the four quotes here?
> 
> In fact, the JEP says this:
> 
> "The use of the escape sequences \" and \n is permitted in a text block, but not necessary or recommended. However, representing the sequence """ in a text block requires the escaping of at least one " character, to avoid mimicking the closing delimiter."
> 
> So, I would imagine it's perfectly okay for up to two consequent quotes to be used anywhere in a text block.
> 
> If this is indeed backed by the spec, can the experts please point me to the relevant section?
> Hopefully, I am asking this in the right mailing list.
> 
> Thanks,
> Jay
> 


More information about the amber-dev mailing list