Removed PrintWriterManager from bikeshed and "inlined" its use in bikeshed.

Review at http://gwt-code-reviews.appspot.com/627801

Review by: rjrjr@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8266 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/bikeshed/src/com/google/gwt/app/rebind/EditorSupportGenerator.java b/bikeshed/src/com/google/gwt/app/rebind/EditorSupportGenerator.java
index 80d6c0e..4625338 100644
--- a/bikeshed/src/com/google/gwt/app/rebind/EditorSupportGenerator.java
+++ b/bikeshed/src/com/google/gwt/app/rebind/EditorSupportGenerator.java
@@ -34,7 +34,6 @@
 import com.google.gwt.user.client.ui.HasText;
 import com.google.gwt.user.client.ui.TakesValue;
 import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
-import com.google.gwt.user.rebind.PrintWriterManager;
 import com.google.gwt.user.rebind.SourceWriter;
 import com.google.gwt.valuestore.shared.Property;
 
@@ -120,15 +119,12 @@
         interfaceType, logger);
     String implName = getImplName(superinterfaceType);
     String packageName = interfaceType.getPackage().getName();
-    PrintWriterManager printWriters = new PrintWriterManager(generatorContext,
-        logger, packageName);
-    PrintWriter out = printWriters.tryToMakePrintWriterFor(implName);
 
+    PrintWriter out = generatorContext.tryCreate(logger, packageName, implName);
     // If an implementation already exists, we don't need to do any work
     if (out != null) {
       generateOnce(logger, generatorContext, out, interfaceType, packageName,
           implName, superinterfaceType);
-      printWriters.commit();
     }
 
     return packageName + "." + implName;
@@ -190,6 +186,7 @@
 
     sw.outdent();
     sw.println("}");
+    generatorContext.commit(logger, out);
   }
 
   private Collection<JMethod> getAccessibleMethods(JClassType classType) {
diff --git a/bikeshed/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java b/bikeshed/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
index d8f1bc9..309ffd5 100644
--- a/bikeshed/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
+++ b/bikeshed/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
@@ -40,7 +40,6 @@
 import com.google.gwt.requestfactory.shared.ServerOperation;
 import com.google.gwt.requestfactory.shared.impl.RequestDataManager;
 import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
-import com.google.gwt.user.rebind.PrintWriterManager;
 import com.google.gwt.user.rebind.SourceWriter;
 import com.google.gwt.valuestore.shared.Property;
 import com.google.gwt.valuestore.shared.Record;
@@ -95,16 +94,15 @@
     }
 
     String packageName = interfaceType.getPackage().getName();
-    PrintWriterManager printWriters = new PrintWriterManager(generatorContext,
-        logger, packageName);
+
     // the replace protects against inner classes
     String implName = interfaceType.getName().replace('.', '_') + "Impl";
-    PrintWriter out = printWriters.tryToMakePrintWriterFor(implName);
+    PrintWriter out = generatorContext.tryCreate(logger, packageName, implName);
 
     // If an implementation already exists, we don't need to do any work
     if (out != null) {
-      generateOnce(logger, generatorContext, printWriters, out, interfaceType,
-          packageName, implName);
+      generateOnce(logger, generatorContext, out, interfaceType, packageName,
+          implName);
     }
 
     return packageName + "." + implName;
