aboutsummaryrefslogtreecommitdiffstats
path: root/native/natives.c
diff options
context:
space:
mode:
Diffstat (limited to 'native/natives.c')
-rw-r--r--native/natives.c143
1 files changed, 3 insertions, 140 deletions
diff --git a/native/natives.c b/native/natives.c
index 9c40f2c7..aecaa62c 100644
--- a/native/natives.c
+++ b/native/natives.c
@@ -28,147 +28,10 @@
#include <stdlib.h>
#include "natives.h"
-JNIEXPORT jint JNICALL Java_at_ssw_hotswap_test_natives_SimpleNativeTest_00024A_value(JNIEnv *env, jclass c) {
+JNIEXPORT jint JNICALL Java_com_github_dcevm_test_natives_SimpleNativeTest_00024A_value(JNIEnv *env, jclass c) {
return 1;
}
-JNIEXPORT jint JNICALL Java_at_ssw_hotswap_test_natives_SimpleNativeTest_00024A_value2(JNIEnv *env, jclass c) {
+JNIEXPORT jint JNICALL Java_com_github_dcevm_test_natives_SimpleNativeTest_00024A_value2(JNIEnv *env, jclass c) {
return 2;
-}
-
-JNIEXPORT jclass JNICALL Java_at_ssw_hotswap_test_access_jni_JNIVMAccess_findClassNative(JNIEnv *env, jclass c, jstring s) {
- const char* name = (*env)->GetStringUTFChars(env, s, 0);
- jclass clazz = (*env)->FindClass(env, name);
- (*env)->ReleaseStringUTFChars(env, s, name);
- return clazz;
-}
-
-JNIEXPORT jobject JNICALL Java_at_ssw_hotswap_test_access_jni_JNIClassAccess_findMethodNative(JNIEnv *env, jclass c, jclass cls, jstring methodName) {
- const char *methodstr = (*env)->GetStringUTFChars(env, methodName, 0);
-
- jclass jCls = (*env)->GetObjectClass(env, cls);
-
- // Get Method ID of getMethods()
- jmethodID midGetFields = (*env)->GetMethodID(env, jCls, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
- (*env)->ExceptionDescribe(env);
- jobjectArray jobjArray = (jobjectArray) (*env)->CallObjectMethod(env, cls, midGetFields);
-
- jsize len = (*env)->GetArrayLength(env, jobjArray);
- jsize i = 0;
-
- for (i = 0; i < len; i++) {
- jobject _strMethod = (*env)->GetObjectArrayElement(env, jobjArray, i);
- jclass _methodClazz = (*env)->GetObjectClass(env, _strMethod);
- jmethodID mid = (*env)->GetMethodID(env, _methodClazz, "getName", "()Ljava/lang/String;");
- jstring _name = (jstring) (*env)->CallObjectMethod(env, _strMethod, mid);
-
- const char *str = (*env)->GetStringUTFChars(env, _name, 0);
-
- if (strcmp(str, methodstr) == 0) {
- (*env)->ReleaseStringUTFChars(env, methodName, methodstr);
- (*env)->ReleaseStringUTFChars(env, _name, str);
- return _strMethod;
- }
- (*env)->ReleaseStringUTFChars(env, _name, str);
- }
-
- jclass exc = (*env)->FindClass(env, "java/lang/NoSuchMethodError");
- (*env)->ThrowNew(env, exc, methodstr);
- (*env)->ReleaseStringUTFChars(env, methodName, methodstr);
-
-}
-
-JNIEXPORT jobjectArray JNICALL Java_at_ssw_hotswap_test_access_jni_JNIClassAccess_getMethodsNative(JNIEnv *env, jclass c, jclass cls) {
- jobjectArray array;
-
- jclass jCls = (*env)->GetObjectClass(env, cls);
-
- // Get Method ID of getMethods()
- jmethodID midGetFields = (*env)->GetMethodID(env, jCls, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
- (*env)->ExceptionDescribe(env);
- jobjectArray jobjArray = (jobjectArray) (*env)->CallObjectMethod(env, cls, midGetFields);
-
- jsize len = (*env)->GetArrayLength(env, jobjArray);
- jsize i = 0;
-
- array = (*env)->NewObjectArray(env, len, (*env)->FindClass(env, "java/lang/reflect/Method"), 0);
-
- for (i = 0; i < len; i++) {
- jobject _strMethod = (*env)->GetObjectArrayElement(env, jobjArray, i);
- (*env)->SetObjectArrayElement(env, array, i, _strMethod);
- }
-
- return array;
-}
-
-jobject callVoidMethod(JNIEnv *env, jobject obj, jboolean staticValue, jmethodID methodID, jvalue *params) {
- if (staticValue) {
- (*env)->CallStaticVoidMethodA(env, obj, methodID, params);
- } else {
- (*env)->CallVoidMethodA(env, obj, methodID, params);
- }
- return (*env)->NewGlobalRef(env, NULL);
-}
-
-jobject callIntMethod(JNIEnv *env, jobject obj, jboolean staticValue, jmethodID methodID, jvalue *params) {
- jint intValue;
- if (staticValue) {
- intValue = (*env)->CallStaticIntMethodA(env, obj, methodID, params);
- } else {
- intValue = (*env)->CallIntMethodA(env, obj, methodID, params);
- }
- jclass clazz = (*env)->FindClass(env, "Ljava/lang/Integer;");
- jmethodID methodIDInteger = (*env)->GetMethodID(env, clazz, "<init>", "(I)V");
- return (*env)->NewObject(env, clazz, methodIDInteger, intValue);
-}
-
-jobject callObjectMethod(JNIEnv *env, jobject obj, jboolean staticValue, jmethodID methodID, jvalue *params) {
- if (staticValue) {
- return (*env)->CallStaticObjectMethodA(env, obj, methodID, params);
- } else {
- return (*env)->CallObjectMethodA(env, obj, methodID, params);
- }
-}
-
-JNIEXPORT jobject JNICALL Java_at_ssw_hotswap_test_access_jni_JNIMethodAccess_invokeMethodNative(JNIEnv *env, jclass c, jclass cls, jobject obj, jstring methodName, jstring retValue, jboolean staticValue, jstring descriptor, jobjectArray params) {
- const char *methodstr = (*env)->GetStringUTFChars(env, methodName, 0);
- const char *descriptorstr = (*env)->GetStringUTFChars(env, descriptor, 0);
- const char *retValuestr = (*env)->GetStringUTFChars(env, retValue, 0);
-
- jmethodID methodID;
- if (staticValue) {
- methodID = (*env)->GetStaticMethodID(env, cls, methodstr, descriptorstr);
- } else {
- methodID = (*env)->GetMethodID(env, cls, methodstr, descriptorstr);
- }
-
- jsize len = (*env)->GetArrayLength(env, params);
- jvalue *m = (jvalue*) malloc(sizeof (jvalue) * len);
-
- jvalue *mm = m;
- int i = 0;
- for (i; i < len; i++) {
- *mm = (jvalue)(*env)->GetObjectArrayElement(env, params, i);
- mm += 1;
- }
-
- jobject object = (*env)->NewGlobalRef(env, NULL);
-
- if (strcmp(retValuestr, "void") == 0) {
- object = callVoidMethod(env, obj, staticValue, methodID, m);
- } else if (strcmp(retValuestr, "int") == 0) {
- object = callIntMethod(env, obj, staticValue, methodID, m);
- } else if (strcmp(retValuestr, "java.lang.Object") == 0) {
- object = callObjectMethod(env, obj, staticValue, methodID, m);
- } else {
- jclass exc = (*env)->FindClass(env, "java.lang.NotImplementedException");
- (*env)->ThrowNew(env, exc, "required retValue: bool/int/object");
- }
-
- (*env)->ReleaseStringUTFChars(env, methodName, methodstr);
- (*env)->ReleaseStringUTFChars(env, descriptor, descriptorstr);
- (*env)->ReleaseStringUTFChars(env, retValue, retValuestr);
-
- return object;
-}
-
+} \ No newline at end of file