StringTemplates name changes

Remi Forax forax at univ-mlv.fr
Mon Mar 27 14:38:18 UTC 2023


+1 from me. 

It makes the spec less intimidating for users. 

Rémi 

> From: "Jim Laskey" <james.laskey at oracle.com>
> To: "amber-spec-experts" <amber-spec-experts at openjdk.java.net>
> Sent: Monday, March 27, 2023 3:07:12 PM
> Subject: Re: StringTemplates name changes

> 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/90284cee/attachment.htm>


More information about the amber-spec-experts mailing list