home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / javadoc / HTMLDocumentationGenerator.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  20.6 KB  |  864 lines

  1. package sun.tools.javadoc;
  2.  
  3. import java.io.PrintWriter;
  4. import java.lang.reflect.Modifier;
  5. import java.util.Date;
  6. import java.util.Enumeration;
  7. import java.util.Hashtable;
  8. import java.util.Vector;
  9. import sun.tools.java.ClassDeclaration;
  10. import sun.tools.java.ClassDefinition;
  11. import sun.tools.java.ClassNotFound;
  12. import sun.tools.java.Constants;
  13. import sun.tools.java.FieldDefinition;
  14. import sun.tools.java.Identifier;
  15. import sun.tools.java.Type;
  16. import sun.tools.tree.LocalField;
  17.  
  18. class HTMLDocumentationGenerator extends DocumentationGenerator implements Constants {
  19.    ClassDeclaration currentClass;
  20.    Vector allFields = new Vector();
  21.    static final String InterfaceIndexImage = imgString("interface-index.gif", 257, 38, "Interface Index");
  22.    static final String ClassIndexImage = imgString("class-index.gif", 216, 37, "Class Index");
  23.    static final String ExceptionIndexImage = imgString("exception-index.gif", 284, 38, "Exception Index");
  24.    static final String ErrorIndexImage = imgString("error-index.gif", 174, 38, "Error Index");
  25.    static final int C_VARIABLE = 0;
  26.    static final int C_CONSTRUCTOR = 1;
  27.    static final int C_METHOD = 2;
  28.    static String[] indexImages = new String[]{imgString("variable-index.gif", 207, 38, "Variable Index"), imgString("constructor-index.gif", 275, 38, "Constructor Index"), imgString("method-index.gif", 207, 38, "Method Index")};
  29.    static final String staticVariableIndexImage = imgString("blue-ball-small.gif", 6, 6, " o ");
  30.    static final String dynamicVariableIndexImage = imgString("magenta-ball-small.gif", 6, 6, " o ");
  31.    static final String constructorIndexImage = imgString("yellow-ball-small.gif", 6, 6, " o ");
  32.    static final String staticMethodIndexImage = imgString("green-ball-small.gif", 6, 6, " o ");
  33.    static final String dynamicMethodIndexImage = imgString("red-ball-small.gif", 6, 6, " o ");
  34.    static String[] docImages = new String[]{imgString("variables.gif", 153, 38, "Variables"), imgString("constructors.gif", 231, 38, "Constructors"), imgString("methods.gif", 151, 38, "Methods")};
  35.    static String[] docAnchors = new String[]{"variables", "constructors", "methods"};
  36.    static final String staticVariableDocImage = imgString("blue-ball.gif", 12, 12, " o ");
  37.    static final String dynamicVariableDocImage = imgString("magenta-ball.gif", 12, 12, " o ");
  38.    static final String constructorDocImage = imgString("yellow-ball.gif", 12, 12, " o ");
  39.    static final String staticMethodDocImage = imgString("green-ball.gif", 12, 12, " o ");
  40.    static final String dynamicMethodDocImage = imgString("red-ball.gif", 12, 12, " o ");
  41.    static Date today = new Date();
  42.  
  43.    void genPackagesDocumentation(String[] var1, String[] var2) {
  44.       System.out.println(Main.getText("html.Generating_packages.html"));
  45.       PrintWriter var3 = DocumentationGenerator.openFile("packages.html");
  46.       this.htmlStart(var3, "Package Index");
  47.       var3.print("<pre>");
  48.       var3.print(this.refString("API_users_guide.html", "API User's Guide"));
  49.       var3.print("  ");
  50.       var3.print(this.refString("tree.html", "Class Hierarchy"));
  51.       var3.print("  ");
  52.       var3.print(this.refString("AllNames.html", "Index"));
  53.       var3.print("</pre>");
  54.       var3.println("<hr>");
  55.       var3.println("<h1>");
  56.       var3.println(imgString("package-index.gif", 238, 37, "Package Index"));
  57.       var3.println("</h1>");
  58.       if (var1 != null) {
  59.          var3.println("<h2> " + Main.getText("html.Generating_packages.all") + " </h2>");
  60.          var3.println("<menu>");
  61.  
  62.          for(int var4 = 0; var4 < var1.length; ++var4) {
  63.             String var5 = var1[var4];
  64.             Identifier var6 = Identifier.lookup(var5);
  65.             var3.println("<li> " + Main.getText("html.Generating_packages.package", this.pkgString(var6, var5)));
  66.          }
  67.  
  68.          var3.println("</menu>");
  69.       }
  70.  
  71.       if (var2 != null) {
  72.          var3.println("<h2> " + Main.getText("html.Generating_packages.other") + " </h2>");
  73.          var3.println("<menu>");
  74.  
  75.          for(int var7 = 0; var7 < var2.length; ++var7) {
  76.             String var8 = var2[var7];
  77.             Identifier var9 = Identifier.lookup(var8);
  78.             var3.println("<li> package " + this.pkgString(var9, var8));
  79.          }
  80.  
  81.          var3.println("</menu>");
  82.       }
  83.  
  84.       htmlEnd(var3);
  85.    }
  86.  
  87.    void genPackageDocumentation(Identifier var1, ClassDeclaration[] var2, ClassDeclaration[] var3, ClassDeclaration[] var4, ClassDeclaration[] var5) {
  88.       PrintWriter var6 = DocumentationGenerator.openFile("Package-" + var1.toString() + ".html");
  89.       this.htmlStart(var6, "Package " + var1);
  90.       var6.print("<pre>");
  91.       var6.print(this.refString("packages.html", "All Packages"));
  92.       var6.print("  ");
  93.       var6.print(this.refString("tree.html", "Class Hierarchy"));
  94.       var6.print("  ");
  95.       var6.print(this.refString("AllNames.html", "Index"));
  96.       var6.println("</pre>");
  97.       var6.println("<hr>");
  98.       var6.println("<h1>");
  99.       var6.println("  package " + var1);
  100.       var6.println("</h1>");
  101.       this.genPackageDocumentationType(var6, var2, InterfaceIndexImage);
  102.       this.genPackageDocumentationType(var6, var3, ClassIndexImage);
  103.       this.genPackageDocumentationType(var6, var4, ExceptionIndexImage);
  104.       this.genPackageDocumentationType(var6, var5, ErrorIndexImage);
  105.       htmlEnd(var6);
  106.    }
  107.  
  108.    private void genPackageDocumentationType(PrintWriter var1, ClassDeclaration[] var2, String var3) {
  109.       if (var2.length != 0) {
  110.          DocumentationGenerator.sort(var2);
  111.          var1.println("<h2>");
  112.          var1.println("  " + var3);
  113.          var1.println("</h2>");
  114.          var1.println("<menu>");
  115.  
  116.          for(int var4 = 0; var4 < var2.length; ++var4) {
  117.             var1.println("  <li> " + this.classString(var2[var4]));
  118.             this.genClassDocumentation(var2[var4], var4 > 0 ? var2[var4 - 1] : null, var4 + 1 < var2.length ? var2[var4 + 1] : null);
  119.          }
  120.  
  121.          var1.println("</menu>");
  122.       }
  123.    }
  124.  
  125.    void genClassDocumentation(ClassDeclaration var1, ClassDeclaration var2, ClassDeclaration var3) {
  126.       System.out.println(Main.getText("html.Generating_documentation_for", var1.toString()));
  127.       this.currentClass = var1;
  128.  
  129.       ClassDefinition var4;
  130.       try {
  131.          var4 = ((DocumentationGenerator)this).getClassDefinition(var1);
  132.       } catch (ClassNotFound var17) {
  133.          System.out.println(Main.getText("html.Warning_Could_not_find_class_info_for", var1.toString()));
  134.          return;
  135.       }
  136.  
  137.       String var5 = (var4.isInterface() ? "Interface " : "Class ") + var4.getName();
  138.       PrintWriter var6 = DocumentationGenerator.openFile(((DocumentationGenerator)this).getReferenceName(var4.getName()) + ".html");
  139.       this.htmlStart(var6, var5);
  140.       if (!Constants.idNull.equals(var4.getName().getQualifier())) {
  141.          this.genButtons(var6, var4, var2, var3);
  142.          var6.println("<hr>");
  143.       }
  144.  
  145.       var6.println("<h1>");
  146.       var6.println("  " + var5);
  147.       var6.println("</h1>");
  148.       if (!var4.isInterface()) {
  149.          this.genSuperClasses(var6, this.currentClass);
  150.       }
  151.  
  152.       var6.println("<dl>");
  153.       var6.print("  <dt> ");
  154.       String var7 = Modifier.toString(var4.getModifiers());
  155.       if (var7.length() > 0) {
  156.          var6.print(var7 + " ");
  157.       }
  158.  
  159.       var6.print(var4.isInterface() ? "" : "class ");
  160.       var6.println("<b>" + var4.getName().getName() + "</b>");
  161.       if (!var4.isInterface()) {
  162.          ClassDeclaration var8 = var4.getSuperClass();
  163.          if (var8 != null) {
  164.             var6.println("  <dt> extends " + this.classString(var8));
  165.          }
  166.       }
  167.  
  168.       ClassDeclaration[] var18 = var4.getInterfaces();
  169.       if (var18.length > 0) {
  170.          var6.print("  <dt> ");
  171.          var6.print(var4.isInterface() ? "extends " : "implements ");
  172.  
  173.          for(int var9 = 0; var9 < var18.length; ++var9) {
  174.             if (var9 > 0) {
  175.                var6.print(", ");
  176.             }
  177.  
  178.             var6.print(this.classString(var18[var9]));
  179.          }
  180.  
  181.          var6.println();
  182.       }
  183.  
  184.       var6.println("</dl>");
  185.       String var19 = var4.getDocumentation();
  186.       if (var19 != null) {
  187.          Vector var10 = DocumentationGenerator.mergeDoc(var19);
  188.          String var11 = ((DocumentationGenerator)this).getComment(var10);
  189.          String var12 = ((DocumentationGenerator)this).getAuthors(var10);
  190.          String var13 = ((DocumentationGenerator)this).getVersion(var10);
  191.          Vector var14 = ((DocumentationGenerator)this).getSees(var10, this.currentClass);
  192.          String var15 = ((DocumentationGenerator)this).getDeprecated(var10);
  193.          boolean var16 = var12 != null || var13 != null || var14 != null;
  194.          if (var15 != null) {
  195.             this.genDeprecation(var6, var4.getName().getName().toString(), var15);
  196.          }
  197.  
  198.          if (var11 != null) {
  199.             var6.println(var11);
  200.             var6.println("<p>");
  201.          }
  202.  
  203.          if (var16) {
  204.             var6.println("<dl>");
  205.          }
  206.  
  207.          if (var13 != null) {
  208.             var6.println("  <dt> <b>Version:</b>");
  209.             var6.println("  <dd> " + var13);
  210.          }
  211.  
  212.          if (var12 != null) {
  213.             var6.println("  <dt> <b>Author:</b>");
  214.             var6.println("  <dd> " + var12);
  215.          }
  216.  
  217.          if (var14 != null) {
  218.             this.handleSeeAlso(var6, var14);
  219.          }
  220.  
  221.          if (var16) {
  222.             var6.println("</dl>");
  223.          }
  224.       }
  225.  
  226.       if (!var4.isPublic() && !Constants.idNull.equals(var4.getName().getQualifier())) {
  227.          var6.println("<p>");
  228.          var6.println("<em>");
  229.          var6.println("This class is not public and therefore cannot be used outside this package.");
  230.          var6.println("</em>");
  231.       } else {
  232.          var6.println("<hr>");
  233.          var6.println(this.anchorString("index"));
  234.          Vector var20 = DocumentationGenerator.allVariables(var4);
  235.          Vector var22 = DocumentationGenerator.allConstructors(var4);
  236.          Vector var24 = DocumentationGenerator.allMethods(var4);
  237.          this.genIndex(var6, var4, var20, 0);
  238.          this.genIndex(var6, var4, var22, 1);
  239.          this.genIndex(var6, var4, var24, 2);
  240.          var20 = DocumentationGenerator.localFieldsOf(var4, var20);
  241.          var24 = DocumentationGenerator.localFieldsOf(var4, var24);
  242.          var22 = DocumentationGenerator.localFieldsOf(var4, var22);
  243.          this.genDocumentation(var6, var20, 0);
  244.          this.genDocumentation(var6, var22, 1);
  245.          this.genDocumentation(var6, var24, 2);
  246.       }
  247.  
  248.       if (!Constants.idNull.equals(var4.getName().getQualifier())) {
  249.          var6.println("<hr>");
  250.          this.genButtons(var6, var4, var2, var3);
  251.       }
  252.  
  253.       htmlEnd(var6);
  254.    }
  255.  
  256.    private void genSuperClasses(PrintWriter var1, ClassDeclaration var2) {
  257.       Vector var3 = ((DocumentationGenerator)this).superclassesOf(var2);
  258.       int var4 = var3.size();
  259.       var1.println("<pre>");
  260.  
  261.       for(int var5 = 0; var5 < var4; ++var5) {
  262.          ClassDeclaration var6 = (ClassDeclaration)var3.elementAt(var5);
  263.  
  264.          for(int var7 = 1; var7 < var5; ++var7) {
  265.             var1.print("        ");
  266.          }
  267.  
  268.          if (var5 > 0) {
  269.             var1.println("   |");
  270.          }
  271.  
  272.          for(int var8 = 1; var8 < var5; ++var8) {
  273.             var1.print("        ");
  274.          }
  275.  
  276.          if (var5 > 0) {
  277.             var1.print("   +----");
  278.          }
  279.  
  280.          if (var6.equals(var2)) {
  281.             var1.println(var6.getName());
  282.          } else {
  283.             var1.println(this.classString(var6, "_top_", var6.getName()));
  284.          }
  285.       }
  286.  
  287.       var1.println("</pre>");
  288.       var1.println("<hr>");
  289.    }
  290.  
  291.    private void genIndex(PrintWriter var1, ClassDefinition var2, Vector var3, int var4) {
  292.       if (var3.size() > 0) {
  293.          FieldDefinition[] var5 = new FieldDefinition[var3.size()];
  294.          var3.copyInto(var5);
  295.          DocumentationGenerator.sort(var5);
  296.          var1.println("<h2>");
  297.          var1.println("  " + indexImages[var4]);
  298.          var1.println("</h2>");
  299.          var1.println("<dl>");
  300.  
  301.          for(int var6 = 0; var6 < var5.length; ++var6) {
  302.             FieldDefinition var7 = var5[var6];
  303.             var1.print("  <dt> ");
  304.             if (var4 == 0) {
  305.                Identifier var8 = var7.getName();
  306.                var1.println(var7.isStatic() ? staticVariableIndexImage : dynamicVariableIndexImage);
  307.                var1.println("\t" + this.classString(var7.getClassDeclaration(), var8, "<b>" + var8 + "</b>"));
  308.             } else {
  309.                String var10 = DocumentationGenerator.getReferenceName(var7);
  310.                String var9;
  311.                if (var7.isConstructor()) {
  312.                   var9 = constructorIndexImage;
  313.                } else {
  314.                   var9 = var7.isStatic() ? staticMethodIndexImage : dynamicMethodIndexImage;
  315.                }
  316.  
  317.                var1.println(var9);
  318.                var1.print("\t" + this.refString(this.methodTag(var7), "<b>" + var10 + "</b>"));
  319.                var1.println(var7.getType().typeString("", true, false));
  320.             }
  321.  
  322.             var1.print("  <dd> ");
  323.             if (!var2.equals(var7.getClassDefinition())) {
  324.                var1.print("Inherited from ");
  325.                var1.print(this.classString(var7.getClassDeclaration()));
  326.                var1.print(".  ");
  327.             }
  328.  
  329.             var1.println(((DocumentationGenerator)this).firstSentence(var7));
  330.             if (var7.getDocumentation() != null && var7.getDocumentation().indexOf("@deprecated") >= 0) {
  331.                var1.println("<b>Deprecated.</b>");
  332.             }
  333.          }
  334.  
  335.          var1.println("</dl>");
  336.       }
  337.    }
  338.  
  339.    void genDocumentation(PrintWriter var1, Vector var2, int var3) {
  340.       if (var2.size() > 0) {
  341.          var1.println(this.anchorString(docAnchors[var3]));
  342.          var1.println("<h2>");
  343.          var1.println("  " + docImages[var3]);
  344.          var1.println("</h2>");
  345.          if (var3 == 1) {
  346.             String var4 = this.currentClass.getName().getName().toString();
  347.             var1.println(this.anchorString(var4));
  348.          }
  349.  
  350.          for(int var6 = 0; var6 < var2.size(); ++var6) {
  351.             FieldDefinition var5 = (FieldDefinition)var2.elementAt(var6);
  352.             if (var3 == 0) {
  353.                this.genVariableDocumentation(var1, var5);
  354.             } else {
  355.                this.genMethodDocumentation(var1, var5);
  356.             }
  357.  
  358.             if (Main.showIndex) {
  359.                this.allFields.addElement(var5);
  360.             }
  361.          }
  362.  
  363.       }
  364.    }
  365.  
  366.    void genVariableDocumentation(PrintWriter var1, FieldDefinition var2) {
  367.       String var3 = var2.isStatic() ? staticVariableDocImage : dynamicVariableDocImage;
  368.       var1.println(this.anchorString(var2.getName().toString(), var3));
  369.       var1.println("<b>" + var2.getName() + "</b>");
  370.       var1.println("<pre>");
  371.       var1.print(DocumentationGenerator.modString(var2) + " " + ((DocumentationGenerator)this).typeString(var2.getType()) + " " + var2.getName());
  372.  
  373.       for(int var4 = var2.getType().getArrayDimension(); var4 > 0; --var4) {
  374.          var1.print("[]");
  375.       }
  376.  
  377.       var1.println();
  378.       var1.println("</pre>");
  379.       String var5 = var2.getDocumentation();
  380.       if (var5 != null) {
  381.          Vector var6 = DocumentationGenerator.mergeDoc(var5);
  382.          String var7 = ((DocumentationGenerator)this).getComment(var6);
  383.          Vector var8 = ((DocumentationGenerator)this).getSees(var6, this.currentClass);
  384.          String var9 = ((DocumentationGenerator)this).getDeprecated(var6);
  385.          var1.println("<dl>");
  386.          if (var9 != null) {
  387.             var1.print("<dd>");
  388.             this.genDeprecation(var1, var2.getName().toString(), var9);
  389.          }
  390.  
  391.          if (var7 != null) {
  392.             var1.println("  <dd> " + var7 + "<p>");
  393.          }
  394.  
  395.          if (var8 != null) {
  396.             var1.println("  <dd><dl> ");
  397.             this.handleSeeAlso(var1, var8);
  398.             var1.println("  </dl></dd>");
  399.          }
  400.  
  401.          var1.println("</dl>");
  402.       }
  403.  
  404.    }
  405.  
  406.    void genMethodDocumentation(PrintWriter var1, FieldDefinition var2) {
  407.       var2.getClassDeclaration();
  408.       var2.getType();
  409.       boolean var3 = var2.isConstructor();
  410.       String var4 = DocumentationGenerator.getReferenceName(var2);
  411.       String var5 = var3 ? constructorDocImage : (var2.isStatic() ? staticMethodDocImage : dynamicMethodDocImage);
  412.       var1.println(this.anchorString(this.methodTag(var2), var5));
  413.       if (var3) {
  414.          var1.println("<b>" + var4 + "</b>");
  415.       } else {
  416.          var1.println(this.anchorString(var4.toString(), "<b>" + var4 + "</b>"));
  417.       }
  418.  
  419.       var1.println("<pre>");
  420.       String var6 = DocumentationGenerator.modString(var2) + " ";
  421.       if (var3) {
  422.          var6 = var6 + var4 + "(";
  423.       } else {
  424.          var6 = var6 + ((DocumentationGenerator)this).typeString(var2.getType().getReturnType());
  425.  
  426.          for(int var7 = var2.getType().getReturnType().getArrayDimension(); var7 > 0; --var7) {
  427.             var6 = var6 + "[]";
  428.          }
  429.  
  430.          var6 = var6 + " " + var2.getName() + "(";
  431.       }
  432.  
  433.       var1.print(var6);
  434.       boolean var30 = false;
  435.       int var8 = 0;
  436.  
  437.       for(int var9 = 0; var9 < var6.length(); ++var9) {
  438.          if (var30) {
  439.             if (var6.charAt(var9) == '>') {
  440.                var30 = false;
  441.             }
  442.          } else if (var6.charAt(var9) == '<') {
  443.             var30 = true;
  444.          } else {
  445.             ++var8;
  446.          }
  447.       }
  448.  
  449.       Type[] var10 = var2.getType().getArgumentTypes();
  450.       if (var2.getArguments() == null) {
  451.          System.out.println(var2);
  452.       }
  453.  
  454.       Enumeration var11 = var2.getArguments().elements();
  455.       if (!var2.isStatic()) {
  456.          var11.nextElement();
  457.       }
  458.  
  459.       for(int var12 = 0; var12 < var10.length; ++var12) {
  460.          if (var12 > 0) {
  461.             var1.println(",");
  462.  
  463.             for(int var13 = var8; var13 > 0; --var13) {
  464.                var1.print(" ");
  465.             }
  466.          }
  467.  
  468.          var1.print(((DocumentationGenerator)this).typeString(var10[var12]));
  469.          LocalField var31 = (LocalField)var11.nextElement();
  470.          var1.print(" ");
  471.          var1.print(((FieldDefinition)var31).getName());
  472.  
  473.          for(int var14 = var10[var12].getArrayDimension(); var14 > 0; --var14) {
  474.             var1.print("[]");
  475.          }
  476.       }
  477.  
  478.       var1.print(")");
  479.       ClassDeclaration[] var32 = var2.getExceptions(super.env);
  480.       if (var32.length > 0) {
  481.          var1.print(" throws");
  482.       }
  483.  
  484.       for(int var33 = 0; var33 < var32.length; ++var33) {
  485.          if (var33 > 0) {
  486.             var1.print(",");
  487.          }
  488.  
  489.          var1.print(" " + this.classString(var32[var33]));
  490.       }
  491.  
  492.       var1.println();
  493.       var1.println("</pre>");
  494.       String var15 = ((DocumentationGenerator)this).getDocumentation(var2);
  495.       FieldDefinition var16 = ((DocumentationGenerator)this).getOverride(var2);
  496.       if (var16 != null && var15 == null) {
  497.          var15 = "";
  498.       }
  499.  
  500.       if (var15 != null) {
  501.          Vector var17 = DocumentationGenerator.mergeDoc(var15);
  502.          String var18 = ((DocumentationGenerator)this).getComment(var17);
  503.          String var19 = ((DocumentationGenerator)this).getReturn(var17);
  504.          Vector var20 = ((DocumentationGenerator)this).getSees(var17, this.currentClass);
  505.          Vector var21 = DocumentationGenerator.getParameters(var17);
  506.          Vector var22 = ((DocumentationGenerator)this).getThrows(var17, var2);
  507.          String var23 = ((DocumentationGenerator)this).getDeprecated(var17);
  508.          boolean var24 = var21 != null || var19 != null || var22 != null || var16 != null || var20 != null;
  509.          var1.println("<dl>");
  510.          if (var23 != null) {
  511.             var1.print("<dd>");
  512.             this.genDeprecation(var1, var4 + "()", var23);
  513.          }
  514.  
  515.          if (var18 != null) {
  516.             var1.println("  <dd> " + var18);
  517.             var1.println("<p>");
  518.          }
  519.  
  520.          if (var24) {
  521.             var1.println("  <dd><dl>");
  522.          }
  523.  
  524.          if (var21 != null) {
  525.             var1.println("    <dt> <b>Parameters:</b>");
  526.  
  527.             for(int var25 = 0; var25 < var21.size(); var25 += 2) {
  528.                var1.println("    <dd> " + var21.elementAt(var25) + " - " + var21.elementAt(var25 + 1));
  529.             }
  530.          }
  531.  
  532.          if (var19 != null) {
  533.             var1.println("    <dt> <b>Returns:</b>");
  534.             var1.println("    <dd> " + var19);
  535.          }
  536.  
  537.          if (var22 != null) {
  538.             for(int var35 = 0; var35 < var22.size(); var35 += 2) {
  539.                ClassDeclaration var26 = (ClassDeclaration)var22.elementAt(var35);
  540.                String var27 = (String)var22.elementAt(var35 + 1);
  541.                var1.println("    <dt> <b>Throws:</b> " + this.classString(var26));
  542.                var1.println("    <dd> " + var27);
  543.             }
  544.          }
  545.  
  546.          if (var16 != null) {
  547.             var1.println("    <dt> <b>Overrides:</b>");
  548.             var1.println("    <dd> " + this.refString(this.methodTag(var16), var16.getName()) + " in class " + this.classString(var16.getClassDeclaration()));
  549.             Object var34 = null;
  550.          }
  551.  
  552.          if (var20 != null) {
  553.             this.handleSeeAlso(var1, var20);
  554.          }
  555.  
  556.          if (var24) {
  557.             var1.println("  </dl></dd>");
  558.          }
  559.  
  560.          var1.println("</dl>");
  561.       }
  562.  
  563.    }
  564.  
  565.    void genFieldIndex() {
  566.       this.currentClass = null;
  567.       PrintWriter var1 = DocumentationGenerator.openFile("AllNames.html");
  568.       this.htmlStart(var1, "Index of all Fields and Methods");
  569.       var1.print("<pre>");
  570.       var1.print(this.refString("packages.html", "All Packages"));
  571.       var1.print("  ");
  572.       var1.print(this.refString("tree.html", "Class Hierarchy"));
  573.       var1.print("</pre>");
  574.       var1.println("<hr>");
  575.  
  576.       for(char var2 = 'A'; var2 <= 'Z'; ++var2) {
  577.          var1.println(this.refString("#Thumb-" + var2, String.valueOf(var2)));
  578.       }
  579.  
  580.       var1.println();
  581.       var1.println("<hr>");
  582.       var1.println("<h1>");
  583.       var1.println("  Index of all Fields and Methods");
  584.       var1.println("</h1>");
  585.       if (this.allFields.size() == 0) {
  586.          htmlEnd(var1);
  587.       } else {
  588.          FieldDefinition[] var3 = new FieldDefinition[this.allFields.size()];
  589.          this.allFields.copyInto(var3);
  590.          String[] var4 = new String[var3.length];
  591.          System.out.print(Main.getText("html.Sorting_items", var3.length));
  592.          System.out.flush();
  593.  
  594.          for(int var5 = 0; var5 < var4.length; ++var5) {
  595.             var4[var5] = DocumentationGenerator.sortKey(var3[var5]);
  596.          }
  597.  
  598.          DocumentationGenerator.xsort(var3, var4);
  599.          System.out.println(Main.getText("html.done"));
  600.          int var6 = 0;
  601.  
  602.          for(char var7 = 'A'; var7 < 'Z'; ++var7) {
  603.             boolean var8 = false;
  604.             var1.println(this.anchorString("Thumb-" + var7));
  605.  
  606.             for(; var6 < var3.length && Character.toUpperCase(var4[var6].charAt(0)) == var7; ++var6) {
  607.                if (!var8) {
  608.                   if (var6 > 0) {
  609.                      var1.println("<hr>");
  610.                   }
  611.  
  612.                   var1.println("<h2>");
  613.                   var1.println(this.anchorString("Thumb-" + var7, "<b> " + var7 + " </b>"));
  614.                   var1.println("</h2>");
  615.                   var1.println("<dl>");
  616.                   var8 = true;
  617.                }
  618.  
  619.                FieldDefinition var9 = var3[var6];
  620.  
  621.                try {
  622.                   ClassDeclaration var10 = var9.getClassDeclaration();
  623.                   ClassDefinition var11 = ((DocumentationGenerator)this).getClassDefinition(var10);
  624.                   var1.print("  <dt> ");
  625.                   if (var9.isVariable()) {
  626.                      Identifier var12 = var9.getName();
  627.                      var1.println("\t" + this.classString(var9.getClassDeclaration(), var12, "<b>" + var12 + "</b>") + ".");
  628.                      var1.print(var9.isStatic() ? "Static variable in " : "Variable in ");
  629.                   } else {
  630.                      String var15 = DocumentationGenerator.getReferenceName(var9);
  631.                      if (var9.isConstructor()) {
  632.                         String var13 = constructorIndexImage;
  633.                      } else {
  634.                         String var16 = var9.isStatic() ? staticMethodIndexImage : dynamicMethodIndexImage;
  635.                      }
  636.  
  637.                      var1.print("\t" + this.refString(this.methodTag(var9), "<b>" + var15 + "</b>"));
  638.                      var1.println(var9.getType().typeString("", true, false) + ".");
  639.                      var1.print(var9.isConstructor() ? "Constructor for " : (var9.isStatic() ? "Static method in " : "Method in "));
  640.                   }
  641.  
  642.                   var1.println((var11.isInterface() ? "interface " : "class ") + this.longClassString(var10));
  643.                   var1.println("  <dd> " + ((DocumentationGenerator)this).firstSentence(var9));
  644.                } catch (ClassNotFound var14) {
  645.                }
  646.             }
  647.  
  648.             if (var8) {
  649.                var1.println("</dl>");
  650.             }
  651.          }
  652.  
  653.          htmlEnd(var1);
  654.       }
  655.    }
  656.  
  657.    void genClassTree(Hashtable var1, ClassDeclaration var2) {
  658.       this.currentClass = null;
  659.       PrintWriter var3 = DocumentationGenerator.openFile("tree.html");
  660.       this.htmlStart(var3, "Class Hierarchy");
  661.       var3.print("<pre>");
  662.       var3.print(this.refString("packages.html", "All Packages"));
  663.       var3.print("  ");
  664.       var3.print(this.refString("AllNames.html", "Index"));
  665.       var3.print("</pre>");
  666.       var3.println("<hr>");
  667.       var3.println("<h1>");
  668.       var3.println("  Class Hierarchy");
  669.       var3.println("</h1>");
  670.       var3.println("<ul>");
  671.       this.genClassTree(var3, var1, var2, "  ");
  672.       var3.println("</ul>");
  673.       htmlEnd(var3);
  674.    }
  675.  
  676.    private void genClassTree(PrintWriter var1, Hashtable var2, ClassDeclaration var3, String var4) {
  677.       try {
  678.          ClassDefinition var5 = ((DocumentationGenerator)this).getClassDefinition(var3);
  679.          ClassDeclaration[] var6 = var5.getInterfaces();
  680.          var1.print(var4 + "<li> ");
  681.          var1.print(var5.isClass() ? "class " : "interface ");
  682.          var1.print(this.longClassString(var3));
  683.          if (var6.length > 0) {
  684.             var1.print(" (");
  685.             var1.print(var5.isInterface() ? "extends " : "implements ");
  686.  
  687.             for(int var7 = 0; var7 < var6.length; ++var7) {
  688.                if (var7 > 0) {
  689.                   var1.print(", ");
  690.                }
  691.  
  692.                var1.print(this.longClassString(var6[var7]));
  693.             }
  694.  
  695.             var1.print(")");
  696.          }
  697.       } catch (ClassNotFound var8) {
  698.       }
  699.  
  700.       var1.println();
  701.       ClassDeclaration[] var9 = (ClassDeclaration[])var2.get(var3);
  702.       if (var9 != null && var9.length > 0) {
  703.          String var10 = var4 + "  ";
  704.          var1.println(var4 + "<ul>");
  705.  
  706.          for(int var11 = 0; var11 < var9.length; ++var11) {
  707.             this.genClassTree(var1, var2, var9[var11], var10);
  708.          }
  709.  
  710.          var1.println(var4 + "</ul>");
  711.       }
  712.  
  713.    }
  714.  
  715.    private String refString(String var1, Object var2) {
  716.       return "<a href=\"" + var1 + "\">" + var2 + "</a>";
  717.    }
  718.  
  719.    private String anchorString(String var1) {
  720.       if (var1.charAt(0) == '#') {
  721.          var1 = var1.substring(1);
  722.       }
  723.  
  724.       return "<a name=\"" + var1 + "\"></a>";
  725.    }
  726.  
  727.    private String anchorString(String var1, Object var2) {
  728.       if (var1.charAt(0) == '#') {
  729.          var1 = var1.substring(1);
  730.       }
  731.  
  732.       return "<a name=\"" + var1 + "\">" + var2 + "</a>";
  733.    }
  734.  
  735.    private static String imgString(String var0, int var1, int var2, String var3) {
  736.       return "<img src=\"images/" + var0 + "\" width=" + var1 + " height=" + var2 + " alt=\"" + var3 + "\">";
  737.    }
  738.  
  739.    private String longClassString(ClassDeclaration var1) {
  740.       String var2 = var1.getName().getQualifier().toString();
  741.       String var3 = this.classString(var1, "_top_", var1.getName().getName());
  742.       return var2.length() > 0 ? var2 + "." + var3 : var3;
  743.    }
  744.  
  745.    String classString(ClassDeclaration var1) {
  746.       return this.classString(var1, "_top_", var1.getName().getName());
  747.    }
  748.  
  749.    private String classString(ClassDeclaration var1, Object var2, Object var3) {
  750.       return ((DocumentationGenerator)this).shouldDocument(var1) ? this.refString(this.classTag(var1, var2), var3) : var3.toString();
  751.    }
  752.  
  753.    private String classTag(ClassDeclaration var1) {
  754.       return this.classTag(var1, "_top_");
  755.    }
  756.  
  757.    private String classTag(ClassDeclaration var1, Object var2) {
  758.       return !var1.equals(this.currentClass) && var1.getName().toString().length() != 0 ? ((DocumentationGenerator)this).getReferenceName(var1.getName()) + ".html#" + var2 : "#" + var2;
  759.    }
  760.  
  761.    private String methodTag(FieldDefinition var1) {
  762.       String var2 = DocumentationGenerator.getReferenceName(var1);
  763.       return this.classTag(var1.getClassDeclaration(), var1.getType().typeString(var2.toString(), false, false));
  764.    }
  765.  
  766.    private String pkgString(Identifier var1, Object var2) {
  767.       return this.refString("Package-" + var1.toString() + ".html", var2);
  768.    }
  769.  
  770.    String authorString(String var1) {
  771.       return var1;
  772.    }
  773.  
  774.    String commentString(String var1) {
  775.       return var1;
  776.    }
  777.  
  778.    String versionString(String var1) {
  779.       return var1;
  780.    }
  781.  
  782.    String returnString(String var1) {
  783.       return var1;
  784.    }
  785.  
  786.    private void genButtons(PrintWriter var1, ClassDefinition var2, ClassDeclaration var3, ClassDeclaration var4) {
  787.       var1.println("<pre>");
  788.       var1.print(this.refString("packages.html", "All Packages"));
  789.       var1.print("  ");
  790.       var1.print(this.refString("tree.html", "Class Hierarchy"));
  791.       var1.print("  ");
  792.       var1.print(this.pkgString(var2.getName().getQualifier(), "This Package"));
  793.       var1.print("  ");
  794.       if (var3 != null) {
  795.          var1.print(this.classString(var3, "_top_", "Previous"));
  796.       } else {
  797.          var1.print(this.pkgString(var2.getName().getQualifier(), "Previous"));
  798.       }
  799.  
  800.       var1.print("  ");
  801.       if (var4 != null) {
  802.          var1.print(this.classString(var4, "_top_", "Next"));
  803.       } else {
  804.          var1.print(this.pkgString(var2.getName().getQualifier(), "Next"));
  805.       }
  806.  
  807.       var1.print("  ");
  808.       var1.print(this.refString("AllNames.html", "Index"));
  809.       var1.println("</pre>");
  810.    }
  811.  
  812.    private void htmlStart(PrintWriter var1, String var2) {
  813.       var1.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">");
  814.       var1.println("<!--NewPage-->");
  815.       var1.println("<html>");
  816.       var1.println("<head>");
  817.       var1.println("<!-- Generated by javadoc on " + today + " -->");
  818.       var1.println("<title>");
  819.       var1.println("  " + var2);
  820.       var1.println("</title>");
  821.       var1.println("</head>");
  822.       var1.println("<body>");
  823.       var1.println(this.anchorString("_top_"));
  824.    }
  825.  
  826.    private static void htmlEnd(PrintWriter var0) {
  827.       var0.println("</body>");
  828.       var0.println("</html>");
  829.       var0.close();
  830.    }
  831.  
  832.    private void handleSeeAlso(PrintWriter var1, Vector var2) {
  833.       String var3 = "";
  834.       Enumeration var4 = var2.elements();
  835.  
  836.       while(var4.hasMoreElements()) {
  837.          ClassDeclaration var5 = (ClassDeclaration)var4.nextElement();
  838.          String var6 = (String)var4.nextElement();
  839.          String var7 = (String)var4.nextElement();
  840.          if (var3.length() > 0) {
  841.             var3 = var3 + ", ";
  842.          }
  843.  
  844.          if (var7 == null) {
  845.             var3 = var3 + this.classString(var5);
  846.          } else {
  847.             var3 = var3 + this.classString(var5, var7, var6);
  848.          }
  849.       }
  850.  
  851.       var1.println("    <dt> <b>See Also:</b>");
  852.       var1.println("    <dd> " + var3);
  853.    }
  854.  
  855.    private void genDeprecation(PrintWriter var1, String var2, String var3) {
  856.       var1.println("<b> Note: " + var2 + " is deprecated.</b>");
  857.       if (var3.length() > 0) {
  858.          var1.println("<i>" + var3 + "</i>");
  859.       }
  860.  
  861.       var1.println("<p>");
  862.    }
  863. }
  864.