StringTemplates name changes

Brian Goetz brian.goetz at oracle.com
Mon Mar 27 14:55:05 UTC 2023


Was going by

_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



which didn't flag TemplateSupport as package-private.  If it gets a 
star, great.


On 3/27/2023 10:46 AM, Jim Laskey wrote:
> TemplateSupport is used internally in java.lang.runtime and is package 
> private. Nothing to see there.
>
>> On Mar 27, 2023, at 11:18 AM, Brian Goetz <brian.goetz at oracle.com> wrote:
>>
>> 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/81ab731b/attachment-0001.htm>


More information about the amber-spec-experts mailing list