blob: 1b79e6dcc9e75cbd5cdac7d81dc8dee09a5258b0 [file] [log] [blame]
/*
* 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;
}
}