grid = [:] uniqueOwnerTypes = new HashSet() uniqueMethodNames = new HashSet() mungMethods("../../main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java") mungMethods("../../main/org/codehaus/groovy/runtime/DefaultGroovyStaticMethods.java") uniqueOwnerTypes = new ArrayList(uniqueOwnerTypes).sort() uniqueMethodNames = new ArrayList(uniqueMethodNames).sort() writeCrossReferenceTable() // ../../main/org/codehaus/groovy/syntax/Types.java // addTranslation( "finally" , KEYWORD_FINALLY ); def mungMethods(fileName) { new java.io.File(fileName).eachLine { // expecting something of form --> public static Thread startDaemon(Thread self, Closure closure) { if (it.contains("public static")) { tokens = it.tokenize(" (,)") offset = 2 returnType = tokens[offset] methodName = tokens[offset + 1] ownerType = tokens[offset + 2] if ("final" == ownerType) { ownerType = tokens[offset + 3] } uniqueOwnerTypes << ownerType uniqueMethodNames << methodName i = 6 parameterTypes = [] while (i < tokens.size()) { if ("final" == tokens[i]) { i++ } if (!("throws" == tokens[i] || "{" == tokens[i])) { if ("Closure" == tokens[i]) { parameterTypes << "{...}" } else { parameterTypes << "${tokens[i]} ${tokens[i + 1]}" } } i += 2 } grid["${ownerType}.${methodName}"] = parameterTypes } } } def writeCrossReferenceTable() { println "" println "" // headers uniqueOwnerTypes.each {ownerType | print "" } println "" i = 0; style = 'table-even' uniqueMethodNames.each {methodName | i++; if (i.mod(2) == 0) { style = 'table-even' } else { style = 'table-odd' } print "" uniqueOwnerTypes.each {ownerType | cellParameters = grid["${ownerType}.${methodName}"] if ( cellParameters!= null) { print "" } else { print "" } } println "" } println "
${ownerType}
${methodName}${ownerType}.${methodName} ${cellParameters} 
" }