Mercurial > public > gradleplugins
diff src/main/resources/org/ssdt_ohio/gradle/userdoc/templates/classDocName.html @ 16:8400a7db1330
USASR-1307: update templates to groovydoc 2.3.6
author | smith@nwoca.org |
---|---|
date | Wed, 31 Dec 2014 22:35:45 +0000 |
parents | e3c55e83c9a4 |
children | 3741247de37a |
line wrap: on
line diff
--- a/src/main/resources/org/ssdt_ohio/gradle/userdoc/templates/classDocName.html Fri Jan 17 18:16:29 2014 +0000 +++ b/src/main/resources/org/ssdt_ohio/gradle/userdoc/templates/classDocName.html Wed Dec 31 22:35:45 2014 +0000 @@ -1,651 +1,735 @@ - -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<!-- **************************************************************** --> -<!-- * PLEASE KEEP COMPLICATED EXPRESSIONS OUT OF THESE TEMPLATES, * --> -<!-- * i.e. only iterate & print data where possible. Thanks, Jez. * --> -<!-- **************************************************************** --> -<% - - - classDoc = new org.ssdt_ohio.gradle.doc.tools.UserClassDocProxy().wrap(classDoc) - - def title = classDoc.name() + (props.docTitle ? " (${props.docTitle})" : "") - def isVisible = { it.isPublic() || (it.isProtected() && props.protectedScope == 'true') || (!it.isProtected() && !it.isPrivate() && props.packageScope == 'true') || props.privateScope == 'true' } - def isVisibleExt = { t -> java.lang.reflect.Modifier.isPublic(t.modifiers) || java.lang.reflect.Modifier.isProtected(t.modifiers) } - def visibleFields = classDoc.fields().findAll(isVisible) - def visibleProperties = classDoc.properties() // props visible be defn - def visibleMethods = classDoc.methods().findAll(isVisible) - def visibleConstructors = classDoc.constructors().findAll(isVisible) - def visibleNested = classDoc.innerClasses().findAll(isVisible) - boolean hasFields = !classDoc.isAnnotationType() && visibleFields - boolean hasProperties = !classDoc.isAnnotationType() && visibleProperties - boolean hasElements = classDoc.isAnnotationType() && visibleFields - boolean methodSummaryShown = visibleMethods - boolean fieldSummaryShown = hasFields - boolean hasEnumConstants = classDoc.enumConstants() - def dolink = { t, boolean b -> - boolean isArray = false - if (!t || t instanceof String) { - return (classDoc.getDocUrl(t, b) -'java.util.' - 'java.lang.') - } - if (t instanceof org.codehaus.groovy.tools.groovydoc.ArrayClassDocWrapper) { - t = t.delegate - isArray = true - } - if (t instanceof org.codehaus.groovy.tools.groovydoc.SimpleGroovyClassDoc) { - if (t.fullPathName == 'def') return classDoc.getDocUrl("java.lang.Object def", b) - return "<a href='" + classDoc.relativeRootPath + t.fullPathName + ".html'>" + ( (b ? t.qualifiedTypeName() : t.name() ) - "java.lang." - "java.util." ) + "</a>" + (isArray ? "[]" : "") - } - return ( classDoc.getDocUrl(t.qualifiedTypeName(), b) - 'java.util.' - 'java.lang.' ) + (isArray ? "[]" : "") - } - def linkfull = { t -> dolink(t, true) } - def linkable = { t -> dolink(t, false) } - def modifiersWithIgnore = { t, boolean ignorePublic -> - (t.isPrivate()?"private ":"") + - (t.isPublic() && !ignorePublic?"public ":"") + - (t.isProtected()?"protected ":"") + - (t.isStatic()?"static ":"") + - (t.isFinal()?"final ":"") + - (t.respondsTo('isAbstract') && t.isAbstract()?"abstract ":"") - } - def modifiers = { t -> modifiersWithIgnore(t, classDoc.isGroovy()) } - def modifiersBrief = { t -> - (t.isPrivate()?"private ":"") + - (t.isProtected()?"protected ":"") + - (t.isStatic()?"static ":"") - } - def annotations = { t, sepChar -> - t.annotations() ? t.annotations().collect { -// it.isTypeAvailable() ? '@'+linkable(it.type().name())+(it.description()-('@'+it.type().name())): it.description() - it.description() - }.join(sepChar) + sepChar : '' - } - def elementTypes = [ - "required":"true", - "optional":"false" - ] - def isRequired = { f, v -> - def req = f.constantValueExpression() == null; req.toString() == v - } - def upcase = { n -> n[0].toUpperCase() + n[1..-1] } - def paramsOf = { n, boolean brief -> n.parameters().collect{ param -> (brief?'':annotations(param, ' ')) + linkable(param.isTypeAvailable()?param.type():param.typeName()) + (param.vararg()?'... ':' ') + param.name() + (param.defaultValue() ? " = " + param.defaultValue():"") }.join(", ") } - def nameFromParams = { n -> n.name() + '(' + n.parameters().collect{ param -> param.isTypeAvailable()?param.type().qualifiedTypeName():param.typeName() }.join(', ') + ')' } - def nameFromJavaParams = { n -> n.name + '(' + n.parameterTypes.collect{ param -> param.name }.join(', ') + ')' } -%> -<html> -<head> -<!-- Generated by groovydoc (${GroovySystem.version}) on ${new Date()} --> -<title>${title}</title> -<meta name="date" content="${new Date().format('yyyy-MM-dd')}"> -<meta http-equiv="Content-Type" content="text/html; charset=${props.charset}"> -<link href="${classDoc.relativeRootPath}groovy.ico" type="image/x-icon" rel="shortcut icon"> -<link href="${classDoc.relativeRootPath}groovy.ico" type="image/x-icon" rel="icon"> -<link rel="stylesheet" type="text/css" href="${classDoc.relativeRootPath}stylesheet.css" title="Style"> -<script type="text/javascript"> -function windowTitle() -{ - if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="${title}"; - } -} -</script> -<noscript> -</noscript> - -</head><body onload="windowTitle();" bgcolor="white"> -<hr> - -<!-- ========= START OF TOP NAVBAR ======= --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="${classDoc.relativeRootPath}overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> - - <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <!--<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> - --> - <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="${classDoc.relativeRootPath}deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="${classDoc.relativeRootPath}index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="${classDoc.relativeRootPath}help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -<% if (props.header) { %><b>${props.header}</b><% } %> -</EM></TD> -</TR> - -<TR> -<TD BGCOLOR="white" CLASS="NavBarCell2"><!--<FONT SIZE="-2"> - <A HREF="${classDoc.relativeRootPath}groovy/lang/ExpandoMetaClass.ExpandoMetaProperty.html" title="class in groovy.lang"><B>PREV CLASS</B></A> - - <A HREF="${classDoc.relativeRootPath}groovy/lang/GroovyClassLoader.html" title="class in groovy.lang"><B>NEXT CLASS</B></A></FONT>--></TD> -<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> - <A HREF="${classDoc.relativeRootPath}index.html?${classDoc.fullPathName}.html" target="_top"><B>FRAMES</B></A> - <A HREF="${classDoc.name()}.html" target="_top"><B>NO FRAMES</B></A> - <script type="text/javascript"> - <!-- - if(window==top) { - document.writeln('<A HREF="${classDoc.relativeRootPath}allclasses-frame.html"><B>All Classes</B></A>'); - } - //--> -</script> -<noscript> - <A HREF="${classDoc.relativeRootPath}allclasses-frame.html"><B>All Classes</B></A> -</noscript> - -</FONT></TD> - -</TR> -<TR> -<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> -SUMMARY: <% - if (classDoc.isAnnotationType()) { - def hasReq = classDoc.fields().any{ isRequired(it, "true") } - def hasOpt = classDoc.fields().any{ isRequired(it, "false") } - %><% if (hasReq) { %><A HREF="#required_element_summary"><% } %>REQUIRED<% if (hasReq) { %></A><% } - %> | <% if (hasOpt) { %><A HREF="#optional_element_summary"><% } %>OPTIONAL<% if (hasOpt) { %></A><% } %><% - } else { - if (visibleNested) { %><A HREF="#nested_summary"><% } %>NESTED<% if (visibleNested) { %></A><% } - if (classDoc.isEnum()) { - %> | <% if (hasEnumConstants) { %><A HREF="#enum_constant_summary"><% } %>ENUM CONSTANTS<% if (hasEnumConstants) { %></A><% } - } - %> | <% if (hasFields) { %><A HREF="#field_summary"><% } %>FIELD<% if (hasFields) { %></A><% } - if (hasProperties) { %> | <A HREF="#property_summary">PROPERTY</A><% } - if (classDoc.isClass()) { - %> | <% if (visibleConstructors) { %><A HREF="#constructor_summary"><% } %>CONSTR<% if (visibleConstructors) { %></A><% } - } - %> | <% if (visibleMethods) { %><A HREF="#method_summary"><% } %>METHOD<% if (visibleMethods) { %></A><% } - } - %></FONT></TD> -<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <% - if (classDoc.isAnnotationType()) { - if (hasElements) { %><A HREF="#element_detail"><% } %>ELEMENT<% if (hasElements) { %></A><% } - } else { - if (classDoc.isEnum()) { - if (hasEnumConstants) { %><A HREF="#enum_constant_detail"><% } %>ENUM CONSTANTS<% if (hasEnumConstants) { %></A> | <% } - } - if (hasFields) { %><A HREF="#field_detail"><% } %>FIELD<% if (hasFields) { %></A><% } - if (hasProperties) { %> | <A HREF="#prop_detail">PROPERTY</A><% } - if (classDoc.isClass()) { - %> | <% if (visibleConstructors) { %><A HREF="#constructor_detail"><% } %>CONSTR<% if (visibleConstructors) { %></A><% } - } - %> | <% if (visibleMethods) { %><A HREF="#method_detail"><% } %>METHOD<% if (visibleMethods) { %></A><% } - } - %></FONT></TD> -</TR> -</TABLE> -<!-- ========= END OF TOP NAVBAR ========= --> - - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<% -def pkg = classDoc.containingPackage().nameWithDots() -if (pkg != "DefaultPackage") { -%> -<FONT SIZE="-1"> -${pkg}</FONT> -<BR> -<% } %> -<span CLASS="ClassTitleFont"> ${classDoc.typeDescription} ${classDoc.name()}</span></H2> -<% -def parents = classDoc.isInterface() ? classDoc.parentInterfaces : classDoc.parentClasses -if (parents.size() >= 2) { - %><pre><% - parents.eachWithIndex { p, i -> - %>${(i > 0 ? " " * i + " " * (i - 1) + "<img src='" + classDoc.relativeRootPath + "inherit.gif'>" : "") + ( i == parents.size() - 1 ? p.qualifiedTypeName() : linkfull(p))}\n<% - } - %></pre><% -} -if (classDoc.isInterface()) { - Set interfaces = classDoc.parentInterfaces - interfaces -= classDoc - if (interfaces) { - %><dl><dt><b>All Superinterfaces:</b> </dt><dd>${interfaces.collect{ linkable(it) }.join(', ')}</dd></dl><% - } -} else { - // TODO follow up the tree collecting interfaces seen? - def interfaces = classDoc.interfaces() - if (interfaces) { - %><dl><dt><b>All Implemented Interfaces:</b> </dt><dd>${interfaces.collect{ linkable(it) }.join(', ')}</dd></dl><% - } -} -%><hr> -<PRE>${annotations(classDoc, '\n') + modifiers(classDoc) + classDoc.typeSourceDescription + ' ' + classDoc.name()} -<% if (classDoc.isInterface() && classDoc.interfaces()) { -%>extends ${classDoc.interfaces().collect{ linkable(it) }.join(', ')} -<% } else if (classDoc.superclass()) { -%>extends ${linkable(classDoc.superclass())} -<% } %> -</PRE> -<% if (classDoc.commentText()) { %> -<P> -${classDoc.commentText()} -</P> -<hr> -<% } %> - -<!-- =========== NESTED CLASS SUMMARY =========== --> - -<A NAME="nested_summary"><!-- --></A> -<% if (visibleNested) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> - <B>Nested Class Summary</B></FONT></TH> - </TR> - <% for (c in visibleNested) { %> - <TR BGCOLOR="white" CLASS="TableRowColor"> - <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> - <CODE>${modifiersBrief(c) + c.typeSourceDescription}</CODE></FONT></TD> - <TD> - <CODE>${linkable(c)}</CODE> - <BR> - <P>${c.firstSentenceCommentText()}</P> - </TD> - </TR> - <% } %> - </TABLE> - -<% } %> - -<!-- =========== ENUM CONSTANT SUMMARY =========== --> - -<A NAME="enum_constant_summary"><!-- --></A> -<% if (hasEnumConstants) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> - <B>Enum Constant Summary</B></FONT></TH> - </TR> - <% for (ec in classDoc.enumConstants()) { %> - <TR BGCOLOR="white" CLASS="TableRowColor"> - <TD> - <CODE><B><A HREF="#${ec.name()}">${ec.name()}</A></B></CODE> - <BR> - <P>${ec.firstSentenceCommentText()}</P> - </TD> - </TR> - <% } %> - </TABLE> - -<% } %> - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="field_summary"><!-- --></A> -<% if (hasFields) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> - <B>Field Summary</B></FONT></TH> - </TR> - <% for (field in visibleFields) { %> - <TR BGCOLOR="white" CLASS="TableRowColor"> - <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> - <CODE>${modifiersBrief(field) + linkable(field.type())}</CODE></FONT></TD> - <TD> - <CODE><B><A HREF="#${field.name()}">${field.name()}</A></B></CODE> - <BR> - <P>${field.firstSentenceCommentText()}</P> - </TD> - </TR> - <% } %> - </TABLE> - -<% } - classes = [] - if (classDoc.isInterface()) { - classes.addAll(classDoc.interfaces().toList()) - } else { - if (classDoc.superclass()) classes += classDoc.superclass() - else classes += new org.codehaus.groovy.tools.groovydoc.ExternalGroovyClassDoc(Object.class) - } - visited = [classDoc] as Set - while (classes) { - Set nextLevel = [] - classes.each { c -> - if (c.isInterface()) nextLevel.addAll(c.interfaces().toList()) - else if (c.superclass() && c.qualifiedTypeName() != 'java.lang.Object') nextLevel += c.superclass() - nextLevel -= visited - visited += nextLevel - def list = [] - if (c instanceof org.codehaus.groovy.tools.groovydoc.SimpleGroovyClassDoc) { - list = c.fields().findAll(isVisible).collect { field -> - "<a href='${classDoc.relativeRootPath}${c.fullPathName}.html#${field.name()}'>${field.name()}</a>" - } - } else { - list = c.externalClass().fields.findAll{ isVisibleExt(it) }.collect { field -> - // "<a href='${classDoc.relativeRootPath}${c.fullPathName}.html#${field.name()}'>${field.name()}</a>" - field.name - } - } - if (list) { - if (!fieldSummaryShown) { - fieldSummaryShown = true - %><table BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2" CLASS="ClassHeadingFont"> - <B>Field Summary</B></FONT></TH> - </TR> - </table> - <% - } - %><table BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <tr CLASS="TableSubHeadingColor"><th ALIGN="left" COLSPAN="2"> - <b>Fields inherited from ${c.typeSourceDescription} ${linkable(c)}</b> - </th></tr> - <tr class="TableRowColor"><td colspan='2'>${list.join(', ')}</td></tr> - </table> - <% - } - } - classes = nextLevel - } -%> - -<!-- =========== PROPERTY SUMMARY =========== --> - -<A NAME="property_summary"><!-- --></A> -<% if (hasProperties) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> - <B>Property Summary</B></FONT></TH> - </TR> - <% for (prop in visibleProperties) { %> - <TR BGCOLOR="white" CLASS="TableRowColor"> - <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> - <CODE>${modifiersBrief(prop) + linkable(prop.type())}</CODE></FONT></TD> - <TD> - <CODE><B><A HREF="#${prop.name()}">${prop.name()}</A></B></CODE> - <BR> - <P>${prop.firstSentenceCommentText()}</P> - </TD> - </TR> - <% } %> - </TABLE> - -<% } %> - -<!-- =========== ELEMENT SUMMARY =========== --> - -<% if (hasElements) { %> - <% elementTypes.each { k, v -> %> - <A NAME="${k}_element_summary"><!-- --></A> - <% if (visibleFields.any{ isRequired(it, v) }) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> - <B>${upcase(k)} Element Summary</B></FONT></TH> - </TR> - <% for (element in visibleFields) { %> - <% if (isRequired(element, v)) { %> - <TR BGCOLOR="white" CLASS="TableRowColor"> - <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> - <CODE>${modifiersBrief(element) + element.type().typeName()}</CODE></FONT></TD> - <TD> - <CODE><B><A HREF="#${element.name()}">${element.name()}</A></B></CODE> - <BR> - <P>${element.firstSentenceCommentText()}</P> - </TD> - </TR> - <% } %> - <% } %> - </TABLE> - <% } %> - - <% } %> -<% } %> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<% if (visibleConstructors) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#D5D5FF" CLASS="TableHeadingColor"> - <TD COLSPAN=2><FONT SIZE="+2"> - <B>Constructor Summary</B></FONT></TD> - </TR> - <% for (constructor in visibleConstructors) { %> - <TR BGCOLOR="white" CLASS="TableRowColor"> - <TD> - <CODE>${modifiersBrief(constructor)}<B><a href="#${nameFromParams(constructor)}">${constructor.name()}</a></B>(${paramsOf(constructor, true)})</CODE> - <BR> - <P>${constructor.firstSentenceCommentText()}</P> - </TD> - </TR> - <% } %> - </TABLE> - -<% } %> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<% if (visibleMethods) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2" CLASS="ClassHeadingFont"> - <B>Method Summary</B></FONT></TH> - </TR> - <% for (method in visibleMethods) { %> - <TR BGCOLOR="white" CLASS="TableRowColor"> - <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1" CLASS="ClassItemFont"> - <CODE>${modifiersBrief(method)}${linkable(method.returnType())}</CODE></FONT> - </TD> - <TD> - <CODE><b><a href="#${nameFromParams(method)}">${method.name()}</a></b>(${paramsOf(method, true)})</CODE> - <BR> - <P>${method.firstSentenceCommentText()}</P> - </TD> - </TR> - <% } %> - </TABLE> - -<% } - Set classes = [] - if (classDoc.isInterface()) { - classes.addAll(classDoc.interfaces().toList()) - } else { - if (classDoc.superclass()) classes += classDoc.superclass() - else classes += new org.codehaus.groovy.tools.groovydoc.ExternalGroovyClassDoc(Object.class) - } - Set visited = [classDoc] as Set - while (classes) { - Set nextLevel = [] - classes.each { c -> - if (c.isInterface()) nextLevel.addAll(c.interfaces().toList()) - else if (c.superclass() && c.qualifiedTypeName() != 'java.lang.Object') nextLevel += c.superclass() - nextLevel -= visited - visited += nextLevel - def list = [] - if (c instanceof org.codehaus.groovy.tools.groovydoc.SimpleGroovyClassDoc) { - list = c.methods().findAll(isVisible).collect { method -> - "<a href='${classDoc.relativeRootPath}${c.fullPathName}.html#${nameFromParams(method)}'>${method.name()}</a>" - } - } else { - list = c.externalClass().methods.findAll{ isVisibleExt(it) }.collect { method -> - linkable(c.externalClass().name + "#" + nameFromJavaParams(method) + " " + method.name) - } - } - if (list) { - if (!methodSummaryShown) { - methodSummaryShown = true - %><table BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2" CLASS="ClassHeadingFont"> - <B>Method Summary</B></FONT></TH> - </TR> - </table> - <% - } - %><table BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <tr CLASS="TableSubHeadingColor"><th ALIGN="left" COLSPAN="2"> - <b>Methods inherited from ${c.typeSourceDescription} ${linkable(c)}</b> - </th></tr> - <tr class="TableRowColor"><td colspan='2'>${list.join(', ')}</td></tr> - </table> - <% - } - } - classes = nextLevel - } -%> - -<P> - -<!-- ============ ENUM CONSTANT DETAIL ========== --> - -<A NAME="enum_constant_detail"><!-- --></A> -<% if (hasEnumConstants) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> - <B>Enum Constant Detail</B></FONT></TH> - </TR> - </TABLE> - <% for (ec in classDoc.enumConstants()) { %> - <A NAME="${ec.name()}"><!-- --></A><H3>${ec.name()}</H3> - <PRE>${modifiers(ec) + '<a href="' + classDoc.relativeRootPath + classDoc.fullPathName + '.html">' + classDoc.name() + '</a>'} <B>${ec.name()}</B></PRE> - <DL> - <DD>${ec.commentText()} - </DD> - <P> - </DL> - <HR> - <% } %> - -<% } %> - -<!-- =========== FIELD DETAIL =========== --> - -<A NAME="field_detail"><!-- --></A> -<% if (hasFields) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> - <B>Field Detail</B></FONT></TH> - </TR> - </TABLE> - <% for (field in visibleFields) { %> - <A NAME="${field.name()}"><!-- --></A><H3>${field.name()}</H3> - <PRE>${annotations(field, '\n') + modifiersWithIgnore(field, false) + linkable(field.type())} <B>${field.name()}</B></PRE> - <DL> - <DD>${field.commentText()} - </DD> - <P> - </DL> - <HR> - <% } %> - -<% } %> - -<!-- =========== PROPERTY DETAIL =========== --> - -<A NAME="prop_detail"><!-- --></A> -<% if (hasProperties) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> - <B>Property Detail</B></FONT></TH> - </TR> - </TABLE> - <% for (prop in visibleProperties) { %> - <A NAME="${prop.name()}"><!-- --></A><H3>${prop.name()}</H3> - <PRE>${annotations(prop, '\n') + modifiers(prop) + linkable(prop.type())} <B>${prop.name()}</B></PRE> - <DL> - <DD>${prop.commentText()} - </DD> - <P> - </DL> - <HR> - <% } %> - -<% } %> - -<!-- =========== ELEMENT DETAIL =========== --> - -<A NAME="element_detail"><!-- --></A> -<% if (hasElements) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> - <B>Element Detail</B></FONT></TH> - </TR> - </TABLE> - <% for (element in visibleFields) { %> - <A NAME="${element.name()}"><!-- --></A><H3>${element.name()}</H3> - <PRE>${modifiers(element) + linkable(element.type())} <B>${element.name()}</B></PRE> - <DL> - <DD>${element.commentText()} - </DD> - <P> - </DL> - <HR> - <% } %> - -<% } %> - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<% if (visibleConstructors) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> - <B>Constructor Detail</B></FONT></TH> - </TR> - </TABLE> - <% for (constructor in visibleConstructors) { %> - <A NAME="${nameFromParams(constructor)}"><!-- --></A><H3> - ${constructor.name()}</H3> - <PRE>${annotations(constructor, '\n') + modifiers(constructor)}<B>${constructor.name()}</B>(${paramsOf(constructor, false)})</PRE> - <DL> - <DD>${constructor.commentText()} - </DD> - <P> - </DL> - <HR> - <% } %> - -<% } %> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<% if (visibleMethods) { %> - <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> - <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> - <B>Method Detail</B></FONT></TH> - </TR> - </TABLE> - <% for (method in visibleMethods) { %> - <A NAME="${nameFromParams(method)}"><!-- --></A><H3> - ${method.name()}</H3> - <PRE>${annotations(method, '\n') + modifiers(method)}${linkable(method.returnType())} <B>${method.name()}</B>(${paramsOf(method, false)})</PRE> - <DL> - <DD>${method.commentText()} - </DD> - <P> - </DL> - <HR> - <% } %> - -<% } %> - -<!-- ========= END OF CLASS DATA ========= --> -<p>${props['footer']?:""}</p> -<hr> - -</body> -</html> +<!-- + ~ Copyright (c) 2014. Ohio Department of Education. - All Rights Reserved. + ~ Unauthorized copying of this file, in any medium, is strictly prohibited. + ~ Written by State Software Development Team (http://ssdt.oecn.k12.oh.us/) + --> + +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- **************************************************************** --> +<!-- * PLEASE KEEP COMPLICATED EXPRESSIONS OUT OF THESE TEMPLATES, * --> +<!-- * i.e. only iterate & print data where possible. Thanks, Jez. * --> +<!-- **************************************************************** --> +<% + + println "Generating for $classDoc (${classDoc.class})" + classDoc = new org.ssdt_ohio.gradle.doc.tools.UserClassDocProxy().wrap(classDoc) + + def title = classDoc.name() + (props.docTitle ? " (${props.docTitle})" : "") + def isVisible = { it.isPublic() || (it.isProtected() && props.protectedScope == 'true') || (!it.isProtected() && !it.isPrivate() && props.packageScope == 'true') || props.privateScope == 'true' } + def isVisibleExt = { t -> java.lang.reflect.Modifier.isPublic(t.modifiers) || java.lang.reflect.Modifier.isProtected(t.modifiers) } + def visibleFields = classDoc.fields().findAll(isVisible) + def visibleProperties = classDoc.properties() // props visible be defn + def visibleMethods = classDoc.methods().findAll(isVisible) + def visibleConstructors = classDoc.constructors().findAll(isVisible) + def visibleNested = classDoc.innerClasses().findAll(isVisible) + boolean hasFields = !classDoc.isAnnotationType() && visibleFields + boolean hasProperties = !classDoc.isAnnotationType() && visibleProperties + boolean hasElements = classDoc.isAnnotationType() && visibleFields + boolean methodSummaryShown = visibleMethods + boolean fieldSummaryShown = hasFields + boolean hasEnumConstants = classDoc.enumConstants() + def dolink = { t, boolean b -> + boolean isArray = false + if (!t || t instanceof String) { + return (classDoc.getDocUrl(t, b) -'java.util.' - 'java.lang.') + } + if (t instanceof org.codehaus.groovy.tools.groovydoc.ArrayClassDocWrapper) { + t = t.delegate + isArray = true + } + if (t instanceof org.codehaus.groovy.tools.groovydoc.SimpleGroovyClassDoc) { + if (t.fullPathName == 'def') return classDoc.getDocUrl("java.lang.Object def", b) + return "<a href='" + classDoc.relativeRootPath + t.fullPathName + ".html'>" + ( (b ? t.qualifiedTypeName() : t.name() ) - "java.lang." - "java.util." ) + "</a>" + (isArray ? "[]" : "") + } + return ( classDoc.getDocUrl(t.qualifiedTypeName(), b) - 'java.util.' - 'java.lang.' ) + (isArray ? "[]" : "") + } + def linkfull = { t -> dolink(t, true) } + def linkable = { t -> dolink(t, false) } + def modifiersWithIgnore = { t, boolean ignorePublic -> + (t.isPrivate()?"private ":"") + + (t.isPublic() && !ignorePublic?"public ":"") + + (t.isProtected()?"protected ":"") + + (t.isStatic()?"static ":"") + + (t.isFinal()?"final ":"") + + (t.respondsTo('isAbstract') && t.isAbstract()?"abstract ":"") + } + def modifiers = { t -> modifiersWithIgnore(t, classDoc.isGroovy()) } + def modifiersBrief = { t -> + (t.isPrivate()?"private ":"") + + (t.isProtected()?"protected ":"") + + (t.isStatic()?"static ":"") + } + def annotations = { t, sepChar -> + t.annotations() ? t.annotations().collect { +// it.isTypeAvailable() ? '@'+linkable(it.type().name())+(it.description()-('@'+it.type().name())): it.description() + it.description() + }.join(sepChar) + sepChar : '' + } + def elementTypes = [ + "required":"true", + "optional":"false" + ] + def isRequired = { f, v -> + def req = f.constantValueExpression() == null; req.toString() == v + } + def upcase = { n -> n[0].toUpperCase() + n[1..-1] } + def paramsOf = { n, boolean brief -> n.parameters().collect{ param -> (brief?'':annotations(param, ' ')) + linkable(param.isTypeAvailable()?param.type():param.typeName()) + (param.vararg()?'... ':' ') + param.name() + (param.defaultValue() ? " = " + param.defaultValue():"") }.join(", ") } + def nameFromParams = { n -> n.name() + '(' + n.parameters().collect{ param -> param.isTypeAvailable()?param.type().qualifiedTypeName():param.typeName() }.join(', ') + ')' } + def nameFromJavaParams = { n -> n.name + '(' + n.parameterTypes.collect{ param -> param.name }.join(', ') + ')' } +%> +<html> +<head> + <!-- Generated by groovydoc (${GroovySystem.version}) on ${new Date()} --> + <title>${title}</title> + <meta name="date" content="${new Date().format('yyyy-MM-dd')}"> + <meta http-equiv="Content-Type" content="text/html; charset=${props.charset}"> + <link href="${classDoc.relativeRootPath}groovy.ico" type="image/x-icon" rel="shortcut icon"> + <link href="${classDoc.relativeRootPath}groovy.ico" type="image/x-icon" rel="icon"> + <link rel="stylesheet" type="text/css" href="${classDoc.relativeRootPath}stylesheet.css" title="Style"> + +<body class="center"> +<script type="text/javascript"><!-- +if (location.href.indexOf('is-external=true') == -1) { + parent.document.title="${title}"; +} +//--> +</script> +<noscript> + <div>JavaScript is disabled on your browser.</div> +</noscript> +<!-- ========= START OF TOP NAVBAR ======= --> +<div class="topNav"><a name="navbar_top"> + <!-- --> +</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow"> + <!-- --> +</a> + <ul class="navList" title="Navigation"> + <li><a href="${classDoc.relativeRootPath}overview-summary.html">Overview</a></li> + <li><a href="package-summary.html">Package</a></li> + <li class="navBarCell1Rev">Class</li> + <li><a href="${classDoc.relativeRootPath}deprecated-list.html">Deprecated</a></li> + <li><a href="${classDoc.relativeRootPath}index-all.html">Index</a></li> + <li><a href="${classDoc.relativeRootPath}help-doc.html">Help</a></li> + </ul> +</div> + +<div class="subNav"> + <div> + <ul class="navList"> + <li><a href="${classDoc.relativeRootPath}index.html?${classDoc.fullPathName}" target="_top">Frames</a></li> + <li><a href="${classDoc.name()}.html" target="_top">No Frames</a></li> + </ul> + </div> + <div> + <ul class="subNavList"> + <li>Summary: </li> + <% + if (classDoc.isAnnotationType()) { + def hasReq = classDoc.fields().any{ isRequired(it, "true") } + def hasOpt = classDoc.fields().any{ isRequired(it, "false") } + if (hasReq) { %><li><a href="#required_element_summary"><% } %>Required<% if (hasReq) { %></a></li><% } %> <% + if (hasOpt) { %><li><a href="#optional_element_summary"><% } %>Optional<% if (hasOpt) { %></a></li><% } %> <% + } else { + if (visibleNested) { %><li><a href="#nested_summary"><% } %>Nested<% if (visibleNested) { %></a></li><% } %> <% + if (classDoc.isEnum()) { + if (hasEnumConstants) { %><li><a href="#enum_constant_summary"><% } %>Enum constants<% if (hasEnumConstants) { %></a></li><% } %> <% + } + if (hasFields) { %><li><a href="#field_summary"><% } %>Field<% if (hasFields) { %></a></li><% } %> <% + if (hasProperties) { %><li><a href="#property_summary">Property</a></li><% } %> <% + if (classDoc.isClass()) { + if (visibleConstructors) { %><li><a href="#constructor_summary"><% } %>Constructor<% if (visibleConstructors) { %></a></li><% } %> <% + } + if (visibleMethods) { %><li><a href="#method_summary"><% } %>Method<% if (visibleMethods) { %></a></li><% } %> <% + } + %> + </ul> + <ul class="subNavList"> + <li> | Detail: </li> + <% + if (classDoc.isAnnotationType()) { + if (hasElements) { %><li><a href="#element_detail"><% } %>Element<% if (hasElements) { %></a></li><% } %> <% + } else { + if (classDoc.isEnum()) { + if (hasEnumConstants) { %><li><a href="#enum_constant_detail"><% } %>Enum constants<% if (hasEnumConstants) { %></a></li><% } %> <% + } + if (hasFields) { %><li><a href="#field_detail"><% } %>Field<% if (hasFields) { %></a></li><% } %> <% + if (hasProperties) { %><li><a href="#prop_detail">Property</a></li><% } %> <% + if (classDoc.isClass()) { + if (visibleConstructors) { %><li><a href="#constructor_detail"><% } %>Constructor<% if (visibleConstructors) { %></a></li><% } %> <% + } + if (visibleMethods) { %><li><a href="#method_detail"><% } %>Method<% if (visibleMethods) { %></a></li><% } %> <% + } + %> + </ul> + </div> + <a name="skip-navbar_top"> + <!-- --> + </a></div> +<!-- ========= END OF TOP NAVBAR ========= --> + +<!-- ======== START OF CLASS DATA ======== --> +<div class="header"> +<% +def pkg = classDoc.containingPackage().nameWithDots() +String classDesc = "${classDoc.isGroovy() ? "[Groovy]" : "[Java]"} ${classDoc.typeDescription} ${org.codehaus.groovy.tools.groovydoc.SimpleGroovyClassDoc.encodeAngleBrackets(classDoc.getNameWithTypeArgs())}" +if (pkg != "DefaultPackage") { +%> + <div class="subTitle">Package: <strong>${pkg}</strong></div> +<%}%> + <h2 title="${classDesc}" class="title">${classDesc}</h2> +</div> +<div class="contentContainer"> +<ul class="inheritance"> +<% +def parents = classDoc.isInterface() ? classDoc.parentInterfaces : classDoc.parentClasses +if (parents.size() >= 2) { + parents.eachWithIndex { p, i -> + %><li><% + if ( i == parents.size() - 1) { + out << p.qualifiedTypeName() + } else { + %><ul class="inheritance"><% linkfull(p) %></ul></li><% + } + } +} +%> +</ul> +<div class="description"> + <ul class="blockList"> + <li class="blockList"> +<% +if (classDoc.isInterface()) { + Set interfaces = classDoc.parentInterfaces + interfaces -= classDoc + if (interfaces) { + %> + <dl> + <dt>All Superinterfaces:</dt> + <dd>${interfaces.collect{ linkable(it) }.join(', ')}</dd> + </dl><% + } +} else { + // TODO follow up the tree collecting interfaces seen? + def interfaces = classDoc.interfaces() + if (interfaces) { + %> + <dl> + <dt>All Implemented Interfaces and Traits:</dt> + <dd>${interfaces.collect{ linkable(it) }.join(', ')}</dd> + </dl> + <!-- todo: direct known subclasses --> + <hr> + <br> +<pre>${annotations(classDoc, '\n') + modifiers(classDoc) + classDoc.typeSourceDescription + ' ' + classDoc.name()} +<% if (classDoc.isInterface() && classDoc.interfaces()) { +%>extends ${classDoc.interfaces().collect{ linkable(it) }.join(', ')} +<% } else if (classDoc.superclass()) { +%>extends ${linkable(classDoc.superclass())} +<% } %> +</pre> +<% } %> +<% } %> +<% if (classDoc.commentText()) { %> + <p>${classDoc.commentText()}</p> +<% } %> + </li> + </ul> +</div> + +<div class="summary"> + <ul class="blockList"> + <li class="blockList"> + <!-- =========== NESTED CLASS SUMMARY =========== --> + <% if (visibleNested) { %> + <ul class="blockList"> + <li class="blockList"><a name="nested_summary"><!-- --></a> + <h3>Nested Class Summary</h3> + <ul class="blockList"> + <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation"> + <caption><span>Nested classes</span><span class="tabEnd"> </span></caption> + <tr> + <th class="colFirst" scope="col">Modifiers</th> + <th class="colLast" scope="col">Name</th> + <th class="colLast" scope="col">Description</th> + </tr> + <% visibleNested.eachWithIndex { c, i -> %> + <tr class="${i%2==0?'altColor':'rowColor'}"> + <td class="colFirst"><code><strong>${modifiersBrief(c) + c.typeSourceDescription}</strong></code> </td> + <td class="colLast"><code>${linkable(c)}</code></td> + <td class="colLast">${c.firstSentenceCommentText()}</code></td> + </tr> + <% } %> + </table> + </ul> + </li> + </ul> + <% } %> + + <!-- =========== ENUM CONSTANT SUMMARY =========== --> + <% if (hasEnumConstants) { %> + <ul class="blockList"> + <li class="blockList"><a name="enum_constant_summary"><!-- --></a> + <h3>Enum Constants Summary</h3> + <ul class="blockList"> + <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum constants summary table"> + <caption><span>Enum constants classes</span><span class="tabEnd"> </span></caption> + <tr> + <th class="colFirst" scope="col">Enum constant</th> + <th class="colLast" scope="col">Description</th> + </tr> + <% classDoc.enumConstants().eachWithIndex { ec, i -> %> + <tr class="${i%2==0?'altColor':'rowColor'}"> + <td class="colFirst"><code><strong><a href="#${ec.name()}">${ec.name()}</a></strong></code></td> + <td class="colLast">${ec.firstSentenceCommentText()}</td> + </tr> + <% } %> + </table> + </ul> + </li> + </ul> + <% } %> + <!-- =========== FIELD SUMMARY =========== --> + <% + def buffer = new StringBuilder() + classes = [] + if (classDoc.isInterface()) { + classes.addAll(classDoc.interfaces().toList()) + } else { + if (classDoc.superclass()) classes += classDoc.superclass() + else classes += new org.codehaus.groovy.tools.groovydoc.ExternalGroovyClassDoc(Object.class) + } + visited = [classDoc] as Set + while (classes) { + Set nextLevel = [] + classes.eachWithIndex { c,i -> + if (c.isInterface()) nextLevel.addAll(c.interfaces().toList()) + else if (c.superclass() && c.qualifiedTypeName() != 'java.lang.Object') nextLevel += c.superclass() + nextLevel -= visited + visited += nextLevel + def list = [] + if (c instanceof org.codehaus.groovy.tools.groovydoc.SimpleGroovyClassDoc) { + list = c.fields().findAll(isVisible).collect { field -> + "<a href='${classDoc.relativeRootPath}${c.fullPathName}.html#${field.name()}'>${field.name()}</a>" + } + } else { + list = c.externalClass().fields.findAll{ isVisibleExt(it) }.collect { field -> + // "<a href='${classDoc.relativeRootPath}${c.fullPathName}.html#${field.name()}'>${field.name()}</a>" + field.name + } + } + if (list) { + buffer << """ <tr class="${i%2==0?'altColor':'rowColor'}"> + <td class="colFirst"><strong><code>${c.typeSourceDescription} ${linkable(c)}</code></strong></td> + <td class="colLast"><code>${list.join(', ')}</code></td> + </tr> +""" + } + } + classes = nextLevel + } + + + if (hasFields || buffer.length()>0) { %> + <ul class="blockList"><% + if (hasFields) { %> + <li class="blockList"><a name="field_summary"><!-- --></a> + <h3>Field Summary</h3> + <ul class="blockList"> + <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum constants summary table"> + <caption><span>Fields</span><span class="tabEnd"> </span></caption> + <tr> + <th class="colFirst" scope="col">Modifiers</th> + <th class="colLast" scope="col">Name</th> + <th class="colLast" scope="col">Description</th> + </tr> + <% visibleFields.eachWithIndex { field, i -> %> + <tr class="${i%2==0?'altColor':'rowColor'}"> + <td class="colFirst"><code><strong>${modifiersBrief(field) + linkable(field.type())}</strong></code> </td> + <td class="colLast"><code><a href="#${field.name()}">${field.name()}</a></code></td> + <td class="colLast">${field.firstSentenceCommentText()}</code></td> + </tr> + <% } %> + </table> + </ul> + </li> + <% } // if (hasFields) + if ((buffer.length())>0) { %> + <li class="blockList"><a name="field_summary"><!-- --></a> + <ul class="blockList"> + <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Inherited fields summary table"> + <caption><span>Inherited fields</span><span class="tabEnd"> </span></caption> + <tr> + <th class="colFirst" scope="col">Fields inherited from class</th> + <th class="colLast" scope="col">Fields</th> + </tr> + ${buffer} + </table> + </ul> + </li> + <% } // if buffer %> + </ul> + <% } // if hasFields or buffer %> + + <!-- =========== PROPERTY SUMMARY =========== --> + <% if (hasProperties) { %> + <ul class="blockList"> + <li class="blockList"><a name="property_summary"><!-- --></a> + <h3>Properties Summary</h3> + <ul class="blockList"> + <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Properties Summary table, listing nested classes, and an explanation"> + <caption><span>Properties</span><span class="tabEnd"> </span></caption> + <tr> + <th class="colFirst" scope="col">Type</th> + <th class="colLast" scope="col">Name and description</th> + </tr> + <% visibleProperties.eachWithIndex { prop, i -> %> + <tr class="${i%2==0?'altColor':'rowColor'}"> + <td class="colFirst"><code><strong>${modifiersBrief(prop) + linkable(prop.type())}</strong></code> </td> + <td class="colLast"><code><a href="#${prop.name()}"></a>${prop.name()}</code><br>${prop.firstSentenceCommentText()}</td> + </tr> + <% } %> + </table> + </ul> + </li> + </ul> + <% } %> + + <!-- =========== ELEMENT SUMMARY =========== --> + <% if (hasElements) { %> + <ul class="blockList"><a name="element_summary"><!-- --></a> + <li class="blockList"> + <h3>Element Summary</h3> + <% elementTypes.each { k, v -> + %><a name="${k}_element_summary"><!-- --></a><% + if (visibleFields.any{ isRequired(it, v) }) { %> + <ul class="blockList"> + <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="${upcase(k)} Element Summary table"> + <caption><span>${upcase(k)} Element Summary</span><span class="tabEnd"> </span></caption> + <tr> + <th class="colFirst" scope="col">Type</th> + <th class="colLast" scope="col">Name and Description</th> + </tr> + <% visibleFields.findAll {isRequired(it, v)}.eachWithIndex { element, i -> %> + <tr class="${i%2==0?'altColor':'rowColor'}"> + <td class="colFirst"><code><strong>${modifiersBrief(element) + linkable(element.type())}</strong></code> </td> + <td class="colLast"><code><a href="#${element.name()}">${element.name()}</a></code><br>${element.firstSentenceCommentText()}</td> + </tr> + <% } %> + </table> + </ul> + <% } + } //elementTypes.each %> + </li> + </ul> + <% } %> + + <% if (visibleConstructors) { %> + <!-- ======== CONSTRUCTOR SUMMARY ======== --> + <ul class="blockList"> + <li class="blockList"><a name="constructor_summary"><!-- --></a> + <h3>Constructor Summary</h3> + <ul class="blockList"> + <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructors Summary table"> + <caption><span>Constructors</span><span class="tabEnd"> </span></caption> + <tr> + <th class="colFirst" scope="col">Constructor and description</th> + </tr> + <% visibleConstructors.eachWithIndex { constructor, i -> %> + <tr class="${i%2==0?'altColor':'rowColor'}"> + <td class="colFirst"> + <code>${modifiersBrief(constructor)}<a href="#${nameFromParams(constructor)}">${constructor.name()}</a></strong> + (${paramsOf(constructor, true)})</code><br>${constructor.firstSentenceCommentText()}</td> + </tr> + <% } %> + </table> + </ul> + </li> + </ul> + <% } %> + + <% + buffer = new StringBuilder() + Set classes = [] + if (classDoc.isInterface()) { + classes.addAll(classDoc.interfaces().toList()) + } else { + if (classDoc.superclass()) classes += classDoc.superclass() + else if (!classDoc.isTrait()) classes += new org.codehaus.groovy.tools.groovydoc.ExternalGroovyClassDoc(Object.class) + } + Set visited = [classDoc] as Set + while (classes) { + Set nextLevel = [] + classes.eachWithIndex { c,i -> + if (c.isInterface()) nextLevel.addAll(c.interfaces().toList()) + else if (c.superclass() && c.qualifiedTypeName() != 'java.lang.Object') nextLevel += c.superclass() + nextLevel -= visited + visited += nextLevel + def list = [] + if (c instanceof org.codehaus.groovy.tools.groovydoc.SimpleGroovyClassDoc) { + list = c.methods().findAll(isVisible).collect { method -> + "<a href='${classDoc.relativeRootPath}${c.fullPathName}.html#${nameFromParams(method)}'>${method.name()}</a>" + } + } else { + list = c.externalClass().methods.findAll{ isVisibleExt(it) }.collect { method -> + linkable(c.externalClass().name + "#" + nameFromJavaParams(method) + " " + method.name) + } + } + if (list) { + buffer << """ + <tr class="${i%2==0?'altColor':'rowColor'}"> + <td class="colFirst"><code>${c.typeSourceDescription} ${linkable(c)}</strong></code></td> + <td class="colLast"><code>${list.join(', ')}</code></td> + </tr>""" + } + } + classes = nextLevel + } + + if (visibleMethods || buffer.length()>0) { %> + <!-- ========== METHOD SUMMARY =========== --> + <ul class="blockList"> + <% if (visibleMethods) { %> + <li class="blockList"><a name="method_summary"><!-- --></a> + <h3>Methods Summary</h3> + <ul class="blockList"> + <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Methods Summary table"> + <caption><span>Methods</span><span class="tabEnd"> </span></caption> + <tr> + <th class="colFirst" scope="col">Type</th> + <th class="colLast" scope="col">Name and description</th> + </tr> + <% visibleMethods.eachWithIndex { method, i -> %> + <tr class="${i%2==0?'altColor':'rowColor'}"> + <td class="colFirst"><code>${modifiersBrief(method)}${linkable(method.returnType())}</strong></code></td> + <td class="colLast"><code><strong><a href="#${nameFromParams(method)}">${method.name()}</a></strong>(${paramsOf(method, true)})</code><br>${method.firstSentenceCommentText()}</td> + </tr> + <% } %> + </table> + </ul> + </li> + <% } // if (visibleMethods) + if (buffer.length()>0) { + %> + <li class="blockList"><a name="method_summary"><!-- --></a> + <h3>Inherited Methods Summary</h3> + <ul class="blockList"> + <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Inherited Methods Summary table"> + <caption><span>Inherited Methods</span><span class="tabEnd"> </span></caption> + <tr> + <th class="colFirst" scope="col">Methods inherited from class</th> + <th class="colLast" scope="col">Name</th> + </tr> + ${buffer} + </table> + </ul> + </li> + <% + } // if buffer.length%> + </ul> + <% } %> + </li> + </ul> +</div> + +<div class="details"> + <ul class="blockList"> + <li class="blockList"> + <% if (hasEnumConstants) { %> + <!-- ============ ENUM CONSTANT DETAIL ========== --> + <ul class="blockList"> + <li class="blockList"><a name="enum_constant_detail"> + <!-- --> + </a> + <h3>Enum Constant Detail</h3> + <% for (ec in classDoc.enumConstants()) { %> + <a name="${ec.name()}"><!-- --></a> + <ul class="blockListLast"> + <li class="blockList"> + <h4>${modifiers(ec) + '<a href="' + classDoc.relativeRootPath + classDoc.fullPathName + '.html">' + classDoc.name() + '</a>'} <strong>${ec.name()}</strong></h4> + <p>${ec.commentText()}</p> + </li> + </ul> + <% } %> + </li> + </ul> + <% } %> + + <% if (hasFields) { %> + <!-- =========== FIELD DETAIL =========== --> + <ul class="blockList"> + <li class="blockList"><a name="field_detail"> + <!-- --> + </a> + <h3>Field Detail</h3> + <% visibleFields.each { field -> %> + <a name="${field.name()}"><!-- --></a> + <ul class="blockListLast"> + <li class="blockList"> + <h4>${annotations(field, '\n') + modifiersWithIgnore(field, false) + linkable(field.type())} <strong>${field.name()}</strong></h4> + <p>${field.commentText()}</p> + </li> + </ul> + <% } %> + </li> + </ul> + <% } %> + + <% if (hasProperties) { %> + <!-- =========== PROPERTY DETAIL =========== --> + <ul class="blockList"> + <li class="blockList"><a name="prop_detail"> + <!-- --> + </a> + <h3>Property Detail</h3> + <% visibleProperties.each { prop -> %> + <a name="${prop.name()}"><!-- --></a> + <ul class="blockListLast"> + <li class="blockList"> + <h4>${annotations(prop, '\n') + modifiers(prop) + linkable(prop.type())} <strong>${prop.name()}</strong></h4> + <p>${prop.commentText()}</p> + </li> + </ul> + <% } %> + </li> + </ul> + <% } %> + + <% if (hasElements) { %> + <!-- =========== ELEMENT DETAIL =========== --> + <ul class="blockList"> + <li class="blockList"><a name="element_detail"> + <!-- --> + </a> + <h3>Element Detail</h3> + <% visibleFields.each { element -> %> + <a name="${element.name()}"><!-- --></a> + <ul class="blockListLast"> + <li class="blockList"> + <h4>${modifiers(element) + linkable(element.type())} <strong>${element.name()}</strong></h4> + <p>${element.commentText()}</p> + </li> + </ul> + <% } %> + </li> + </ul> + <% } %> + + <% if (visibleConstructors) { %> + <!-- =========== CONSTRUCTOR DETAIL =========== --> + <ul class="blockList"> + <li class="blockList"><a name="constructor_detail"> + <!-- --> + </a> + <h3>Constructor Detail</h3> + <% visibleConstructors.each { constructor -> %> + <a name="${nameFromParams(constructor)}"><!-- --></a> + <ul class="blockListLast"> + <li class="blockList"> + <h4>${annotations(constructor, '\n') + modifiers(constructor)}<strong>${constructor.name()}</strong>(${paramsOf(constructor, false)})</h4> + <p>${constructor.commentText()}</p> + </li> + </ul> + <% } %> + </li> + </ul> + <% } %> + + + <% if (visibleMethods) { %> + <!-- =========== METHOD DETAIL =========== --> + <ul class="blockList"> + <li class="blockList"><a name="method_detail"> + <!-- --> + </a> + <h3>Method Detail</h3> + <% visibleMethods.each { method -> %> + <a name="${nameFromParams(method)}"><!-- --></a> + <ul class="blockListLast"> + <li class="blockList"> + <h4>${annotations(method, '\n') + modifiers(method)}${linkable(method.returnType())} <strong>${method.name()}</strong>(${paramsOf(method, false)})</h4> + <p>${method.commentText()}</p> + </li> + </ul> + <% } %> + </li> + </ul> + <% } %> + </li> + </ul> +</div> + +<!-- ========= END OF CLASS DATA ========= --> +<!-- ======= START OF BOTTOM NAVBAR ====== --> +<div class="bottomNav"><a name="navbar_bottom"> + <!-- --> +</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow"> + <!-- --> +</a> + <ul class="navList" title="Navigation"> + <li><a href="${classDoc.relativeRootPath}overview-summary.html">Overview</a></li> + <li><a href="package-summary.html">Package</a></li> + <li class="navBarCell1Rev">Class</li> + <li><a href="${classDoc.relativeRootPath}deprecated-list.html">Deprecated</a></li> + <li><a href="${classDoc.relativeRootPath}index-all.html">Index</a></li> + <li><a href="${classDoc.relativeRootPath}help-doc.html">Help</a></li> + </ul> +</div> + +<div class="subNav"> + <div> + <ul class="navList"> + <li><a href="${classDoc.relativeRootPath}index.html?${classDoc.fullPathName}" target="_top">Frames</a></li> + <li><a href="${classDoc.name()}.html" target="_top">No Frames</a></li> + </ul> + </div> + <div> + <ul class="subNavList"> + <li>Summary: </li> + <% + if (classDoc.isAnnotationType()) { + def hasReq = classDoc.fields().any{ isRequired(it, "true") } + def hasOpt = classDoc.fields().any{ isRequired(it, "false") } + if (hasReq) { %><li><a href="#required_element_summary"><% } %>Required<% if (hasReq) { %></a></li><% } %> <% + if (hasOpt) { %><li><a href="#optional_element_summary"><% } %>Optional<% if (hasOpt) { %></a></li><% } %> <% + } else { + if (visibleNested) { %><li><a href="#nested_summary"><% } %>Nested<% if (visibleNested) { %></a></li><% } %> <% + if (classDoc.isEnum()) { + if (hasEnumConstants) { %><li><a href="#enum_constant_summary"><% } %>Enum constants<% if (hasEnumConstants) { %></a></li><% } %> <% + } + if (hasFields) { %><li><a href="#field_summary"><% } %>Field<% if (hasFields) { %></a></li><% } %> <% + if (hasProperties) { %><li><a href="#property_summary">Property</a></li><% } %> <% + if (classDoc.isClass()) { + if (visibleConstructors) { %><li><a href="#constructor_summary"><% } %>Constructor<% if (visibleConstructors) { %></a></li><% } %> <% + } + if (visibleMethods) { %><li><a href="#method_summary"><% } %>Method<% if (visibleMethods) { %></a></li><% } %> <% + } + %> + </ul> + <ul class="subNavList"> + <li> | Detail: </li> + <% + if (classDoc.isAnnotationType()) { + if (hasElements) { %><li><a href="#element_detail"><% } %>Element<% if (hasElements) { %></a></li><% } %> <% + } else { + if (classDoc.isEnum()) { + if (hasEnumConstants) { %><li><a href="#enum_constant_detail"><% } %>Enum constants<% if (hasEnumConstants) { %></a></li><% } %> <% + } + if (hasFields) { %><li><a href="#field_detail"><% } %>Field<% if (hasFields) { %></a></li><% } %> <% + if (hasProperties) { %><li><a href="#prop_detail">Property</a></li><% } %> <% + if (classDoc.isClass()) { + if (visibleConstructors) { %><li><a href="#constructor_detail"><% } %>Constructor<% if (visibleConstructors) { %></a></li><% } %> <% + } + if (visibleMethods) { %><li><a href="#method_detail"><% } %>Method<% if (visibleMethods) { %></a></li><% } %> <% + } + %> + </ul> + </div> + <% if (props.footer) { %><p>${props.footer}</p><% } %> + <a name="skip-navbar_bottom"> + <!-- --> + </a> + </div> +</div> +<!-- ======== END OF BOTTOM NAVBAR ======= --> +</body> +</html>