@@ -120,9 +118,8 @@
   }
 
   private void ensureRecordType(TreeLogger logger,
-      GeneratorContext generatorContext, PrintWriterManager printWriters,
-      String packageName, JClassType publicRecordType)
-      throws UnableToCompleteException {
+      GeneratorContext generatorContext, String packageName,
+      JClassType publicRecordType) throws UnableToCompleteException {
     TypeOracle typeOracle = generatorContext.getTypeOracle();
 
     if (!publicRecordType.isAssignableTo(typeOracle.findType(Record.class.getName()))) {
@@ -134,8 +131,8 @@
     }
 
     String recordImplTypeName = publicRecordType.getName() + "Impl";
-    PrintWriter pw = printWriters.tryToMakePrintWriterFor(recordImplTypeName);
-
+    PrintWriter pw = generatorContext.tryCreate(logger, packageName,
+        recordImplTypeName);
     if (pw != null) {
       logger = logger.branch(TreeLogger.DEBUG, "Generating "
           + publicRecordType.getName());
@@ -215,15 +212,16 @@
 
       sw.outdent();
       sw.println("}");
+      generatorContext.commit(logger, pw);
     }
 
     generatedRecordTypes.add(publicRecordType);
   }
 
   private void generateOnce(TreeLogger logger,
-      GeneratorContext generatorContext, PrintWriterManager printWriters,
-      PrintWriter out, JClassType interfaceType, String packageName,
-      String implName) throws UnableToCompleteException {
+      GeneratorContext generatorContext, PrintWriter out,
+      JClassType interfaceType, String packageName, String implName)
+      throws UnableToCompleteException {
 
     logger = logger.branch(TreeLogger.DEBUG, String.format(
         "Generating implementation of %s", interfaceType.getName()));
@@ -287,22 +285,22 @@
 
     for (JClassType nestedInterface : requestSelectors) {
       String nestedImplName = nestedInterface.getName() + "Impl";
-      PrintWriter pw = printWriters.makePrintWriterFor(nestedImplName);
+      PrintWriter pw = generatorContext.tryCreate(logger, packageName,
+          nestedImplName);
       if (pw != null) {
-        generateRequestSelectorImplementation(logger, generatorContext,
-            printWriters, pw, nestedInterface, interfaceType, packageName,
-            nestedImplName);
+        generateRequestSelectorImplementation(logger, generatorContext, pw,
+            nestedInterface, interfaceType, packageName, nestedImplName);
       }
     }
 
     // generate the mapping type implementation
-    PrintWriter pw = printWriters.makePrintWriterFor(recordToTypeMapName);
+    PrintWriter pw = generatorContext.tryCreate(logger, packageName,
+        recordToTypeMapName);
     if (pw != null) {
       generateRecordToTypeMap(logger, generatorContext, pw,
           recordToTypeInterface, packageName, recordToTypeMapName);
     }
-
-    printWriters.commit();
+    generatorContext.commit(logger, out);
   }
 
   private void generateRecordToTypeMap(TreeLogger logger,
@@ -349,12 +347,13 @@
 
     sw.outdent();
     sw.println("}");
+    generatorContext.commit(logger, out);
   }
 
   private void generateRequestSelectorImplementation(TreeLogger logger,
-      GeneratorContext generatorContext, PrintWriterManager printWriters,
-      PrintWriter out, JClassType interfaceType, JClassType mainType,
-      String packageName, String implName) throws UnableToCompleteException {
+      GeneratorContext generatorContext, PrintWriter out,
+      JClassType interfaceType, JClassType mainType, String packageName,
+      String implName) throws UnableToCompleteException {
     logger = logger.branch(TreeLogger.DEBUG, String.format(
         "Generating implementation of %s", interfaceType.getName()));
 
@@ -383,7 +382,7 @@
     for (JMethod method : interfaceType.getMethods()) {
       JClassType returnType = method.getReturnType().isParameterized().getTypeArgs()[0];
 
-      ensureRecordType(logger, generatorContext, printWriters,
+      ensureRecordType(logger, generatorContext,
           returnType.getPackage().getName(), returnType);
 
       ServerOperation annotation = method.getAnnotation(ServerOperation.class);
@@ -433,6 +432,7 @@
 
     sw.outdent();
     sw.println("}");
+    generatorContext.commit(logger, out);
   }
 
   /**
diff --git a/bikeshed/src/com/google/gwt/user/rebind/PrintWriterManager.java b/bikeshed/src/com/google/gwt/user/rebind/PrintWriterManager.java
deleted file mode 100644
index 0e65299..0000000
--- a/bikeshed/src/com/google/gwt/user/rebind/PrintWriterManager.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.user.rebind;
-
-import com.google.gwt.core.ext.GeneratorContext;
-import com.google.gwt.core.ext.TreeLogger;
-
-import java.io.PrintWriter;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Factory for printwriters creating source files in a particular package.
- */
-public class PrintWriterManager {
-  private final GeneratorContext genCtx;
-  private final String packageName;
-  private final TreeLogger logger;
-  private final Set<PrintWriter> writers = new HashSet<PrintWriter>();
-
-  public PrintWriterManager(GeneratorContext genCtx, TreeLogger logger,
-      String packageName) {
-    this.genCtx = genCtx;
-    this.packageName = packageName;
-    this.logger = logger;
-  }
-
-  /**
-   * Commit all writers we have vended.
-   */
-  public void commit() {
-    for (PrintWriter writer : writers) {
-      genCtx.commit(logger, writer);
-    }
-  }
-
-  /**
-   * @param name classname
-   * @return the printwriter
-   * @throws RuntimeException if this class has already been written
-   */
-  public PrintWriter makePrintWriterFor(String name) {
-    PrintWriter writer = tryToMakePrintWriterFor(name);
-    if (writer == null) {
-      throw new RuntimeException(String.format("Tried to write %s.%s twice.",
-          packageName, name));
-    }
-    return writer;
-  }
-
-  /**
-   * @param name classname
-   * @return the printwriter, or null if this class has already been written
-   */
-  public PrintWriter tryToMakePrintWriterFor(String name) {
-    PrintWriter writer = genCtx.tryCreate(logger, packageName, name);
-    if (writer != null) {
-      writers.add(writer);
-    }
-    return writer;
-  }
-}