void generateFunctionEnum(JNIMethod[] methods) {
   if (methods.length == 0) return;
   outputln("typedef enum {");
   for (int i = 0; i < methods.length; i++) {
     JNIMethod method = methods[i];
     if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
     String function = getFunctionName(method),
         function64 = getFunctionName(method, method.getParameterTypes64());
     if (!function.equals(function64)) {
       output("#ifndef ");
       output(JNI64);
       outputln();
     }
     output("\t");
     output(function);
     outputln("_FUNC,");
     if (!function.equals(function64)) {
       outputln("#else");
       output("\t");
       output(function64);
       outputln("_FUNC,");
       outputln("#endif");
     }
     if (progress != null) progress.step();
   }
   JNIClass clazz = methods[0].getDeclaringClass();
   output("} ");
   output(clazz.getSimpleName());
   outputln("_FUNCS;");
 }
 void generateSourceFile(JNIClass clazz) {
   outputln("#ifdef NATIVE_STATS");
   outputln();
   JNIMethod[] methods = clazz.getDeclaredMethods();
   String className = clazz.getSimpleName();
   output("char * ");
   output(className);
   outputln("_nativeFunctionNames[] = {");
   sort(methods);
   for (int i = 0; i < methods.length; i++) {
     JNIMethod method = methods[i];
     if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
     String function = getFunctionName(method),
         function64 = getFunctionName(method, method.getParameterTypes64());
     if (!function.equals(function64)) {
       output("#ifndef ");
       output(JNI64);
       outputln();
     }
     output("\t\"");
     output(function);
     outputln("\",");
     if (!function.equals(function64)) {
       outputln("#else");
       output("\t\"");
       output(function64);
       outputln("\",");
       outputln("#endif");
     }
     if (progress != null) progress.step();
   }
   outputln("};");
   output("#define NATIVE_FUNCTION_COUNT sizeof(");
   output(className);
   outputln("_nativeFunctionNames) / sizeof(char*)");
   output("int ");
   output(className);
   outputln("_nativeFunctionCount = NATIVE_FUNCTION_COUNT;");
   output("int ");
   output(className);
   outputln("_nativeFunctionCallCount[NATIVE_FUNCTION_COUNT];");
   outputln();
   generateStatsNatives(className);
   outputln();
   outputln("#endif");
 }