195 lines
6.2 KiB
Java
195 lines
6.2 KiB
Java
/*
|
|
* Copyright (C) 2008 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import org.clearsilver.HDF;
|
|
import org.clearsilver.CS;
|
|
import java.util.*;
|
|
import java.io.*;
|
|
|
|
public class TodoFile {
|
|
|
|
public static final String MISSING = "No description text";
|
|
|
|
public static boolean areTagsUseful(InheritedTags tags) {
|
|
while (tags != null) {
|
|
if (areTagsUseful(tags.tags())) {
|
|
return true;
|
|
}
|
|
tags = tags.inherited();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static boolean areTagsUseful(TagInfo[] tags) {
|
|
for (TagInfo t: tags) {
|
|
if ("Text".equals(t.name()) && t.text().trim().length() != 0) {
|
|
return true;
|
|
}
|
|
if ("@inheritDoc".equals(t.name())) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void setHDF(HDF data, String base, SourcePositionInfo pos, String name,
|
|
String descr) {
|
|
data.setValue(base + ".pos", pos.toString());
|
|
data.setValue(base + ".name", name);
|
|
data.setValue(base + ".descr", descr);
|
|
}
|
|
|
|
static class PackageStats {
|
|
String name;
|
|
public int total;
|
|
public int errors;
|
|
}
|
|
|
|
public static String percent(int a, int b) {
|
|
return ""+Math.round((((b-a)/(float)b))*100) + "%";
|
|
}
|
|
|
|
public static void writeTodoFile(String filename) {
|
|
HDF data = DroidDoc.makeHDF();
|
|
DroidDoc.setPageTitle(data, "Missing Documentation");
|
|
TreeMap<String,PackageStats> packageStats = new TreeMap<String,PackageStats>();
|
|
|
|
ClassInfo[] classes = Converter.rootClasses();
|
|
Arrays.sort(classes);
|
|
|
|
int classIndex = 0;
|
|
|
|
for (ClassInfo cl: classes) {
|
|
if (cl.isHidden()) {
|
|
continue;
|
|
}
|
|
|
|
String classBase = "classes." + classIndex;
|
|
|
|
String base = classBase + ".errors.";
|
|
int errors = 0;
|
|
int total = 1;
|
|
|
|
if (!areTagsUseful(cl.inlineTags())) {
|
|
setHDF(data, base + errors, cl.position(), "<class comment>", MISSING);
|
|
errors++;
|
|
}
|
|
|
|
|
|
for (MethodInfo m: cl.constructors()) {
|
|
boolean good = true;
|
|
total++;
|
|
if (m.checkLevel()) {
|
|
if (!areTagsUseful(m.inlineTags())) {
|
|
setHDF(data, base + errors, m.position(), m.name() + m.prettySignature(),
|
|
MISSING);
|
|
good = false;
|
|
}
|
|
}
|
|
if (!good) {
|
|
errors++;
|
|
}
|
|
}
|
|
|
|
for (MethodInfo m: cl.selfMethods()) {
|
|
boolean good = true;
|
|
total++;
|
|
if (m.checkLevel()) {
|
|
if (!areTagsUseful(m.inlineTags())) {
|
|
setHDF(data, base + errors, m.position(), m.name() + m.prettySignature(),
|
|
MISSING);
|
|
good = false;
|
|
}
|
|
}
|
|
if (!good) {
|
|
errors++;
|
|
}
|
|
}
|
|
|
|
|
|
for (FieldInfo f: cl.enumConstants()) {
|
|
boolean good = true;
|
|
total++;
|
|
if (f.checkLevel()) {
|
|
if (!areTagsUseful(f.inlineTags())) {
|
|
setHDF(data, base + errors, f.position(), f.name(), MISSING);
|
|
good = false;
|
|
}
|
|
}
|
|
if (!good) {
|
|
errors++;
|
|
}
|
|
}
|
|
|
|
for (FieldInfo f: cl.selfFields()) {
|
|
boolean good = true;
|
|
total++;
|
|
if (f.checkLevel()) {
|
|
if (!areTagsUseful(f.inlineTags())) {
|
|
setHDF(data, base + errors, f.position(), f.name(), MISSING);
|
|
good = false;
|
|
}
|
|
}
|
|
if (!good) {
|
|
errors++;
|
|
}
|
|
}
|
|
|
|
if (errors > 0) {
|
|
data.setValue(classBase + ".qualified", cl.qualifiedName());
|
|
data.setValue(classBase + ".errorCount", ""+errors);
|
|
data.setValue(classBase + ".totalCount", ""+total);
|
|
data.setValue(classBase + ".percentGood", percent(errors, total));
|
|
}
|
|
|
|
PackageInfo pkg = cl.containingPackage();
|
|
String pkgName = pkg != null ? pkg.name() : "";
|
|
PackageStats ps = packageStats.get(pkgName);
|
|
if (ps == null) {
|
|
ps = new PackageStats();
|
|
ps.name = pkgName;
|
|
packageStats.put(pkgName, ps);
|
|
}
|
|
ps.total += total;
|
|
ps.errors += errors;
|
|
|
|
classIndex++;
|
|
}
|
|
|
|
int allTotal = 0;
|
|
int allErrors = 0;
|
|
|
|
int i = 0;
|
|
for (PackageStats ps: packageStats.values()) {
|
|
data.setValue("packages." + i + ".name", ""+ps.name);
|
|
data.setValue("packages." + i + ".errorCount", ""+ps.errors);
|
|
data.setValue("packages." + i + ".totalCount", ""+ps.total);
|
|
data.setValue("packages." + i + ".percentGood", percent(ps.errors, ps.total));
|
|
|
|
allTotal += ps.total;
|
|
allErrors += ps.errors;
|
|
|
|
i++;
|
|
}
|
|
|
|
data.setValue("all.errorCount", ""+allErrors);
|
|
data.setValue("all.totalCount", ""+allTotal);
|
|
data.setValue("all.percentGood", percent(allErrors, allTotal));
|
|
|
|
ClearPage.write(data, "todo.cs", filename, true);
|
|
}
|
|
}
|
|
|