RFR: 8222852: Reduce String concat combinator tree shapes by folding constants into prependers

Peter Levart peter.levart at gmail.com
Fri Apr 26 09:19:46 UTC 2019



On 4/26/19 11:08 AM, Peter Levart wrote:
> I wonder if it is even possible to create a test that would do 
> something like the following:
>
>         String s = ...
>         String s2 = s + "const1" + "const2" + s;
>
> ...since javac concatenates consecutive constants into a single 
> constant. So this actually becomes:
>
>         String s2 = s + "const1const2" + s;
>
> ...in bytecode.

Well, you don't really have to assemble the appropriate bytecodes. You 
could just invoke the bootstrap method directly in the test, like:

         CallSite cs = StringConcatFactory.makeConcatWithConstants(
             MethodHandles.lookup(),
             "concat",
             MethodType.methodType(String.class, String.class, 
String.class),
             "\u0001\u0002\u0002\u0001",
             "C", "D"
         );

         MethodHandle mh = cs.dynamicInvoker();

         String res = (String) mh.invokeExact("A", "B");

         assert "ACDB".equals(res);


Regards, Peter



More information about the core-libs-dev mailing list