📄 driver.java
字号:
if (null != title) {
printOpenTag(1, "title");
println(2, title);
printCloseTag(1, "title");
}
printOpenTag(1, "created");
println(2, DateFormat.getDateInstance(DateFormat.LONG, Locale.US).format(new java.util.Date()));
printCloseTag(1, "created");
if (hasDeprecatedClasses) printAtomTag(1, "hasDeprecatedClasses");
if (hasDeprecatedInterfaces) printAtomTag(1, "hasDeprecatedInterfaces");
if (hasDeprecatedExceptions) printAtomTag(1, "hasDeprecatedExceptions");
if (hasDeprecatedErrors) printAtomTag(1, "hasDeprecatedErrors");
if (hasDeprecatedMethods) printAtomTag(1, "hasDeprecatedMethods");
if (hasDeprecatedFields) printAtomTag(1, "hasDeprecatedFields");
// Output summary of all classes specified on command line
println();
println(1, "<!-- Classes specified by user on command line -->");
ClassDoc[] specifiedClasses = rootDoc.specifiedClasses();
for (int i=0, ilim=specifiedClasses.length; i<ilim; ++i) {
ClassDoc sc = specifiedClasses[i];
printAtomTag(1, "specifiedclass fqname=\""+sc.qualifiedName()+"\" name=\""+sc.name()+"\"");
}
specifiedClasses = null;
// Output summary of all packages specified on command line
println();
println(1, "<!-- Packages specified by user on command line -->");
PackageDoc[] specifiedPackages = rootDoc.specifiedPackages();
for (int i=0, ilim=specifiedPackages.length; i<ilim; ++i) {
PackageDoc sp = specifiedPackages[i];
printAtomTag(1, "specifiedpackage name=\""+sp.name()+"\"");
}
specifiedPackages = null;
// Output package group information specified on the
// command line
println();
println(1, "<!-- Package groups specified by user on command line -->");
{
Iterator packageGroupIt = packageGroups.iterator();
while (packageGroupIt.hasNext()) {
PackageGroup packageGroup = (PackageGroup)packageGroupIt.next();
SortedSet groupedPackages = packageGroup.getPackages();
if (groupedPackages.isEmpty()) {
printWarning("Package group named '"
+ packageGroup.getName() + "' didn't match any packages.");
}
else {
printOpenTag(1, "packagegroup name=\"" + packageGroup.getName() + "\"");
Iterator groupedPackageIt = groupedPackages.iterator();
while (groupedPackageIt.hasNext()) {
PackageDoc groupedPackageDoc = (PackageDoc)groupedPackageIt.next();
printAtomTag(2, "package name=\"" + groupedPackageDoc.name() + "\"");
}
printCloseTag(1, "packagegroup");
}
}
packageGroups = null;
}
// Output information on all packages for which documentation
// has been made available via the Doclet API
println();
println(1, "<!-- Documentation for all packages -->");
PackageDoc[] packages = rootDoc.specifiedPackages();
for (int i=0, ilim=packages.length; i<ilim; ++i) {
PackageDoc c = packages[i];
outputPackageDoc(c);
}
packages = null;
// Output brief summary on all classes for which documentation
// has been made available via the Doclet API.
//
// While this is redundant, it can speed up XSLT
// processing by orders of magnitude
println();
println(1, "<!-- Brief summary for all classes -->");
ClassDoc[] sumclasses = rootDoc.classes();
for (int i=0, ilim=sumclasses.length; i<ilim; ++i) {
ClassDoc c = sumclasses[i];
outputClassDocSummary(c);
}
sumclasses = null;
// Output closing tag, finish output stream
println();
printCloseTag(0, "rootdoc");
closeTargetFile();
createIndexByName();
// Output information on all classes for which documentation
// has been made available via the Doclet API
println();
println(1, "<!-- Documentation for all classes -->");
ClassDoc[] classes = rootDoc.classes();
String prevPackageName = null;
for (int i = 0, ilim = classes.length; i < ilim; ++ i) {
ClassDoc c = classes[i];
if (isVerbose()) {
printNotice("Writing XML information for "+c.qualifiedName()+"...");
}
else {
String packageName = c.containingPackage().name();
if (null == prevPackageName || !packageName.equals(prevPackageName)) {
printNotice("Writing XML information for "+packageName+"...");
prevPackageName = packageName;
}
}
setTargetFile(c.qualifiedName().replace('/','.')+".xml");
println("<?xml version=\"1.0\"?>");
println("<!DOCTYPE gjdoc SYSTEM \"dtd/gjdoc.dtd\">");
outputClassDoc(c);
closeTargetFile();
}
classes = null;
}
// Copy DTD files to temporary directory
// FIXME: try to solve this via jar: URLs. but this will
// probably break libxmlj compatibility (?)
String[] resources = new String[] {
"gjdoc.dtd",
"gjdoc-alphaindex.dtd",
"dbcentx.mod",
"ent/iso-amsa.ent",
"ent/iso-amsb.ent",
"ent/iso-amsc.ent",
"ent/iso-amsn.ent",
"ent/iso-amso.ent",
"ent/iso-amsr.ent",
"ent/iso-box.ent",
"ent/iso-cyr1.ent",
"ent/iso-cyr2.ent",
"ent/iso-dia.ent",
"ent/iso-grk1.ent",
"ent/iso-grk2.ent",
"ent/iso-grk3.ent",
"ent/iso-grk4.ent",
"ent/iso-lat1.ent",
"ent/iso-lat2.ent",
"ent/iso-num.ent",
"ent/iso-pub.ent",
"ent/iso-tech.ent",
};
File tempDtdDirectory = new File(xmlTargetDirectory, "dtd");
File tempDtdEntDirectory = new File(tempDtdDirectory, "ent");
if ((tempDtdDirectory.exists() || tempDtdDirectory.mkdir())
&& (tempDtdEntDirectory.exists() || tempDtdEntDirectory.mkdir())) {
for (int i = 0; i < resources.length; ++ i) {
copyResourceToFile("/dtd/" + resources[i],
new File(tempDtdDirectory, resources[i]));
}
}
else {
printError("Cannot create temporary directories for DTD data at " + tempDtdDirectory);
return false;
}
// Copy package data-dir directory
{
PackageDoc[] packages = rootDoc.specifiedPackages();
for (int i=0, ilim=packages.length; i<ilim; ++i) {
PackageDoc c = packages[i];
if (c instanceof GjdocPackageDoc) {
copyPackageDataDir((GjdocPackageDoc)c);
}
}
}
// All information has been output. Apply stylesheet if given.
gnu.classpath.tools.gjdoc.Main.releaseRootDoc();
this.currentClass = null;
this.currentMember = null;
this.currentExecMember = null;
System.gc();
// From this point we are only operating on files, so we don't
// need this anymore and can free up some memory
for (Iterator it = targets.iterator(); it.hasNext(); ) {
TargetContext target = (TargetContext)it.next();
// We have XSLT postprocessing, run DocTranslet.
//DocTranslet docTranslet = DocTranslet.fromClasspath("/doctranslets/html/gjdoc.xsl");
//docTranslet.setOptions(docTransletOptions);
target.getDocTranslet().setOptions(docTransletOptions);
target.getDocTranslet().apply(xmlTargetDirectory,
target.getTargetDirectory(),
rootDoc);
}
// Done
targets = null;
System.gc();
Runtime.getRuntime().runFinalization();
return true;
}
catch (Exception e) {
// Something went wrong. Report to stderr and pass error to
// Javadoc Reporter
e.printStackTrace();
printError(e.toString());
Throwable rootCause = e.getCause();
if (null != rootCause) {
while (null != rootCause.getCause()) {
rootCause = rootCause.getCause();
}
System.err.println("Root cause:");
rootCause.printStackTrace();
}
return false;
}
finally {
// In any case, delete the working directory if we created one
if (null != workingDirectory) {
if (!deleteRecursive(workingDirectory)) {
printWarning("Could not delete temporary directory at "+workingDirectory);
}
}
printNotice("Done.");
}
}
/**
* Recursively delete the specified directory and its contents,
* like <code>rm -Rf directory</code>
*
* @return <code>true</code> on success
*/
private static boolean deleteRecursive(File directory) {
boolean success = true;
File[] files = directory.listFiles();
for (int i=0, ilim=files.length; i<ilim; ++i) {
File file = files[i];
if (file.isDirectory()) {
success = deleteRecursive(file) && success;
}
else {
success = file.delete() && success;
}
}
return directory.delete() && success;
}
/**
* Prints a string to stdout and appends a newline. Convenience
* method.
*/
protected void println(String str) {
out.println(str);
}
/**
* Prints a string to stdout without appending a newline.
* Convenience method.
*/
protected void print(String str) {
out.print(str);
}
/**
* In standard mode, prints an empty line to stdout.
* In thight mode, nothing happens.
* Convenience method.
*/
protected void println() {
if (!compress) {
out.println();
}
}
/**
* In standard mode, prints the given text indented to stdout and appends newline.
* In tight mode, doesn't print indentation or newlines.
*/
protected void print(int indentLevel, String msg) {
if (compress) {
out.print(msg);
}
else {
StringBuffer indentation = new StringBuffer();
for (int i=0; i<indentLevel*indentStep; ++i) {
indentation.append(' ');
}
out.print(indentation+msg);
}
}
/**
* In tight mode, prints a message at a given indentation level.
* In standard mode, appends a newline in addition.
*/
protected void println(int indentLevel, String msg) {
print(indentLevel, msg);
if (!compress) out.println();
}
/**
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -