| /* |
| * Copyright 2011 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.codegen.server; |
| |
| /** |
| * Base implementation of {@link SourceWriter} that implements all the indenting |
| * and keeping track of comments. |
| * <p> |
| * Experimental API - subject to change. |
| */ |
| public abstract class SourceWriterBase implements SourceWriter { |
| |
| private boolean atStart; |
| |
| /** |
| * Are we currently in a comment? |
| */ |
| private boolean inComment; |
| |
| private int indent; |
| |
| public abstract void abort(); |
| |
| public void beginJavaDocComment() { |
| println("\n/**"); |
| inComment = true; |
| } |
| |
| public void close() { |
| outdent(); |
| println("}"); |
| } |
| |
| public void endJavaDocComment() { |
| inComment = false; |
| println("\n */"); |
| } |
| |
| public void indent() { |
| indent++; |
| } |
| |
| public void indentln(String string) { |
| indent(); |
| println(string); |
| outdent(); |
| } |
| |
| public void indentln(String format, Object... args) { |
| indentln(String.format(format, args)); |
| } |
| |
| public void outdent() { |
| if (indent > 0) { |
| --indent; |
| } |
| } |
| |
| public void print(String s) { |
| // If we just printed a newline, print an indent. |
| // |
| if (atStart) { |
| for (int j = 0; j < indent; ++j) { |
| writeString(" "); |
| } |
| if (inComment) { |
| writeString(" * "); |
| } |
| atStart = false; |
| } |
| // Now print up to the end of the string or the next newline. |
| // |
| String rest = null; |
| int i = s.indexOf("\n"); |
| if (i > -1 && i < s.length() - 1) { |
| rest = s.substring(i + 1); |
| s = s.substring(0, i + 1); |
| } |
| writeString(s); |
| // If rest is non-null, then s ended with a newline and we recurse. |
| // |
| if (rest != null) { |
| atStart = true; |
| print(rest); |
| } |
| } |
| |
| public void print(String format, Object... args) { |
| print(String.format(format, args)); |
| } |
| |
| public void println() { |
| print("\n"); |
| atStart = true; |
| } |
| |
| public void println(String string) { |
| print(string); |
| println(); |
| } |
| |
| public void println(String format, Object... args) { |
| println(String.format(format, args)); |
| } |
| |
| /** |
| * Write a string to the underlying output. |
| * |
| * @param s |
| */ |
| protected abstract void writeString(String s); |
| } |