import com.sun.javadoc.*; import java.util.HashMap; import java.util.Map.Entry; import java.util.Iterator; public class commentParser { static HashMap parsedComments = new HashMap(); public static boolean start(RootDoc root) { /* * This method is called by 'javadoc' and gets the whole parsed java * file, we get comments and store them */ for (ClassDoc classDoc : root.classes()) { if (classDoc.getRawCommentText().length() > 0) parsedComments.put(classDoc.name(), classDoc.getRawCommentText()); for (FieldDoc f : classDoc.enumConstants()) { if (f.getRawCommentText().length() > 0) parsedComments.put(f.name(), f.getRawCommentText()); } for (FieldDoc f : classDoc.fields()) { if (f.getRawCommentText().length() > 0) parsedComments.put(f.name(), f.getRawCommentText()); } for (MethodDoc m : classDoc.methods()) { if (m.getRawCommentText().length() > 0) parsedComments.put(m.name(), m.getRawCommentText()); } } return true; } public static int check(HashMap wantedComments) { int errorCount=0; Iterator< Entry > it = parsedComments.entrySet().iterator(); while (it.hasNext()) { Entry e = (Entry) it.next(); if (!e.getValue().equals(wantedComments.get(e.getKey()))) { System.out.println("Documentation comments for " + e.getKey() + " does not match: "); System.out.println("\texpected:"+wantedComments.get(e.getKey())); System.out.println("\tgot:\t"+e.getValue()); errorCount++; } } if (parsedComments.size() < wantedComments.size()) { System.out.println("Found " + (wantedComments.size()-parsedComments.size()) + " missed comment(s)!"); errorCount++; } return errorCount; } public static void printCommentListForJavaSource() { Iterator< Entry > it = parsedComments.entrySet().iterator(); while (it.hasNext()) { Entry e = (Entry) it.next(); System.out.format("wantedComments.put(\"%s\", \"%s\");\n", e.getKey(), e.getValue()); } } public static void main(String argv[]) { if (argv.length<1) { System.out.format("Usage:\n\tcommentParsing \n"); System.exit(1); } com.sun.tools.javadoc.Main.execute("The comment parser program", "commentParser", new String[]{"-quiet", argv[0]}); // if we are run as standalone app, print the list of found comments as it would appear in java source printCommentListForJavaSource(); } }