📄 driver.java
字号:
if (null!=throwsTag.exception()) {
outputType(level+1, "exception", throwsTag.exception());
}
else {
StringBuffer sb = new StringBuffer("Exception ");
sb.append(throwsTag.exceptionName());
sb.append(" not found in ");
if (currentExecMember instanceof MethodDoc) {
MethodDoc m = (MethodDoc)currentExecMember;
sb.append(m.returnType().typeName());
sb.append(m.returnType().dimension());
sb.append(' ');
}
sb.append(currentClass.qualifiedName());
sb.append('.');
sb.append(currentExecMember.name());
sb.append('(');
Parameter[] params = currentExecMember.parameters();
for (int j=0; j < params.length; j++) {
sb.append(params[j].type().typeName());
sb.append(params[j].type().dimension());
sb.append(' ');
sb.append(params[j].name());
if (j != params.length-1)
sb.append(", ");
}
sb.append(')');
printWarning(sb.toString());
printAtomTag(level+1, "exception typename=\""+throwsTag.exceptionName()+"\"");
}
}
else if (tag instanceof ParamTag) {
ParamTag paramTag = (ParamTag)tag;
printAtomTag(level+1, "parameter name=\""+paramTag.parameterName()+"\"");
}
if (null != tag.text()) {
//printOpenTag(level+1, "text", false);
if (fixHTML) {
print(htmlRepairer.getWellformedHTML(tag.text()));
}
else {
print("<![CDATA["+cdata(tag.text())+"]]>");
}
//printCloseTag(0 /* don't introduce additional whitespace */, "text");
}
else {
printWarning("Tag got null text: "+tag);
}
if ((descend && ("@throws".equals(tag.name()) || "@param".equals(tag.name()))) || "@deprecated".equals(tag.name())) {
if (tag.firstSentenceTags().length>0) {
printOpenTag(level+1, "firstSentenceTags", false);
outputTags(level+2, tag.firstSentenceTags(), false, context);
printCloseTag(0, "firstSentenceTags");
}
if (tag.inlineTags().length>0) {
printOpenTag(level+1, "inlineTags", false);
outputTags(level+2, tag.firstSentenceTags(), false, context);
printCloseTag(0, "inlineTags");
}
}
if (fixHTML && lastTag) {
String terminateText = htmlRepairer.terminateText();
if (null != terminateText && terminateText.length() > 0) {
print(terminateText);
}
}
if (!"Text".equals(tag.name())) {
Taglet inlineTaglet = (Taglet)tagletMap.get(tag.name().substring(1));
if (null != inlineTaglet && inlineTaglet.isInlineTag()) {
printOpenTag(0, "inlineTagletText", false);
print(inlineTaglet.toString(tag));
printCloseTag(0, "inlineTagletText");
}
printCloseTag(0, "tag", false);
}
}
void outputTaglets(int level, Tag[] tags, boolean descend, int context)
{
for (Iterator it = tagletMap.keySet().iterator(); it.hasNext(); ) {
String tagName = (String)it.next();
Object o = tagletMap.get(tagName);
Taglet taglet = (Taglet)o;
if (!taglet.isInlineTag()
&& ((context != CONTEXT_CONSTRUCTOR || taglet.inConstructor())
|| (context != CONTEXT_FIELD || taglet.inField())
|| (context != CONTEXT_METHOD || taglet.inMethod())
|| (context != CONTEXT_OVERVIEW || taglet.inOverview())
|| (context != CONTEXT_PACKAGE || taglet.inPackage())
|| (context != CONTEXT_TYPE || taglet.inType()))) {
List tagsOfThisType = new ArrayList();
for (int i=0, ilim=tags.length; i<ilim; ++i) {
if (tags[i].name().substring(1).equals(tagName)) {
tagsOfThisType.add(tags[i]);
}
}
if (!tagsOfThisType.isEmpty()) {
Tag[] tagletTags = (Tag[])tagsOfThisType.toArray(new Tag[tagsOfThisType.size()]);
if (taglet instanceof StandardTaglet) {
Iterator tagIterator = tagsOfThisType.iterator();
while (tagIterator.hasNext()) {
Tag tag = (Tag)tagIterator.next();
outputTag(tag, level, descend, context, !tagIterator.hasNext());
}
}
else {
String tagletString = taglet.toString(tagletTags);
if (null != tagletString) {
printOpenTag(0, "tag name=\"" + tagName + "\" taglet-generated=\"true\"");
if (fixHTML) {
print(htmlRepairer.getWellformedHTML(tagletString));
print(htmlRepairer.terminateText());
}
else {
print("<![CDATA["+cdata(tagletString)+"]]>");
}
printCloseTag(0, "tag", false);
}
}
}
}
}
}
/**
* Inofficial entry point. We got an instance here.
*/
protected boolean instanceStart(RootDoc _rootDoc) {
this.rootDoc = _rootDoc;
_rootDoc = null;
boolean xmlOnly = true;
// Set the default Taglet order
registerTaglet(new VersionTaglet());
registerTaglet(new AuthorTaglet());
//registerTaglet(new SinceTaglet());
registerTaglet(new StandardTaglet("deprecated"));
registerTaglet(new StandardTaglet("see"));
registerTaglet(new StandardTaglet("param"));
// Set the built-in Taglet filter
AuthorTaglet.setTagletEnabled(false);
VersionTaglet.setTagletEnabled(false);
SinceTaglet.setTagletEnabled(true);
DeprecatedTaglet.setTagletEnabled(true);
try {
{
// Process command line options passed through to this doclet
TargetContext targetContext = null;
TargetContext htmlTargetContext
= new TargetContext(DocTranslet.fromClasspath("/doctranslets/html/gjdoc.xsl"),
targetDirectory);
for (int i=0, ilim=rootDoc.options().length; i<ilim; ++i) {
String[] option = rootDoc.options()[i];
String optionTag = option[0];
if ("-d".equals(optionTag)) {
if (null == targetDirectory) {
targetDirectory = new File(option[1]);
}
if (null != targetContext) {
targetContext.setTargetDirectory(targetDirectory);
}
}
else if ("-nofixhtml".equals(optionTag)) {
fixHTML = false;
printError("-nofixhtml currently not supported.");
return false;
}
else if ("-compress".equals(optionTag)) {
compress = true;
}
else if ("-nohtmlwarn".equals(optionTag)) {
noHTMLWarn = true;
}
else if ("-noemailwarn".equals(optionTag)) {
noEmailWarn = true;
}
else if ("-indentstep".equals(optionTag)) {
indentStep = Integer.parseInt(option[1]);
}
else if ("-doctranslet".equals(optionTag)) {
targets.add(targetContext = new TargetContext(DocTranslet.fromJarFile(new File(option[1])),
targetDirectory));
}
else if ("-genhtml".equals(optionTag)) {
htmlTargetContext.setTargetDirectory(targetDirectory);
targets.add(targetContext = htmlTargetContext);
xmlOnly = false;
}
else if ("-geninfo".equals(optionTag)) {
targetContext
= new TargetContext(DocTranslet.fromClasspath("/doctranslets/info/gengj.xsl"),
targetDirectory);
targets.add(targetContext);
if (!fixHTML) {
printNotice("NOTE: -geninfo implies -fixhtml.");
fixHTML = true;
}
xmlOnly = false;
}
else if ("-gendocbook".equals(optionTag)) {
targetContext = new TargetContext(DocTranslet.fromClasspath("/doctranslets/docbook/gengj.xsl"),
targetDirectory);
targets.add(targetContext);
if (!fixHTML) {
printNotice("NOTE: -gendocbook implies -fixhtml.");
fixHTML = true;
}
}
else if ("-genpdf".equals(optionTag)) {
targetContext
= new TargetContext(DocTranslet.fromClasspath("/doctranslets/docbook/gengj.xsl"),
targetDirectory);
/** "gnu.classpath.tools.doclets.xmldoclet.DocBookPostprocessor") **/
targets.add(targetContext);
if (!fixHTML) {
printNotice("NOTE: -genpdf implies -fixhtml.");
fixHTML = true;
}
}
else if ("-xmlonly".equals(optionTag)) {
xmlOnly = true;
}
else if ("-bottomnote".equals(optionTag)) {
FileReader reader = new FileReader(option[1]);
StringWriter writer = new StringWriter();
char[] buf = new char[256];
int nread;
while ((nread = reader.read(buf)) >= 0) {
writer.write(buf, 0, nread);
}
writer.flush();
bottomNote = writer.toString();
writer.close();
reader.close();
}
else if ("-title".equals(optionTag)) {
title = option[1];
}
else if ("-workpath".equals(optionTag)) {
workingPath = option[1];
}
else if ("-tagletpath".equals(optionTag)) {
if (null == tagletPath) {
tagletPath = option[1];
}
else {
tagletPath = tagletPath + File.pathSeparator + option[1];
}
}
else if ("-taglet".equals(optionTag)) {
boolean tagletLoaded = false;
String useTagletPath = this.tagletPath;
if (null == useTagletPath) {
useTagletPath = System.getProperty("java.class.path");
}
try {
Class tagletClass;
try {
tagletClass
= new FileSystemClassLoader(useTagletPath).loadClass(option[1]);
}
catch (ClassNotFoundException e) {
// If not found on specified tagletpath, try default classloader
tagletClass
= Class.forName(option[1]);
}
Method registerTagletMethod
= tagletClass.getDeclaredMethod("register", new Class[] { java.util.Map.class });
if (!registerTagletMethod.getReturnType().equals(Void.TYPE)) {
printError("Taglet class '" + option[1] + "' found, but register method doesn't return void.");
}
else if (registerTagletMethod.getExceptionTypes().length > 0) {
printError("Taglet class '" + option[1] + "' found, but register method contains throws clause.");
}
else if ((registerTagletMethod.getModifiers() & (Modifier.STATIC | Modifier.PUBLIC | Modifier.ABSTRACT)) != (Modifier.STATIC | Modifier.PUBLIC)) {
printError("Taglet class '" + option[1] + "' found, but register method isn't public static, or is abstract..");
}
else {
Map tempMap = new HashMap();
registerTagletMethod.invoke(null, new Object[] { tempMap });
tagletLoaded = true;
String name = (String)tempMap.keySet().iterator().next();
Taglet taglet = (Taglet)tempMap.get(name);
tagletMap.put(name, taglet);
mentionedTags.add(taglet);
}
}
catch (NoSuchMethodException e) {
printError("Taglet class '" + option[1] + "' found, but doesn't contain the register method.");
}
catch (SecurityException e) {
printError("Taglet class '" + option[1] + "' cannot be loaded: " + e.getMessage());
}
catch (InvocationTargetException e) {
printError("Taglet class '" + option[1] + "' found, but register method throws exception: " + e.toString());
}
catch (IllegalAccessException e) {
printError("Taglet class '" + option[1] + "' found, but there was a problem when accessing the register method: " + e.toString());
}
catch (IllegalArgumentException e) {
printError("Taglet class '" + option[1] + "' found, but there was a problem when accessing the register method: " + e.toString());
}
catch (ClassNotFoundException e) {
printError("Taglet class '" + option[1] + "' cannot be found.");
}
if (!tagletLoaded) {
return false;
}
}
else if ("-author".equals(optionTag)) {
AuthorTaglet.setTagletEnabled(true);
}
else if ("-version".equals(optionTag)) {
VersionTaglet.setTagletEnabled(true);
}
else if ("-nosince".equals(optionTag)) {
SinceTaglet.setTagletEnabled(false);
}
else if ("-nodeprecated".equals(optionTag)) {
DeprecatedTaglet.setTagletEnabled(false);
}
else if ("-authormail".equals(optionTag)) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -