in blocks/cocoon-qdox/cocoon-qdox-impl/src/main/java/org/apache/cocoon/components/source/impl/QDoxSource.java [984:1118]
private void outputMethods(ContentHandler handler, JavaClass jClass, int mode) throws SAXException {
// Are there any methods in <mode>?
int size = 0;
String elementGroup, element;
JavaMethod[] methods = jClass.getMethods();
if (mode == CONSTRUCTOR_MODE) {
elementGroup = CONSTRUCTORS_ELEMENT;
element = CONSTRUCTOR_ELEMENT;
for (int i=0; i<methods.length; i++) {
if (methods[i].getReturns() == null) {
size++;
}
}
} else {
elementGroup = METHODS_ELEMENT;
element = METHOD_ELEMENT;
for (int i=0; i<methods.length; i++) {
if (methods[i].getReturns() != null) {
size++;
}
}
}
if (size > 0 || (mode == METHOD_MODE && hasInheritance(jClass, METHOD_INHERITANCE)) ||
(mode == CONSTRUCTOR_MODE && hasInheritance(jClass, CONSTRUCTOR_INHERITANCE))) {
saxStartElement(handler, elementGroup);
// Output inheritance:
if (mode == METHOD_MODE) {
outputSuperClassInheritance(handler, jClass, METHOD_INHERITANCE);
} else {
outputSuperClassInheritance(handler, jClass, CONSTRUCTOR_INHERITANCE);
}
for (int i=0; i<methods.length; i++) {
if (mode == METHOD_MODE && methods[i].getReturns() != null) {
outputMethodStartElement(handler, methods[i]);
} else if (mode == CONSTRUCTOR_MODE && methods[i].getReturns() == null) {
saxStartElement(handler, CONSTRUCTOR_ELEMENT,
new String[][] {{NAME_ATTRIBUTE, methods[i].getName()},
{SIGNATURE_ATTRIBUTE, getSignature(methods[i])}});
} else {
// Do not process this method or constructor:
continue;
}
JavaParameter[] params = methods[i].getParameters();
DocletTag[] paramTags = methods[i].getTagsByName("param");
DocletTag[] throwsTags = methods[i].getTagsByName("throws");
// Modifiers, comment, tags:
outputModifiers(handler, methods[i]);
outputComment(handler, methods[i].getComment());
outputTags(handler, methods[i]);
// Parameters:
if (params.length > 0) {
saxStartElement(handler, PARAMETERS_ELEMENT);
for (int j=0; j<params.length; j++) {
String paramName = params[j].getName();
saxStartElement(handler, PARAMETER_ELEMENT,
new String[][] {{NAME_ATTRIBUTE, paramName},
{TYPE_ATTRIBUTE, params[j].getType().getValue()},
{DIMENSIONS_ATTRIBUTE, Integer.toString(params[j].getType().getDimensions())}});
// Is there any doc for this parameter?
for (int k=0; k<paramTags.length; k++) {
String paramValue = paramTags[k].getValue();
int splitIndex = paramValue.indexOf(' ');
String paramValueName = splitIndex > 0 ? paramValue.substring(0, splitIndex) : paramValue;
if (paramName.equals(paramValueName)) {
outputComment(handler, splitIndex > 0 ? paramValue.substring(splitIndex + 1) : "");
}
}
saxEndElement(handler, PARAMETER_ELEMENT);
}
saxEndElement(handler, PARAMETERS_ELEMENT);
}
// Exceptions:
Type[] exceptions = methods[i].getExceptions();
if (exceptions.length + throwsTags.length > 0) {
saxStartElement(handler, THROWS_ELEMENT);
for (int j=0; j<exceptions.length; j++) {
// Iterate each exception which is declared in the throws clause:
String exceptionName = exceptions[j].getValue();
saxStartElement(handler, EXCEPTION_ELEMENT, new String[][] {{NAME_ATTRIBUTE, exceptionName}});
// Is there any doc for this exception?
if (throwsTags.length > 0) {
String exceptionClassName = exceptionName.substring(exceptionName.lastIndexOf('.'));
for (int k=0; k<throwsTags.length; k++) {
String excValue = throwsTags[k].getValue();
int splitIndex = excValue.indexOf(' ');
String excValueName = splitIndex > 0 ? excValue.substring(0, splitIndex) : excValue;
if (exceptionClassName.equals(excValueName)) {
outputComment(handler, splitIndex > 0 ? excValue.substring(splitIndex + 1) : "");
}
}
}
saxEndElement(handler, EXCEPTION_ELEMENT);
}
for (int j=0; j<throwsTags.length; j++) {
// Iterate each exception which is not declared in the throws clause but documented in javadoc:
String content = throwsTags[j].getValue();
int splitIndex = content.indexOf(' ');
String exceptionName = content.substring(0, splitIndex);
String qualifiedExceptionName = getQualifiedClassName(exceptionName);
// Does the exception *not* exist in the throws clause?
boolean found = false;
for (int k=0; !found && k<exceptions.length; k++) {
found = qualifiedExceptionName.equals(exceptions[k].getValue());
}
if (!found) {
saxStartElement(handler, EXCEPTION_ELEMENT, new String[][] {{NAME_ATTRIBUTE, qualifiedExceptionName}});
outputComment(handler, splitIndex > 0 ? content.substring(splitIndex + 1) : "");
saxEndElement(handler, EXCEPTION_ELEMENT);
}
}
saxEndElement(handler, THROWS_ELEMENT);
}
saxEndElement(handler, element);
}
saxEndElement(handler, elementGroup);
}
}