StringTemplates name changes
Brian Goetz
brian.goetz at oracle.com
Mon Mar 27 14:18:50 UTC 2023
Nice.
So that means java.lang additions are limited to StringTemplate (with
nested Processor), and public jl.runtime limited to
Template{Runtime,Support}.
In the spirit of "nothing left to take away", who are the methods in
TemplateSupport used by? Authors of processors? There's not too much
here -- creation, interpolation, combination. Would these make sense as
static helper methods on STringTemplate? They'd be more discoverable
there.
On 3/27/2023 9:07 AM, Jim Laskey wrote:
>
> After the string template interface name changes, i.e.,
> |TemplateProcessor| becoming |Processor|, the rationale for the
> existence of |SimpleProcessor |and |StringProcessor| has lessened to
> the point where they should be dropped.
>
> |SimpleProcessor| owed its existence to the long-winded name
> |TemplateProcessor| and that ugly second parameter, |E|, in
> |Processor<R, E>| (in a many of cases |E| will be the unchecked
> |RuntimeException|). |StringProcessor| existed because most template
> processors will produce strings.
>
> |TemplateProcessor<JSONObject, RuntimeException> JSON = st-> new
> JSONObject(st.interpolate()); TemplateProcessor<String,
> RuntimeException> INTER = StringTemplate::interpolate;|
>
> vs.
>
> |SimpleProcessor<JSONObject> JSON = st-> new
> JSONObject(st.interpolate()); StringProcessor INTER =
> StringTemplate::interpolate;|
>
> It was thought that having the friendlier interfaces would provide
> clarity, hide |RuntimeException| and simplify explanation. The reality
> is that most developers will define template processors using full
> class declarations. Furthermore, developers will learn to use
> |RuntimeException| regularly due to the abundance of template
> processor examples.
>
> |public class InterpolateProcessor implements Processor<String,
> RuntimeException> { @Override public String process(StringTemplate st)
> { return st.interpolate(); } } SimpleProcessor<String> INTER = new
> InterpolateProcessor(); |
>
> Even after |SimpleProcessor| and |StringProcessor| go away, developers
> can still use the functional interface shorthand.
>
> |Processor<JSONObject, RuntimeException> JSON = st-> new
> JSONObject(st.interpolate()); Processor<String, RuntimeException>
> INTER = StringTemplate::interpolate;|
>
> And, a new factory method, |Processor.of|, will be added for fans of
> |var|.
>
> |var JSON = Processor.of(st-> new JSONObject(st.interpolate())); var
> INTER = Processor.of(StringTemplate::interpolate);|
>
> For those developers that like the notion of |SimpleProcessor| and
> |StringProcessor|, these interfaces can be trivially defined per project;
>
> |@FunctionalInterface public interface SimpleProcessor<R> extends
> Processor<R, RuntimeException> {} @FunctionalInterface public
> interface StringProcessor extends SimpleProcessor<String> {}|
>
>
>
>
>
>
>> On Mar 17, 2023, at 10:24 AM, Jim Laskey <james.laskey at oracle.com> wrote:
>>
>> This is a heads up about some name changes coming to the string
>> template feature with the intent of eliminating the
>> “java.lang.template” package along with clarifying the processor
>> hierarchy,
>>
>> _Old_ _New_
>> java.lang.template.Carriers* java.lang.runtime.Carriers*
>> java.lang.template.ReferencedKeyMap*
>> java.lang.runtime.ReferencedKeyMap*
>> java.lang.template.ReferenceKey* java.lang.runtime.ReferenceKey*
>> java.lang.template.StringTemplateImpl*
>> java.lang.runtime.StringTemplateImpl*
>> java.lang.template.StringTemplateImplFactory*
>> java.lang.runtime.StringTemplateImplFactory*
>> java.lang.runtime.TemplateRuntime java.lang.runtime.TemplateRuntime
>> java.lang.template.TemplateSupport* java.lang.runtime.TemplateSupport
>> java.lang.template.StringTemplate java.lang.StringTemplate
>> java.lang.template.ValidatingProcessor
>> java.lang.StringTemplate.Processor
>> java.lang.template.ProcessorLinkage
>> java.lang.StringTemplate.Processor.Linkage
>> java.lang.template.TemplateProcessor
>> java.lang.StringTemplate.SimpleProcessor
>> java.lang.template.StringProcessor
>> java.lang.StringTemplate.StringProcessor
>>
>>
>> (*) - package private
>>
>>
>> The new processor hierarchy will be;
>>
>> interface Processor<R, E>
>> interface SimpleProcessor<R> extends Processor<R, RuntimeException>
>> interface StringProcessor extends SimpleProcessor<String>
>>
>> It will take me a few days to update the JEP, CSRs, PR and JLS, so
>> stay tuned. As always, comments are welcome.
>>
>> Cheers,
>>
>> — Jim
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-spec-experts/attachments/20230327/5d53351b/attachment-0001.htm>
More information about the amber-spec-experts
mailing list