blob: a19b35770f996c01970ccbd7a81754c69b8cae09 [file] [log] [blame]
/*
* Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package com.sun.tools.doclets.formats.html;
import com.sun.tools.doclets.internal.toolkit.*;
import com.sun.tools.doclets.internal.toolkit.util.*;
import com.sun.tools.doclets.internal.toolkit.builders.*;
import com.sun.javadoc.*;
/**
* Generate the Class Information Page.
* @see com.sun.javadoc.ClassDoc
* @see java.util.Collections
* @see java.util.List
* @see java.util.ArrayList
* @see java.util.HashMap
*
* @author Atul M Dambalkar
* @author Robert Field
*/
public class AnnotationTypeWriterImpl extends SubWriterHolderWriter
implements AnnotationTypeWriter {
protected AnnotationTypeDoc annotationType;
protected Type prev;
protected Type next;
/**
* @param annotationType the annotation type being documented.
* @param prevType the previous class that was documented.
* @param nextType the next class being documented.
*/
public AnnotationTypeWriterImpl (AnnotationTypeDoc annotationType,
Type prevType, Type nextType)
throws Exception {
super(ConfigurationImpl.getInstance(),
DirectoryManager.getDirectoryPath(annotationType.containingPackage()),
annotationType.name() + ".html",
DirectoryManager.getRelativePath(annotationType.containingPackage().name()));
this.annotationType = annotationType;
configuration.currentcd = annotationType.asClassDoc();
this.prev = prevType;
this.next = nextType;
}
/**
* Print this package link
*/
protected void navLinkPackage() {
navCellStart();
printHyperLink("package-summary.html", "",
configuration.getText("doclet.Package"), true, "NavBarFont1");
navCellEnd();
}
/**
* Print class page indicator
*/
protected void navLinkClass() {
navCellRevStart();
fontStyle("NavBarFont1Rev");
boldText("doclet.Class");
fontEnd();
navCellEnd();
}
/**
* Print class use link
*/
protected void navLinkClassUse() {
navCellStart();
printHyperLink("class-use/" + filename, "",
configuration.getText("doclet.navClassUse"), true, "NavBarFont1");
navCellEnd();
}
/**
* Print previous package link
*/
protected void navLinkPrevious() {
if (prev == null) {
printText("doclet.Prev_Class");
} else {
printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS,
prev.asClassDoc(), "",
configuration.getText("doclet.Prev_Class"), true));
}
}
/**
* Print next package link
*/
protected void navLinkNext() {
if (next == null) {
printText("doclet.Next_Class");
} else {
printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS,
next.asClassDoc(), "",
configuration.getText("doclet.Next_Class"), true));
}
}
/**
* {@inheritDoc}
*/
public void writeHeader(String header) {
String pkgname = (annotationType.containingPackage() != null)?
annotationType.containingPackage().name(): "";
String clname = annotationType.name();
printHtmlHeader(clname,
configuration.metakeywords.getMetaKeywords(annotationType), true);
printTop();
navLinks(true);
hr();
println("<!-- ======== START OF CLASS DATA ======== -->");
h2();
if (pkgname.length() > 0) {
font("-1"); print(pkgname); fontEnd(); br();
}
print(header + getTypeParameterLinks(new LinkInfoImpl(
LinkInfoImpl.CONTEXT_CLASS_HEADER,
annotationType, false)));
h2End();
}
/**
* {@inheritDoc}
*/
public void writeFooter() {
println("<!-- ========= END OF CLASS DATA ========= -->");
hr();
navLinks(false);
printBottom();
printBodyHtmlEnd();
}
/**
* {@inheritDoc}
*/
public void writeAnnotationTypeSignature(String modifiers) {
dl();
dt();
preNoNewLine();
writeAnnotationInfo(annotationType);
print(modifiers);
String name = annotationType.name() +
getTypeParameterLinks(new LinkInfoImpl(
LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, annotationType, false));
if (configuration().linksource) {
printSrcLink(annotationType, name);
} else {
bold(name);
}
dlEnd();
preEnd();
p();
}
/**
* {@inheritDoc}
*/
public void writeAnnotationTypeDescription() {
if(!configuration.nocomment) {
// generate documentation for the class.
if (annotationType.inlineTags().length > 0) {
printInlineComment(annotationType);
p();
}
}
}
/**
* {@inheritDoc}
*/
public void writeAnnotationTypeTagInfo() {
boolean needHr = annotationType.elements().length > 0;
if(!configuration.nocomment) {
// Print Information about all the tags here
printTags(annotationType);
if (needHr) {
hr();
}
p();
} else if (needHr) {
hr();
}
}
/**
* {@inheritDoc}
*/
public void writeAnnotationTypeDeprecationInfo() {
hr();
Tag[] deprs = annotationType.tags("deprecated");
if (Util.isDeprecated(annotationType)) {
boldText("doclet.Deprecated");
if (deprs.length > 0) {
Tag[] commentTags = deprs[0].inlineTags();
if (commentTags.length > 0) {
space();
printInlineDeprecatedComment(annotationType, deprs[0]);
}
}
p();
}
}
protected void navLinkTree() {
navCellStart();
printHyperLink("package-tree.html", "",
configuration.getText("doclet.Tree"), true, "NavBarFont1");
navCellEnd();
}
protected void printSummaryDetailLinks() {
try {
tr();
tdVAlignClass("top", "NavBarCell3");
font("-2");
print(" ");
navSummaryLinks();
fontEnd();
tdEnd();
tdVAlignClass("top", "NavBarCell3");
font("-2");
navDetailLinks();
fontEnd();
tdEnd();
trEnd();
} catch (Exception e) {
e.printStackTrace();
throw new DocletAbortException();
}
}
protected void navSummaryLinks() throws Exception {
printText("doclet.Summary");
space();
MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
configuration.getBuilderFactory().getMemberSummaryBuilder(this);
writeNavSummaryLink(memberSummaryBuilder,
"doclet.navAnnotationTypeRequiredMember",
VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED);
navGap();
writeNavSummaryLink(memberSummaryBuilder,
"doclet.navAnnotationTypeOptionalMember",
VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL);
}
private void writeNavSummaryLink(MemberSummaryBuilder builder,
String label, int type) {
AbstractMemberWriter writer = ((AbstractMemberWriter) builder.
getMemberSummaryWriter(type));
if (writer == null) {
printText(label);
} else {
writer.printNavSummaryLink(null,
! builder.getVisibleMemberMap(type).noVisibleMembers());
}
}
/**
* Method navDetailLinks
*
* @throws Exception
*
*/
protected void navDetailLinks() throws Exception {
printText("doclet.Detail");
space();
MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
configuration.getBuilderFactory().getMemberSummaryBuilder(this);
AbstractMemberWriter writerOptional =
((AbstractMemberWriter) memberSummaryBuilder.
getMemberSummaryWriter(VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL));
AbstractMemberWriter writerRequired =
((AbstractMemberWriter) memberSummaryBuilder.
getMemberSummaryWriter(VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED));
if (writerOptional != null){
writerOptional.printNavDetailLink(annotationType.elements().length > 0);
} else if (writerRequired != null){
writerRequired.printNavDetailLink(annotationType.elements().length > 0);
} else {
printText("doclet.navAnnotationTypeMember");
}
}
protected void navGap() {
space();
print('|');
space();
}
/**
* If this is an inner class or interface, write the enclosing class or
* interface.
*/
public void writeNestedClassInfo() {
ClassDoc outerClass = annotationType.containingClass();
if (outerClass != null) {
dl();
dt();
if (annotationType.isInterface()) {
boldText("doclet.Enclosing_Interface");
} else {
boldText("doclet.Enclosing_Class");
}
dd();
printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
false));
ddEnd();
dlEnd();
}
}
/**
* {@inheritDoc}
*/
public AnnotationTypeDoc getAnnotationTypeDoc() {
return annotationType;
}
/**
* {@inheritDoc}
*/
public void completeMemberSummaryBuild() {
p();
}
}