This is the CSR for the implementation of
[JEP-430 String Templates (Preview)](https://bugs.openjdk.java.net/browse/JDK-8273943)
Summary
-------
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).
Problem
-------
Injecting values into strings using the Java + string operator can often lead to unreadable
code and code that is prone to errors and/or injection attacks.
Solution
--------
[JEP-430 String Templates (Preview)](https://bugs.openjdk.java.net/browse/JDK-8273943)
introduces string templates which will allow users to inject values into a String in situ.
The use of string templates versus string interpolation allows for a richer feature that,
in addition to composition, allows validation and non-string result transformations.
Specification
-------------
The following APIs were modified
- [java.base/java/lang/invoke/StringConcatFactory.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/java.base/java/lang/invoke/StringConcatFactory.html)
- [jdk.compiler/com/sun/source/tree/Tree.Kind.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/jdk.compiler/com/sun/source/tree/Tree.Kind.html)
- [jdk.compiler/com/sun/source/tree/TreeVisitor.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/jdk.compiler/com/sun/source/tree/TreeVisitor.html)
- [jdk.compiler/com/sun/source/util/SimpleTreeVisitor.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/jdk.compiler/com/sun/source/util/SimpleTreeVisitor.html)
- [jdk.compiler/com/sun/source/util/TreeScanner.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/jdk.compiler/com/sun/source/util/TreeScanner.html)
The following APIs were added
- [java.base/java/lang/runtime/TemplateRuntime.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/java.base/java/lang/runtime/TemplateRuntime.html)
- [java.base/java/lang/template/ProcessorLinkage.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/java.base/java/lang/template/ProcessorLinkage.html)
- [java.base/java/lang/template/StringProcessor.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/java.base/java/lang/template/StringProcessor.html)
- [java.base/java/lang/template/StringTemplate.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/java.base/java/lang/template/StringTemplate.html)
- [java.base/java/lang/template/TemplateProcessor.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/java.base/java/lang/template/TemplateProcessor.html)
- [java.base/java/lang/template/ValidatingProcessor.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/java.base/java/lang/template/ValidatingProcessor.html)
- [java.base/java/util/FormatProcessor.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/java.base/java/util/FormatProcessor.html)
- [jdk.compiler/com/sun/source/tree/StringTemplateTree.html](https://cr.openjdk.java.net/~jlaskey/templates/docs/api/jdk.compiler/com/sun/source/tree/StringTemplateTree.html)