--- DocGenerator.groovy.orig 2008-04-02 00:15:31.262116800 +0200 +++ DocGenerator.groovy 2008-04-02 00:45:33.713915200 +0200 @@ -2,8 +2,6 @@ import groovy.xml.StreamingMarkupBuilder -import java.io.File - import org.codehaus.groovy.runtime.DefaultGroovyMethods import com.thoughtworks.qdox.JavaDocBuilder import com.thoughtworks.qdox.model.JavaSource @@ -11,8 +9,6 @@ import com.thoughtworks.qdox.model.JavaMethod import com.thoughtworks.qdox.model.JavaParameter import com.thoughtworks.qdox.model.Type -import java.util.* - /** * Generate documentation about the methods provided by the Groovy Development Kit @@ -23,6 +19,7 @@ class DocGenerator { private static final String PRIMITIVE_TYPE_PSEUDO_PACKAGE = 'primitive-types' + private final String TITLE = "Groovy JDK" def sourceFiles = [] File outputFolder JavaDocBuilder builder @@ -112,7 +109,7 @@ def templateOverviewFrame = createTemplate(engine, 'template.overview-frame.html') out = new File(outputFolder, 'overview-frame.html') - binding = [packages: sortedPackages] + binding = [packages: sortedPackages, title: TITLE] out.withWriter { it << templateOverviewFrame.make(binding) } @@ -142,6 +139,66 @@ } } + // the index-all.html + def templateIndexAll = createTemplate( engine, 'template.index-all.html') + out = new File(outputFolder, 'index-all.html') + binding = ['indexMap': generateIndex(packages), title: TITLE] + out.withWriter { + it << templateIndexAll.make(binding) + } + } + /** + * Generate an index. + *
+ * This method creates a index map indexed by the first letter of the + * method in upper case, the map value is a list of methods. + *
+ * e.g.: 'A' : [ m1, m2, m3 .. ] + * The values m1, m2, m3 are sorted by the method name, and the paramter signature. + * The method names of m1, m2, m3 start either with 'a', or 'A'. + * + * @return index + */ + private def generateIndex(def packages) { + def index = [] + packages.each { curPackage, packageClasses -> + def packageName = curPackage ? curPackage : 'primitive-types' + packageClasses.each { className -> + def listOfMethods = jdkEnhancedClasses[className] + listOfMethods.each { method -> + def methodName = method.name + final String simpleClassName = className.replaceAll('.*\\.', '') + index.add( ['index': methodName.getAt(0).toUpperCase(), + 'packageName': packageName, + 'simpleClassName': simpleClassName, + 'class': packageName + '.' + simpleClassName, + 'method': method, + 'parametersSignature': getParametersDecl(method), + 'shortComment': getComment(method).replaceAll('\\..*', ''), + ] ) + } + } + } + def indexMap = new TreeMap() + def methodNameComparator = [compare: {a,b -> + final String aMethodAndSignature = a.method.name + ' ' + getParametersDecl(a.method) + final String bMethodAndSignature = b.method.name + ' ' + getParametersDecl(b.method) + + return aMethodAndSignature.compareTo(bMethodAndSignature) + }] as Comparator + + for (indexEntry in index) { + final String key = indexEntry['index'] + if (indexMap.containsKey(key)) { + def indexEntryList = indexMap.get(key) + indexEntryList.add( indexEntry ) + } else { + final TreeSet indexEntryList = new TreeSet(methodNameComparator) + indexEntryList.add( indexEntry ) + indexMap.put(key, indexEntryList ) + } + } + return indexMap } private generateClassDetails(template, curPackage, aClass) { @@ -176,7 +233,8 @@ def binding = [className: aClass.replaceAll(/.*\./, ''), packageName: curPackage, - methods: methods] + methods: methods, + title: TITLE] out.withWriter { it << template.make(binding) } @@ -234,7 +292,8 @@ def createTemplate(templateEngine, resourceFile) { - def resourceUrl = getClass().getResource(resourceFile) + //def resourceUrl = getClass().getResource(resourceFile) + def resourceUrl = getClass().getClassLoader().getResource(resourceFile) return templateEngine.createTemplate(resourceUrl.text) }