com.google.gwt.user.rebind.StringSourceWriter.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.user.rebind.StringSourceWriter.java

Source

/*
 * 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);
            }
        }
    }
}