GWT-RPC: don't waste memory doing DEBUG logging when not enabled

ProxyCreator should not set
SerializableTypeOracleBuilder.setLogOutputWriter(..)
if logging level is not reachable from DEBUG.

Bug: issue 8183
Change-Id: I02afbda0bea4e9288eef1cffbc6b7ddc1e68a2a4
diff --git a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
index 4f924c8..088401e 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
@@ -285,7 +285,7 @@
     Event event = SpeedTracerLogger.start(CompilerEventType.GENERATOR_RPC_STOB);
     SerializableTypeOracle typesSentFromBrowser;
     SerializableTypeOracle typesSentToBrowser;
-    String rpcLog;
+    String rpcLog = null;
     try {
       SerializableTypeOracleBuilder typesSentFromBrowserBuilder =
           new SerializableTypeOracleBuilder(logger, propertyOracle, context);
@@ -297,28 +297,33 @@
       addRoots(logger, typeOracle, typesSentFromBrowserBuilder, typesSentToBrowserBuilder);
 
       // Decide what types to send in each direction.
-      // Log the decisions to a string that will be written later in this method
       {
-        StringWriter stringWriter = new StringWriter();
-        PrintWriter writer = new PrintWriter(stringWriter);
+        if (logger.isLoggable(TreeLogger.Type.DEBUG)) {
+          // Log the decisions to a string that will be written later in this method
+          StringWriter stringWriter = new StringWriter();
+          PrintWriter writer = new PrintWriter(stringWriter);
 
-        typesSentFromBrowserBuilder.setLogOutputWriter(writer);
-        typesSentToBrowserBuilder.setLogOutputWriter(writer);
+          typesSentFromBrowserBuilder.setLogOutputWriter(writer);
+          typesSentToBrowserBuilder.setLogOutputWriter(writer);
 
-        writer.write("====================================\n");
-        writer.write("Types potentially sent from browser:\n");
-        writer.write("====================================\n\n");
-        writer.flush();
-        typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);
-
-        writer.write("===================================\n");
-        writer.write("Types potentially sent from server:\n");
-        writer.write("===================================\n\n");
-        writer.flush();
-        typesSentToBrowser = typesSentToBrowserBuilder.build(logger);
-
-        writer.close();
-        rpcLog = stringWriter.toString();
+          writer.write("====================================\n");
+          writer.write("Types potentially sent from browser:\n");
+          writer.write("====================================\n\n");
+          writer.flush();
+          typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);
+  
+          writer.write("===================================\n");
+          writer.write("Types potentially sent from server:\n");
+          writer.write("===================================\n\n");
+          writer.flush();
+          typesSentToBrowser = typesSentToBrowserBuilder.build(logger);
+          
+          writer.close();
+          rpcLog = stringWriter.toString();
+        } else {
+          typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);
+          typesSentToBrowser = typesSentToBrowserBuilder.build(logger);
+        }
       }
     } finally {
       event.end();
@@ -370,7 +375,7 @@
 
     srcWriter.commit(logger);
 
-    if (logger.isLoggable(TreeLogger.DEBUG)) {
+    if (rpcLog != null) {
       // Create an artifact explaining STOB's decisions. It will be emitted by
       // RpcLogLinker
       context.commitArtifact(logger, new RpcLogArtifact(serviceIntf.getQualifiedSourceName(),