blob: 83aae3060a1ea787906d50cc3dca26b38dc5252d [file] [log] [blame]
/*
* Copyright 2008 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.TreeLogger;
import java.io.PrintWriter;
import java.io.StringWriter;
/**
* A SourceWriter that accumulates source and returns it in the
* {@link #toString()} method.
*/
public class StringSourceWriter implements SourceWriter {
private final StringWriter buffer = new StringWriter();
private int indentLevel = 0;
private String indentPrefix = "";
private boolean needsIndent;
private final PrintWriter out = new PrintWriter(buffer);
public void beginJavaDocComment() {
println("/**");
indent();
indentPrefix = " * ";
}
/**
* This is a no-op.
*/
public void commit(TreeLogger logger) {
out.flush();
}
public void endJavaDocComment() {
out.println("*/");
outdent();
indentPrefix = "";
}
public void indent() {
indentLevel++;
}
public void indentln(String s) {
indent();
println(s);
outdent();
}
public void indentln(String s, Object... args) {
indentln(String.format(s, args));
}
public void outdent() {
indentLevel = Math.max(indentLevel - 1, 0);
}
public void print(String s) {
maybeIndent();
out.print(s);
}
public void print(String s, Object... args) {
print(String.format(s, args));
}
public void println() {
maybeIndent();
// Unix-style line endings for consistent behavior across platforms.
out.print('\n');
needsIndent = true;
}
public void println(String s) {
print(s);
println();
}
public void println(String s, Object... args) {
println(String.format(s, args));
}
@Override
public String toString() {
out.flush();
return buffer.getBuffer().toString();
}
private void maybeIndent() {
if (needsIndent) {
needsIndent = false;
for (int i = 0; i < indentLevel; i++) {
out.print(" ");
out.print(indentPrefix);
}
}
}
}