home *** CD-ROM | disk | FTP | other *** search
/ Internet News 1999 October / INEWS_10_CD.ISO / pc / jdk / jdk1.2.2 / docs / tooldocs / javadoc / source / standard / ExecutableMemberSubWriter.java < prev    next >
Encoding:
Java Source  |  1999-09-19  |  8.1 KB  |  243 lines

  1. /*
  2.  * @(#)ExecutableMemberSubWriter.java    1.18 98/07/17
  3.  *
  4.  * Copyright 1997, 1998 by Sun Microsystems, Inc.,
  5.  * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
  6.  * All rights reserved.
  7.  *
  8.  * This software is the confidential and proprietary information
  9.  * of Sun Microsystems, Inc. ("Confidential Information").  You
  10.  * shall not disclose such Confidential Information and shall use
  11.  * it only in accordance with the terms of the license agreement
  12.  * you entered into with Sun.
  13.  */
  14.  
  15. package com.sun.tools.doclets.standard;
  16.  
  17. import com.sun.tools.doclets.*;
  18. import com.sun.javadoc.*;
  19.  
  20. /**
  21.  * Print method and constructor info.
  22.  *
  23.  * @author Robert Field
  24.  * @author Atul M Dambalkar
  25.  */
  26. public abstract class ExecutableMemberSubWriter extends AbstractSubWriter {
  27.  
  28.     ExecutableMemberSubWriter(SubWriterHolderWriter writer) {
  29.         super(writer);
  30.     }
  31.  
  32.     protected void printSignature(ExecutableMemberDoc member) {
  33.         writer.displayLength = 0;
  34.     writer.pre();
  35.     printModifiers(member);
  36.     bold(member.name());
  37.     printParameters(member);
  38.     printExceptions(member);
  39.     writer.preEnd();
  40.     }
  41.       
  42.     protected void printDeprecatedLink(ProgramElementDoc member) {
  43.         ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
  44.         writer.printClassLink(emd.containingClass(), 
  45.                               emd.name() + emd.signature(),
  46.                               emd.qualifiedName() + emd.flatSignature());
  47.     }
  48.   
  49.     protected void printSummaryLink(ClassDoc cd, ProgramElementDoc member) {
  50.         ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
  51.         ClassDoc mcd = member.containingClass();
  52.         String name = emd.name();
  53.     writer.bold();
  54.         if (mcd != cd) {
  55.             writer.print(mcd.name() + ".");
  56.         }
  57.     writer.printClassLink(mcd, name + emd.signature(), name, false);
  58.     writer.boldEnd();
  59.         writer.displayLength = name.length();
  60.     printParameters(emd);
  61.     }
  62.  
  63.     protected void printInheritedSummaryLink(ClassDoc cd, 
  64.                                              ProgramElementDoc member) {
  65.         ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
  66.         String name = emd.name();
  67.     writer.printClassLink(cd, name + emd.signature(), name, false);
  68.     }    
  69.  
  70.     protected void printParam(Parameter param) {
  71.         printTypedName(param.type(), param.name());
  72.     }
  73.  
  74.     protected void printParameters(ExecutableMemberDoc member) {
  75.         int paramstart = 0;
  76.         print('(');
  77.         Parameter[] params = member.parameters();
  78.         String indent = makeSpace(writer.displayLength);
  79.         while (paramstart < params.length) {
  80.             Parameter param = params[paramstart++];
  81.             if (!param.name().startsWith("this$")) {
  82.                 printParam(param);
  83.                 break;
  84.             }
  85.         }
  86.  
  87.         for (int i = paramstart; i < params.length; i++) {
  88.             writer.print(',');
  89.             writer.print('\n');
  90.             writer.print(indent);
  91.             printParam(params[i]);
  92.         }
  93.         writer.print(')');
  94.     }
  95.  
  96.     protected void printExceptions(ExecutableMemberDoc member) {
  97.         ClassDoc[] except = member.thrownExceptions();
  98.         if(except.length > 0) {
  99.             int retlen = getReturnTypeLength(member);
  100.             String indent = makeSpace(modifierString(member).length() + 
  101.                                   member.name().length() + retlen - 4);
  102.             writer.print('\n');
  103.             writer.print(indent);
  104.             writer.print("throws ");
  105.             indent += "       ";
  106.             writer.printClassLink(except[0]);
  107.             for(int i = 1; i < except.length; i++) {
  108.                 writer.print(",\n");
  109.                 writer.print(indent);
  110.                 writer.printClassLink(except[i]);
  111.             }
  112.         }
  113.     }
  114.  
  115.     protected int getReturnTypeLength(ExecutableMemberDoc member) {
  116.         if (member instanceof MethodDoc) {
  117.             MethodDoc method = (MethodDoc)member;
  118.             Type rettype = method.returnType();
  119.             ClassDoc cd = rettype.asClassDoc();
  120.             if (cd == null) {
  121.                 return rettype.typeName().length() + 
  122.                        rettype.dimension().length(); 
  123.             } else {
  124.                 return rettype.dimension().length() +
  125.                        ((writer.isCrossClassIncluded(cd))?
  126.                             cd.name().length(): cd.qualifiedName().length());
  127.             }
  128.         } else {   // it's a constructordoc
  129.             return -1;
  130.         }
  131.     }
  132.  
  133.     protected void printImplementsInfo(MethodDoc method) {
  134.         ClassDoc[] implIntfacs = 
  135.                               method.containingClass().interfaces();
  136.         if (implIntfacs.length > 0) {
  137.             MethodDoc implementedMeth = implementedMethod(method, implIntfacs);
  138.             if (implementedMeth != null) {
  139.                 ClassDoc intfac = implementedMeth.containingClass();
  140.                 String methlink = "";
  141.                 String intfaclink = writer.getClassLink(intfac);
  142.                 writer.dt();
  143.                 writer.boldText("doclet.Specified_By");
  144.                 writer.dd();
  145.                 methlink = writer.getDocLink(implementedMeth, 
  146.                                              implementedMeth.name());
  147.                 writer.printText("doclet.in_interface", methlink, intfaclink);
  148.             }
  149.         }
  150.     }
  151.  
  152.     protected ClassDoc implementsMethodInIntfac(MethodDoc method,
  153.                                                 ClassDoc[] intfacs) {
  154.         for (int i = 0; i < intfacs.length; i++) {
  155.             MethodDoc[] methods = intfacs[i].methods();
  156.             if (methods.length > 0) {
  157.                 for (int j = 0; j < methods.length; j++) {
  158.                     if (methods[j].name().equals(method.name()) &&
  159.                           methods[j].signature().equals(method.signature())) {
  160.                         return intfacs[i];
  161.                     }
  162.                 }
  163.             }
  164.         }
  165.         return null;
  166.     }
  167.  
  168.     protected MethodDoc implementedMethod(MethodDoc method, 
  169.                                           ClassDoc[] intfacs) {
  170.         for (int i = 0; i < intfacs.length; i++) {
  171.             MethodDoc found = findMethod(intfacs[i], method);
  172.             if (found != null) {
  173.                 return found;
  174.             }
  175.         }
  176.         return null;
  177.     }
  178.  
  179.     protected MethodDoc findMethod(ClassDoc cd, MethodDoc method) {
  180.         MethodDoc[] methods = cd.methods();
  181.         for (int i = 0; i < methods.length; i++) {
  182.             if (method.name().equals(methods[i].name()) &&
  183.                    method.signature().equals(methods[i].signature())) {
  184.                 return methods[i];
  185.             }
  186.         }
  187.         return null;
  188.     }
  189.  
  190.     protected void printParamTags(ParamTag[] params) {
  191.         if (params.length > 0) {
  192.             writer.dt();
  193.             writer.boldText("doclet.Parameters");
  194.             for (int i = 0; i < params.length; ++i) {
  195.                 ParamTag pt = params[i];
  196.                 writer.dd();
  197.                 writer.code();
  198.                 print(pt.parameterName());
  199.                 writer.codeEnd();
  200.                 print(" - ");
  201.                 writer.printInlineComment(pt);
  202.             }
  203.         }
  204.     }
  205.  
  206.     protected void printThrowsTags(ThrowsTag[] thrown) {
  207.         if (thrown.length > 0) {
  208.             writer.dt();
  209.             writer.boldText("doclet.Throws");
  210.             for (int i = 0; i < thrown.length; ++i) {
  211.                 ThrowsTag tt = thrown[i];
  212.                 writer.dd();
  213.                 ClassDoc cd = tt.exception();
  214.                 if (cd == null) {
  215.                     writer.print(tt.exceptionName());
  216.                 } else {
  217.                     writer.printClassLink(cd);
  218.                 }
  219.                 print(" - ");
  220.                 writer.printInlineComment(tt);
  221.             }
  222.         }
  223.     }
  224.  
  225.     protected String name(ProgramElementDoc member) {
  226.         return member.name() + "()";
  227.     }
  228.  
  229.     protected void printBodyHtmlEnd(ClassDoc cd) {
  230.     }
  231.  
  232.     protected void printMember(ProgramElementDoc member) {
  233.         ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
  234.         String name = emd.name();
  235.         writer.anchor(name + emd.signature());
  236.         printHead(emd);
  237.         printSignature(emd);
  238.         printFullComment(emd);
  239.     }
  240. }  
  241.     
  242.     
  243.