Migrate from deprecated SoyTofu to SoySauce Also add missing dependency on ow2 which is exposed by this migration. Change-Id: I144334592c981d3ebd8810aa73171f1076680ee9
diff --git a/WORKSPACE b/WORKSPACE index 685fce3..2b176f4 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -302,3 +302,35 @@ artifact = "org.eclipse.jetty:jetty-util:" + JETTY_VERSION, sha1 = "13e6148bfda7ae511f69ae7e5e3ea898bc9b0e33", ) + +OW2_VERS = "7.0" + +maven_jar( + name = "ow2-asm", + artifact = "org.ow2.asm:asm:" + OW2_VERS, + sha1 = "d74d4ba0dee443f68fb2dcb7fcdb945a2cd89912", +) + +maven_jar( + name = "ow2-asm-analysis", + artifact = "org.ow2.asm:asm-analysis:" + OW2_VERS, + sha1 = "4b310d20d6f1c6b7197a75f1b5d69f169bc8ac1f", +) + +maven_jar( + name = "ow2-asm-commons", + artifact = "org.ow2.asm:asm-commons:" + OW2_VERS, + sha1 = "478006d07b7c561ae3a92ddc1829bca81ae0cdd1", +) + +maven_jar( + name = "ow2-asm-tree", + artifact = "org.ow2.asm:asm-tree:" + OW2_VERS, + sha1 = "29bc62dcb85573af6e62e5b2d735ef65966c4180", +) + +maven_jar( + name = "ow2-asm-util", + artifact = "org.ow2.asm:asm-util:" + OW2_VERS, + sha1 = "18d4d07010c24405129a6dbb0e92057f8779fb9d", +)
diff --git a/java/com/google/gitiles/BaseServlet.java b/java/com/google/gitiles/BaseServlet.java index 6a2e5eb..91c66bb 100644 --- a/java/com/google/gitiles/BaseServlet.java +++ b/java/com/google/gitiles/BaseServlet.java
@@ -204,7 +204,7 @@ protected void renderHtml( HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData) throws IOException { - renderer.render(req, res, templateName, startHtmlResponse(req, res, soyData)); + renderer.renderHtml(req, res, templateName, startHtmlResponse(req, res, soyData)); } /** @@ -227,7 +227,8 @@ HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData) throws IOException { req.setAttribute(STREAMING_ATTRIBUTE, true); - return renderer.renderStreaming(res, false, templateName, startHtmlResponse(req, res, soyData)); + return renderer.renderHtmlStreaming( + res, false, templateName, startHtmlResponse(req, res, soyData)); } /** @@ -259,7 +260,8 @@ res.setHeader(HttpHeaders.CONTENT_ENCODING, "gzip"); gzip = true; } - return renderer.renderStreaming(res, gzip, templateName, startHtmlResponse(req, res, soyData)); + return renderer.renderHtmlStreaming( + res, gzip, templateName, startHtmlResponse(req, res, soyData)); } private Map<String, ?> startHtmlResponse(
diff --git a/java/com/google/gitiles/DebugRenderer.java b/java/com/google/gitiles/DebugRenderer.java index 791067b..5e35e57 100644 --- a/java/com/google/gitiles/DebugRenderer.java +++ b/java/com/google/gitiles/DebugRenderer.java
@@ -21,7 +21,7 @@ import com.google.common.collect.Streams; import com.google.common.hash.HashCode; import com.google.template.soy.SoyFileSet; -import com.google.template.soy.tofu.SoyTofu; +import com.google.template.soy.jbcsrc.api.SoySauce; import java.io.File; import java.net.URISyntaxException; import java.net.URL; @@ -47,7 +47,7 @@ } @Override - protected SoyTofu getTofu() { + protected SoySauce getSauce() { SoyFileSet.Builder builder = SoyFileSet.builder().setCompileTimeGlobals(globals); for (URL template : templates.values()) { try { @@ -57,6 +57,6 @@ } builder.add(template); } - return builder.build().compileToTofu(); + return builder.build().compileTemplates(); } }
diff --git a/java/com/google/gitiles/DefaultErrorHandlingFilter.java b/java/com/google/gitiles/DefaultErrorHandlingFilter.java index 89086aa..ec52bb9 100644 --- a/java/com/google/gitiles/DefaultErrorHandlingFilter.java +++ b/java/com/google/gitiles/DefaultErrorHandlingFilter.java
@@ -103,7 +103,7 @@ protected void renderHtml( HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData) throws IOException { - renderer.render(req, res, templateName, startHtmlResponse(req, res, soyData)); + renderer.renderHtml(req, res, templateName, startHtmlResponse(req, res, soyData)); } private Map<String, ?> startHtmlResponse(
diff --git a/java/com/google/gitiles/DefaultRenderer.java b/java/com/google/gitiles/DefaultRenderer.java index 297350e..0307862 100644 --- a/java/com/google/gitiles/DefaultRenderer.java +++ b/java/com/google/gitiles/DefaultRenderer.java
@@ -18,13 +18,13 @@ import com.google.common.collect.ImmutableMap; import com.google.common.io.Resources; import com.google.template.soy.SoyFileSet; -import com.google.template.soy.tofu.SoyTofu; +import com.google.template.soy.jbcsrc.api.SoySauce; import java.net.URL; import java.util.Map; /** Renderer that precompiles Soy and uses static precompiled CSS. */ public class DefaultRenderer extends Renderer { - private final SoyTofu tofu; + private final SoySauce sauce; DefaultRenderer() { this("", ImmutableList.<URL>of(), ""); @@ -49,11 +49,11 @@ for (URL template : templates.values()) { builder.add(template); } - tofu = builder.build().compileToTofu(); + sauce = builder.build().compileTemplates(); } @Override - protected SoyTofu getTofu() { - return tofu; + protected SoySauce getSauce() { + return sauce; } }
diff --git a/java/com/google/gitiles/HtmlDiffFormatter.java b/java/com/google/gitiles/HtmlDiffFormatter.java index 44d2c18..1467d42 100644 --- a/java/com/google/gitiles/HtmlDiffFormatter.java +++ b/java/com/google/gitiles/HtmlDiffFormatter.java
@@ -111,7 +111,9 @@ renderer .newRenderer("gitiles.diffHeader") .setData(ImmutableMap.of("firstParts", parts, "rest", rest, "fileIndex", fileIndex)) - .render() + .renderHtml() + .get() + .toString() .getBytes(UTF_8)); }
diff --git a/java/com/google/gitiles/LogSoyData.java b/java/com/google/gitiles/LogSoyData.java index 96ef6ae..dc782ab 100644 --- a/java/com/google/gitiles/LogSoyData.java +++ b/java/com/google/gitiles/LogSoyData.java
@@ -22,7 +22,8 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.gitiles.CommitData.Field; -import com.google.template.soy.tofu.SoyTofu; +import com.google.template.soy.data.LoggingAdvisingAppendable; +import com.google.template.soy.jbcsrc.api.SoySauce; import java.io.IOException; import java.io.Writer; import java.util.Map; @@ -74,35 +75,43 @@ variant = firstNonNull(config.getString("logFormat", pretty, "variant"), pretty); } + private void renderHtml(SoySauce.Renderer renderer, LoggingAdvisingAppendable out) + throws IOException { + if (!renderer.renderHtml(out).result().isDone()) { + throw new IOException("failed to render HTML"); + } + } + public void renderStreaming( Paginator paginator, @Nullable String revision, Renderer renderer, - Writer out, + Writer writer, DateFormatter df, FooterBehavior footerBehavior) throws IOException { - renderer - .newRenderer("gitiles.logEntriesHeader") - .setData(toHeaderSoyData(paginator, revision)) - .render(out); - out.flush(); + LoggingAdvisingAppendable out = LoggingAdvisingAppendable.delegating(writer); + renderHtml( + renderer + .newRenderer("gitiles.logEntriesHeader") + .setData(toHeaderSoyData(paginator, revision)), + out); - SoyTofu.Renderer entryRenderer = renderer.newRenderer("gitiles.logEntryWrapper"); + SoySauce.Renderer entryRenderer = renderer.newRenderer("gitiles.logEntryWrapper"); boolean renderedEntries = false; for (RevCommit c : paginator) { - entryRenderer.setData(toEntrySoyData(paginator, c, df)).render(out); - out.flush(); + renderHtml(entryRenderer.setData(toEntrySoyData(paginator, c, df)), out); renderedEntries = true; } if (!renderedEntries) { - renderer.newRenderer("gitiles.emptyLog").render(out); + renderHtml(renderer.newRenderer("gitiles.emptyLog"), out); } - renderer - .newRenderer("gitiles.logEntriesFooter") - .setData(toFooterSoyData(paginator, revision, footerBehavior)) - .render(out); + renderHtml( + renderer + .newRenderer("gitiles.logEntriesFooter") + .setData(toFooterSoyData(paginator, revision, footerBehavior)), + out); } private Map<String, Object> toHeaderSoyData(Paginator paginator, @Nullable String revision) {
diff --git a/java/com/google/gitiles/Renderer.java b/java/com/google/gitiles/Renderer.java index bc85290..dbd5590 100644 --- a/java/com/google/gitiles/Renderer.java +++ b/java/com/google/gitiles/Renderer.java
@@ -29,7 +29,7 @@ import com.google.common.html.types.LegacyConversions; import com.google.common.io.ByteStreams; import com.google.common.net.HttpHeaders; -import com.google.template.soy.tofu.SoyTofu; +import com.google.template.soy.jbcsrc.api.SoySauce; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -147,16 +147,17 @@ return h.hash(); } - public String render(String templateName, Map<String, ?> soyData) { - return newRenderer(templateName).setData(soyData).render(); + public String renderHtml(String templateName, Map<String, ?> soyData) { + return newRenderer(templateName).setData(soyData).renderHtml().get().toString(); } - void render( + void renderHtml( HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData) throws IOException { res.setContentType("text/html"); res.setCharacterEncoding("UTF-8"); - byte[] data = newRenderer(templateName).setData(soyData).render().getBytes(UTF_8); + byte[] data = + newRenderer(templateName).setData(soyData).renderHtml().get().toString().getBytes(UTF_8); if (BaseServlet.acceptsGzipEncoding(req)) { res.addHeader(HttpHeaders.VARY, HttpHeaders.ACCEPT_ENCODING); res.setHeader(HttpHeaders.CONTENT_ENCODING, "gzip"); @@ -166,15 +167,15 @@ res.getOutputStream().write(data); } - OutputStream renderStreaming(HttpServletResponse res, String templateName, Map<String, ?> soyData) - throws IOException { - return renderStreaming(res, false, templateName, soyData); + OutputStream renderHtmlStreaming( + HttpServletResponse res, String templateName, Map<String, ?> soyData) throws IOException { + return renderHtmlStreaming(res, false, templateName, soyData); } - OutputStream renderStreaming( + OutputStream renderHtmlStreaming( HttpServletResponse res, boolean gzip, String templateName, Map<String, ?> soyData) throws IOException { - String html = newRenderer(templateName).setData(soyData).render(); + String html = newRenderer(templateName).setData(soyData).renderHtml().get().toString(); int id = html.indexOf(PLACEHOLDER); checkArgument(id >= 0, "Template must contain %s", PLACEHOLDER); @@ -211,17 +212,17 @@ }; } - SoyTofu.Renderer newRenderer(String templateName) { + SoySauce.Renderer newRenderer(String templateName) { ImmutableMap.Builder<String, Object> staticUrls = ImmutableMap.builder(); for (String key : STATIC_URL_GLOBALS.keySet()) { staticUrls.put( key.replaceFirst("^gitiles\\.", ""), LegacyConversions.riskilyAssumeTrustedResourceUrl(globals.get(key))); } - return getTofu() - .newRenderer(templateName) - .setIjData(ImmutableMap.of("staticUrls", staticUrls.build())); + return getSauce() + .renderTemplate(templateName) + .setIj(ImmutableMap.of("staticUrls", staticUrls.build())); } - protected abstract SoyTofu getTofu(); + protected abstract SoySauce getSauce(); }
diff --git a/lib/BUILD b/lib/BUILD index ab56df4..a8d6b51 100644 --- a/lib/BUILD +++ b/lib/BUILD
@@ -21,4 +21,9 @@ "guava", "guava-failureaccess", "prettify", + "ow2-asm", + "ow2-asm-analysis", + "ow2-asm-commons", + "ow2-asm-tree", + "ow2-asm-util", ]]
diff --git a/lib/soy/BUILD b/lib/soy/BUILD index 5666b8c..edef66a 100644 --- a/lib/soy/BUILD +++ b/lib/soy/BUILD
@@ -10,6 +10,11 @@ runtime_deps = [ "@html-types//jar", "@icu4j//jar", + "@ow2-asm-analysis//jar", + "@ow2-asm-commons//jar", + "@ow2-asm-tree//jar", + "@ow2-asm-util//jar", + "@ow2-asm//jar", "@protobuf//jar", ], )