⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doclet.java

📁 非常棒的java数据库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    + "</h4>");
            writer.println(formatText(method.commentText()));
            ParamTag[] paramTags = method.paramTags();
            boolean space = false;
            for (int j = 0; j < paramTags.length; j++) {
                if (!space) {
                    writer.println("<br /><br />");
                    space = true;
                }
                String p = paramTags[j].parameterName() + " - " + paramTags[j].parameterComment();
                if (j == 0) {
                    writer.println("<div class=\"itemTitle\">Parameters:</div>");
                }
                writer.println("<div class=\"item\">" + p + "</div>");
            }
            Tag[] returnTags = method.tags("return");
            if (returnTags != null && returnTags.length > 0) {
                if (!space) {
                    writer.println("<br /><br />");
                    space = true;
                }
                writer.println("<div class=\"itemTitle\">Returns:</div>");
                writer.println("<div class=\"item\">" + returnTags[0].text() + "</div>");
            }
            ThrowsTag[] throwsTags = method.throwsTags();
            if (throwsTags != null && throwsTags.length > 0) {
                if (!space) {
                    writer.println("<br /><br />");
                    space = true;
                }
                writer.println("<div class=\"itemTitle\">Throws:</div>");
                for (int j = 0; j < throwsTags.length; j++) {
                    String p = throwsTags[j].exceptionName();
                    String c = throwsTags[j].exceptionComment();
                    if (c.length() > 0) {
                        p += " - " + c;
                    }
                    writer.println("<div class=\"item\">" + p + "</div>");
                }
            }
            writer.println("<hr />");
        }

        // field details
        Arrays.sort(fields, new Comparator() {
            public int compare(Object a, Object b) {
                FieldDoc fa = (FieldDoc) a;
                FieldDoc fb = (FieldDoc) b;
                String ca = fa.constantValueExpression();
                String cb = fb.constantValueExpression();
                if (ca != null && cb != null) {
                    return ca.compareTo(cb);
                }
                return fa.name().compareTo(fb.name());
            }
        });
        for (int i = 0; i < fields.length; i++) {
            FieldDoc field = fields[i];
            if (skipField(clazz, field)) {
                continue;
            }
            String text = field.commentText();
            if (text.startsWith("INTERNAL")) {
                continue;
            }
            String name = field.name();
            String constant = field.constantValueExpression();
            String link = getFieldLink(text, constant, clazz, name);
            writer.println("<a name=\"" + link + "\"></a>");
            writer.println("<h4><span class=\"methodName\">" + name);
            if (constant == null) {
                writer.println();
            } else {
                writer.println(" = " + constant);
            }
            writer.println("</span></h4>");
            if (text != null) {
                writer.println("<div class=\"item\">" + formatText(text) + "</div>");
            }
            writer.println("<hr />");
        }

        writer.println("</div></td></tr></table></body></html>");
        writer.close();
        out.close();
    }

    private String getFieldLink(String text, String constant, ClassDoc clazz, String name) {
        String link = constant != null ? constant : name.toLowerCase();
        int linkStart = text.indexOf("<code>");
        if (linkStart >= 0) {
            int linkEnd = text.indexOf("</code>", linkStart);
            link = text.substring(linkStart + "<code>".length(), linkEnd);
            if (constant != null && !constant.equals(link)) {
                System.out.println("Wrong code tag? " + clazz.name() + "." + name +
                        " code: " + link + " constant: " + constant);
                errorCount++;
            }
        }
        if (Character.isDigit(link.charAt(0))) {
            link = "c" + link;
        }
        return link;
    }

    private static String formatText(String text) {
        if (text == null) {
            return text;
        }
        text = StringUtils.replaceAll(text, "\n </pre>", "</pre>");
        return text;
    }

    private static boolean skipField(ClassDoc clazz, FieldDoc field) {
        if (!field.isFinal() || !field.isStatic() || !field.isPublic() || field.containingClass() != clazz) {
            return true;
        }
        return false;
    }

    private boolean skipMethod(MethodDoc method) {
        ClassDoc clazz = method.containingClass();
        boolean isInterface = clazz.isInterface() || (clazz.isAbstract() && method.isAbstract());
         if (INTERFACES_ONLY && !isInterface) {
             return true;
         }
        String name = method.name();
        if (!method.isPublic() || name.equals("finalize")) {
            return true;
        }
        if (method.getRawCommentText().trim().startsWith("@deprecated INTERNAL")) {
            return true;
        }
        String firstSentence = getFirstSentence(method.firstSentenceTags());
        String raw = method.getRawCommentText();
        if (firstSentence != null && firstSentence.startsWith("INTERNAL")) {
            return true;
        }        
        if ((firstSentence == null || firstSentence.trim().length() == 0) && raw.indexOf("{@inheritDoc}") < 0) {
            if (!doesOverride(method)) {
                boolean setterOrGetter = name.startsWith("set") && method.parameters().length == 1;
                setterOrGetter |= name.startsWith("get") && method.parameters().length == 0;
                if (isInterface || !setterOrGetter) {
                    addError("Undocumented method " + " (" + clazz.name() + ".java:" + method.position().line() +") " + clazz + "." + name + " " + raw);
                    return true;
                }
            }
        }
        return false;
    }
    
    private void addError(String s) {
        if (errors.add(s)) {
            System.out.println(s);
            errorCount++;
        }
    }
    
    private boolean doesOverride(MethodDoc method) {
        ClassDoc clazz = method.containingClass();
        ClassDoc[] ifs = clazz.interfaces();
        int pc = method.parameters().length;
        String name = method.name();
        for (int i = 0;; i++) {
            ClassDoc c;
            if (i < ifs.length) {
                c = ifs[i];
            } else {
                clazz = clazz.superclass();
                if (clazz == null) {
                    break;
                }
                c = clazz;
            }
            MethodDoc[] ms = c.methods();
            for (int j = 0; j < ms.length; j++) {
                MethodDoc m = ms[j];
                if (m.name().equals(name) && m.parameters().length == pc) {
                    return true;
                }
            }
        }
        return false;
    }

    private static String getFirstSentence(Tag[] tags) {
        String firstSentence = null;
        if (tags.length > 0) {
            Tag first = tags[0];
            firstSentence = first.text();
        }
        return firstSentence;
    }

    private static String getTypeName(boolean isStatic, Type type) {
        String s = type.typeName() + type.dimension();
        if (isStatic) {
            s = "static " + s;
        }
        return s;
    }

    private static boolean isDeprecated(MethodDoc method) {
        Tag[] tags = method.tags();
        boolean deprecated = false;
        for (int j = 0; j < tags.length; j++) {
            Tag t = tags[j];
            if (t.kind().equals("@deprecated")) {
                deprecated = true;
            }
        }
        return deprecated;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -