Docletにさわる

Docletでクラス名とフィールド名をCSVに出力する。

package sample;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.RootDoc;

public class PropertyCsvDoclet {

	public static boolean start(RootDoc root) throws Exception {

		File file = new File("C:/doc.csv");
		BufferedWriter writer = new BufferedWriter(new FileWriter(file));

		ClassDoc classes = root.classes();
		for (int i = 0; i < classes.length; ++i) {
			writer.append(classes[i].name());
			writer.append(",");
			writer.append(getOutlineText(classes[i].commentText()));
			writer.newLine();

			FieldDoc fields = classes[i].fields(false);
			for (FieldDoc field : fields) {
				writer.append(",");
				writer.append(",");
				writer.append(field.type().typeName());
				writer.append(",");
				writer.append(field.name());
				writer.append(",");
				writer.append(getOutlineText(field.commentText()));
				writer.newLine();
			}
		}

		writer.close();

		return true;
	}

	private static String getOutlineText(String text) {
		if (text == null || text.trim().length() < 1) {
			return "";
		}
		String[] strings = text.split("[.。]");
		return strings[0];
	}

}