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

Reply via email to