On Thu, 3 Nov 2022 17:23:53 GMT, Jim Laskey <jlas...@openjdk.org> wrote:

>> Enhance the Java programming language with string templates, which are 
>> similar to string literals but contain embedded expressions. A string 
>> template is interpreted at run time by replacing each expression with the 
>> result of evaluating that expression, possibly after further validation and 
>> transformation. This is a [preview language feature and 
>> API](http://openjdk.java.net/jeps/12).
>
> Jim Laskey has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Internalize FormatConcatItem

src/java.base/share/classes/java/lang/template/TemplateRuntime.java line 158:

> 156:                 values[j++] = value;
> 157:             }
> 158:         }

The sides effects `fragments[i++] += fragmentIter.next();` and `i--` are ugly 
and can easily be overlook.
Also there is no need to use an iterator here, we know that the fragments have 
a List.get() in O(1).
The idea is to concat the last fragment of a template with the first one of the 
next template, so i propose

        ...
        String[] fragments = new String[size + 1];
        String last = "";
        int i = 0, j = 0;
        for (StringTemplate st : sts) {
            List<String> templateFragments = st.fragments();
            fragments[i++] = last.concat(templateFragments.get(0));  // concat 
last fragment with first new fragment
            int k = 0;
            for(; k < templateFragments.size() - 1; k++) {
              fragments[i++] = templateFragments.get(k);
            }
            last = templateFragments.get(k);
            for (Object value : st.values()) {
                values[j++] = value;
            }
        }
        fragments[i] = last;

-------------

PR: https://git.openjdk.org/jdk/pull/10889

Reply via email to