/* * 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.uibinder.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. */ class PrintWriterManager { private final GeneratorContext genCtx; private final String packageName; private final TreeLogger logger; private final Set<PrintWriter> writers = new HashSet<PrintWriter>(); PrintWriterManager(GeneratorContext genCtx, TreeLogger logger, String packageName) { this.genCtx = genCtx; this.packageName = packageName; this.logger = logger; } /** * Commit all writers we have vended. */ 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 */ 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 */ PrintWriter tryToMakePrintWriterFor(String name) { PrintWriter writer = genCtx.tryCreate(logger, packageName, name); if (writer != null) { writers.add(writer); } return writer; } }