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 <[email protected]> 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


Reply via email to