001: /*
002: * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.tools.doclets.internal.toolkit.builders;
027:
028: import com.sun.tools.doclets.internal.toolkit.*;
029: import com.sun.tools.doclets.internal.toolkit.util.*;
030: import com.sun.javadoc.*;
031:
032: /**
033: * The factory for constructing builders.
034: *
035: * This code is not part of an API.
036: * It is implementation that is subject to change.
037: * Do not use it as an API
038: *
039: * @author Jamie Ho
040: * @since 1.4
041: */
042:
043: public class BuilderFactory {
044:
045: /**
046: * The current configuration of the doclet.
047: */
048: private Configuration configuration;
049:
050: /**
051: * The factory to retrieve the required writers from.
052: */
053: private WriterFactory writerFactory;
054:
055: /**
056: * Construct a builder factory using the given configuration.
057: * @param configuration the configuration for the current doclet
058: * being executed.
059: */
060: public BuilderFactory(Configuration configuration) {
061: this .configuration = configuration;
062: this .writerFactory = configuration.getWriterFactory();
063: }
064:
065: /**
066: * Return the builder that builds the constant summary.
067: * @return the builder that builds the constant summary.
068: */
069: public AbstractBuilder getConstantsSummaryBuider() throws Exception {
070: return ConstantsSummaryBuilder.getInstance(configuration,
071: writerFactory.getConstantsSummaryWriter());
072: }
073:
074: /**
075: * Return the builder that builds the package summary.
076: *
077: * @param pkg the package being documented.
078: * @param prevPkg the previous package being documented.
079: * @param nextPkg the next package being documented.
080: * @return the builder that builds the constant summary.
081: */
082: public AbstractBuilder getPackageSummaryBuilder(PackageDoc pkg,
083: PackageDoc prevPkg, PackageDoc nextPkg) throws Exception {
084: return PackageSummaryBuilder.getInstance(configuration, pkg,
085: writerFactory.getPackageSummaryWriter(pkg, prevPkg,
086: nextPkg));
087: }
088:
089: /**
090: * Return the builder for the class.
091: *
092: * @param classDoc the class being documented.
093: * @param prevClass the previous class that was documented.
094: * @param nextClass the next class being documented.
095: * @param classTree the class tree.
096: * @return the writer for the class. Return null if this
097: * writer is not supported by the doclet.
098: */
099: public AbstractBuilder getClassBuilder(ClassDoc classDoc,
100: ClassDoc prevClass, ClassDoc nextClass, ClassTree classTree)
101: throws Exception {
102: return ClassBuilder.getInstance(configuration, classDoc,
103: writerFactory.getClassWriter(classDoc, prevClass,
104: nextClass, classTree));
105: }
106:
107: /**
108: * Return the builder for the annotation type.
109: *
110: * @param annotationType the annotation type being documented.
111: * @param prevType the previous type that was documented.
112: * @param nextType the next type being documented.
113: * @return the writer for the annotation type. Return null if this
114: * writer is not supported by the doclet.
115: */
116: public AbstractBuilder getAnnotationTypeBuilder(
117: AnnotationTypeDoc annotationType, Type prevType,
118: Type nextType) throws Exception {
119: return AnnotationTypeBuilder.getInstance(configuration,
120: annotationType, writerFactory.getAnnotationTypeWriter(
121: annotationType, prevType, nextType));
122: }
123:
124: /**
125: * Return an instance of the method builder for the given class.
126: *
127: * @return an instance of the method builder for the given class.
128: */
129: public AbstractBuilder getMethodBuilder(ClassWriter classWriter)
130: throws Exception {
131: return MethodBuilder.getInstance(configuration, classWriter
132: .getClassDoc(), writerFactory
133: .getMethodWriter(classWriter));
134: }
135:
136: /**
137: * Return an instance of the annotation type member builder for the given
138: * class.
139: *
140: * @return an instance of the annotation type memebr builder for the given
141: * annotation type.
142: */
143: public AbstractBuilder getAnnotationTypeOptionalMemberBuilder(
144: AnnotationTypeWriter annotationTypeWriter) throws Exception {
145: return AnnotationTypeOptionalMemberBuilder
146: .getInstance(
147: configuration,
148: annotationTypeWriter.getAnnotationTypeDoc(),
149: writerFactory
150: .getAnnotationTypeOptionalMemberWriter(annotationTypeWriter));
151: }
152:
153: /**
154: * Return an instance of the annotation type member builder for the given
155: * class.
156: *
157: * @return an instance of the annotation type memebr builder for the given
158: * annotation type.
159: */
160: public AbstractBuilder getAnnotationTypeRequiredMemberBuilder(
161: AnnotationTypeWriter annotationTypeWriter) throws Exception {
162: return AnnotationTypeRequiredMemberBuilder
163: .getInstance(
164: configuration,
165: annotationTypeWriter.getAnnotationTypeDoc(),
166: writerFactory
167: .getAnnotationTypeRequiredMemberWriter(annotationTypeWriter));
168: }
169:
170: /**
171: * Return an instance of the enum constants builder for the given class.
172: *
173: * @return an instance of the enum constants builder for the given class.
174: */
175: public AbstractBuilder getEnumConstantsBuilder(
176: ClassWriter classWriter) throws Exception {
177: return EnumConstantBuilder.getInstance(configuration,
178: classWriter.getClassDoc(), writerFactory
179: .getEnumConstantWriter(classWriter));
180: }
181:
182: /**
183: * Return an instance of the field builder for the given class.
184: *
185: * @return an instance of the field builder for the given class.
186: */
187: public AbstractBuilder getFieldBuilder(ClassWriter classWriter)
188: throws Exception {
189: return FieldBuilder.getInstance(configuration, classWriter
190: .getClassDoc(), writerFactory
191: .getFieldWriter(classWriter));
192: }
193:
194: /**
195: * Return an instance of the constructor builder for the given class.
196: *
197: * @return an instance of the constructor builder for the given class.
198: */
199: public AbstractBuilder getConstructorBuilder(ClassWriter classWriter)
200: throws Exception {
201: return ConstructorBuilder.getInstance(configuration,
202: classWriter.getClassDoc(), writerFactory
203: .getConstructorWriter(classWriter));
204: }
205:
206: /**
207: * Return an instance of the member summary builder for the given class.
208: *
209: * @return an instance of the member summary builder for the given class.
210: */
211: public AbstractBuilder getMemberSummaryBuilder(
212: ClassWriter classWriter) throws Exception {
213: return MemberSummaryBuilder.getInstance(classWriter,
214: configuration);
215: }
216:
217: /**
218: * Return an instance of the member summary builder for the given annotation
219: * type.
220: *
221: * @return an instance of the member summary builder for the given
222: * annotation type.
223: */
224: public AbstractBuilder getMemberSummaryBuilder(
225: AnnotationTypeWriter annotationTypeWriter) throws Exception {
226: return MemberSummaryBuilder.getInstance(annotationTypeWriter,
227: configuration);
228: }
229:
230: /**
231: * Return the builder that builds the serialized form.
232: *
233: * @return the builder that builds the serialized form.
234: */
235: public AbstractBuilder getSerializedFormBuilder() throws Exception {
236: return SerializedFormBuilder.getInstance(configuration);
237: }
238: }
|