FileDocCategorySizeDatePackage
SerialMethodSubWriter.javaAPI DocExample2985Wed Apr 19 11:17:12 BST 2000com.sun.tools.doclets.standard

SerialMethodSubWriter.java

/*
 * @(#)SerialMethodSubWriter.java	1.20 00/02/02
 *
 * Copyright 1998-2000 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * This software is the proprietary information of Sun Microsystems, Inc.  
 * Use is subject to license terms.
 * 
 */

package com.sun.tools.doclets.standard;

import com.sun.javadoc.*;
import com.sun.tools.doclets.*;
import java.util.*;

/**
 * Generate serialized form for Serializable/Externalizable methods.
 * Documentation denoted by the <code>serialData</code> tag is processed.
 *
 * @author Joe Fialli
 */
public class SerialMethodSubWriter extends MethodSubWriter {
    public SerialMethodSubWriter(SubWriterHolderWriter writer, 
                                 ClassDoc classdoc) {
        super(writer, classdoc);
    }

    public List members(ClassDoc cd) {
	return Util.asList(cd.serializationMethods());
    }

    protected void printHeader(ClassDoc cd) {
        writer.anchor("serialized_methods");
        writer.printTableHeadingBackground(writer.getText("doclet.Serialized_Form_methods"));

	// Specify if Class is Serializable or Externalizable.

        writer.p();

	if (cd.isSerializable() && !cd.isExternalizable()) {
            if (members(cd).size() == 0) {
		String msg =
		    writer.getText("doclet.Serializable_no_customization");
		writer.print(msg);
		writer.p();
	    }
	}
    }

    protected void printMember(ClassDoc cd, ProgramElementDoc member) {
        ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
        String name = emd.name();
        printHead(emd);
        printFullComment(emd);
    }

    protected void printSerialDataTag(Tag[] serialData) {
        if (serialData != null && serialData.length > 0) {
            writer.dt();
            writer.boldText("doclet.SerialData");
            writer.dd();
	    for (int i = 0; i < serialData.length; i++)
		writer.printInlineComment(serialData[i]);
        }
    }

    /**
     * Print comments, See tags and serialData for SerialMethods.
     */
    protected void printTags(ProgramElementDoc member) {
        MethodDoc method = (MethodDoc)member;
	Tag[] serialData = method.tags("serialData");
	Tag[] sinces = method.tags("since");
        SeeTag[] sees = method.seeTags();
        if (serialData.length + sees.length + sinces.length > 0) {
            writer.dd();
            writer.dl();
	    printSerialDataTag(serialData);
            writer.printSinceTag(method);
            writer.printSeeTags(method);
            writer.dlEnd();
            writer.ddEnd();
	} else {
	    if (method.name().compareTo("writeExternal") == 0) {
		serialWarning("doclet.MissingSerialDataTag",
			    method.containingClass().qualifiedName(),
			    method.name());
	    }
	}
    }

    /**
     * Print header even if there are no serializable methods.
     */
    public void printMembers() {
        if (members(classdoc).size() > 0) {
	    super.printMembers();
        }
    }

    public void buildVisibleMemberMap() {
      // Do nothing.
    }
}