| /* |
| * 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; |
| |
| import java.util.ArrayList; |
| import java.util.LinkedHashSet; |
| import java.util.List; |
| import java.util.Set; |
| import java.util.TreeSet; |
| |
| /** |
| * A builder for {@link JavaSourceWriter} instances. |
| * <p> |
| * Experimental API - subject to change. |
| */ |
| public class JavaSourceWriterBuilder { |
| |
| private final String className; |
| private final String packageName; |
| private final AbortablePrintWriter printWriter; |
| |
| private final List<String> annotations = new ArrayList<String>(); |
| |
| private boolean isClass = true; |
| |
| private String classComment; |
| |
| private final Set<String> imports = new TreeSet<String>(); |
| |
| private final Set<String> interfaceNames = new LinkedHashSet<String>(); |
| |
| private String superClassName; |
| |
| /** |
| * @param printWriter |
| * @param packageName |
| * @param className |
| */ |
| public JavaSourceWriterBuilder(AbortablePrintWriter printWriter, String packageName, |
| String className) { |
| this.printWriter = printWriter; |
| this.packageName = packageName; |
| this.className = className; |
| } |
| |
| /** |
| * Add an class/interface annotation. |
| * |
| * @param declaration |
| */ |
| public void addAnnotationDeclaration(String declaration) { |
| annotations.add(declaration); |
| } |
| |
| /** |
| * Add an implemented/extended interface. |
| * |
| * @param intfName |
| */ |
| public void addImplementedInterface(String intfName) { |
| interfaceNames.add(intfName); |
| } |
| |
| /** |
| * Add an import entry. |
| * |
| * @param typeName fully-qualified source name |
| */ |
| public void addImport(String typeName) { |
| imports.add(typeName); |
| } |
| |
| /** |
| * Creates an implementation of {@link JavaSourceWriter} that can be used to write |
| * the innards of a class. Note that the subsequent changes to this factory do |
| * not affect the returned instance. |
| * |
| * @return a {@link JavaSourceWriter} instance |
| * @throws RuntimeException If the settings on this factory are inconsistent |
| * or invalid |
| */ |
| public SourceWriter createSourceWriter() { |
| return new JavaSourceWriter(printWriter, packageName, imports, isClass, classComment, |
| annotations, className, superClassName, interfaceNames); |
| } |
| |
| /** |
| * Get the annotations. |
| * |
| * @return list of annotations |
| */ |
| public Iterable<String> getAnnotationDeclarations() { |
| return annotations; |
| } |
| |
| /** |
| * Get the simple name of the class being created. |
| * |
| * @return class name |
| */ |
| public String getClassName() { |
| return className; |
| } |
| |
| /** |
| * Get the fully-qualified source name of the class being created. |
| * |
| * @return fqcn |
| */ |
| public String getFullyQualifiedClassName() { |
| return getPackageName() + "." + getClassName(); |
| } |
| |
| /** |
| * Get the implemented/extended interfaces for the class being created. |
| * |
| * @return list of interface names |
| */ |
| public Iterable<String> getInterfaceNames() { |
| return interfaceNames; |
| } |
| |
| /** |
| * Get the package of the class being created. |
| * |
| * @return package name |
| */ |
| public String getPackageName() { |
| return packageName; |
| } |
| |
| /** |
| * Get the superclass for the class being created. |
| * |
| * @return superclass name |
| */ |
| public String getSuperclassName() { |
| return superClassName; |
| } |
| |
| /** |
| * We are creating an interface instead of a class. |
| */ |
| public void makeInterface() { |
| isClass = false; |
| } |
| |
| /** |
| * Sets the java doc comment for <code>this</code>. |
| * |
| * @param comment java doc comment. |
| */ |
| public void setJavaDocCommentForClass(String comment) { |
| classComment = comment; |
| } |
| |
| /** |
| * Set the superclass of the class being created. |
| * |
| * @param superclassName |
| */ |
| public void setSuperclass(String superclassName) { |
| superClassName = superclassName; |
| } |
| } |