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"); }