Reviewers: jat,
Description:
Updates the SafeHtml template creator to append template arguments
individually rather than appending them in a single statement. The
current form was causing a JavaScript exception when invoking a template
with a large number of arguments. Also fixes a small javadoc issue.
Review by: [email protected]
Please review this at http://gwt-code-reviews.appspot.com/1376801/
Affected files:
M
user/src/com/google/gwt/safehtml/rebind/SafeHtmlTemplatesImplMethodCreator.java
Index:
user/src/com/google/gwt/safehtml/rebind/SafeHtmlTemplatesImplMethodCreator.java
===================================================================
---
user/src/com/google/gwt/safehtml/rebind/SafeHtmlTemplatesImplMethodCreator.java
(revision 9798)
+++
user/src/com/google/gwt/safehtml/rebind/SafeHtmlTemplatesImplMethodCreator.java
(working copy)
@@ -66,7 +66,6 @@
*/
private static final String URI_UTILS_FQCN = UriUtils.class.getName();
-
public SafeHtmlTemplatesImplMethodCreator(
AbstractGeneratorClassCreator classCreator) {
super(classCreator);
@@ -180,14 +179,12 @@
*/
private void emitMethodBodyFromTemplate(TreeLogger logger, String
template,
JParameter[] params) throws UnableToCompleteException {
- println("StringBuilder sb = new java.lang.StringBuilder()");
- indent();
- indent();
+ println("StringBuilder sb = new java.lang.StringBuilder();");
HtmlTemplateParser parser = new HtmlTemplateParser(logger);
parser.parseTemplate(template);
- for (TemplateChunk chunk : parser.getParsedTemplate().getChunks()) {
+ for (TemplateChunk chunk : parser.getParsedTemplate().getChunks()) {
if (chunk.getKind() == TemplateChunk.Kind.LITERAL) {
emitStringLiteral(((LiteralChunk) chunk).getLiteral());
} else if (chunk.getKind() == TemplateChunk.Kind.PARAMETER) {
@@ -208,7 +205,6 @@
+ template);
}
}
- println(";");
outdent();
outdent();
println("return new " + BLESSED_STRING_FQCN + "(sb.toString());");
@@ -233,7 +229,7 @@
private void emitParameterExpression(TreeLogger logger,
HtmlContext htmlContext, String formalParameterName,
JType parameterType) {
- print(".append(");
+ print("sb.append(");
switch (htmlContext.getType()) {
case CSS:
// TODO(xtof): Improve support for CSS.
@@ -267,7 +263,7 @@
"unknown HTML context for formal template parameter "
+ formalParameterName + ": " + htmlContext);
}
- println(")");
+ println(");");
}
/**
@@ -276,9 +272,9 @@
* @param str the {@link String} to emit as a literal
*/
private void emitStringLiteral(String str) {
- print(".append(");
+ print("sb.append(");
print(wrap(str));
- println(")");
+ println(");");
}
/**
@@ -293,7 +289,7 @@
* <li>If the parameter is of a primitive (e.g., numeric, boolean)
type, or
* of type {@link SafeHtml}, it is emitted as is, without escaping.
* <li>Otherwise, an expression that passes the paramter's value
through
- * {@link EscapeUtils#htmlEscape(String)} is emitted.
+ * {@link SafeHtmlUtils#htmlEscape(String)} is emitted.
* </ul>
*
* @param formalParameterName the name of the template method's formal
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors