Enable resolving the values of static fields on classes #1
							
								
								
									
										10
									
								
								gojni.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								gojni.h
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -7,6 +7,7 @@ __attribute__ ((visibility ("hidden"))) void _jni_ExceptionClear(JNIEnv *env);
 | 
			
		|||
__attribute__ ((visibility ("hidden"))) jclass _jni_GetObjectClass(JNIEnv *env, jobject obj);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jmethodID _jni_GetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jmethodID _jni_GetStaticMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jfieldID _jni_GetStaticFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jsize _jni_GetStringLength(JNIEnv *env, jstring str);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) const jchar *_jni_GetStringChars(JNIEnv *env, jstring str);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jstring _jni_NewString(JNIEnv *env, const jchar *unicodeChars, jsize len);
 | 
			
		||||
| 
						 | 
				
			
			@ -23,3 +24,12 @@ __attribute__ ((visibility ("hidden"))) jbyteArray _jni_NewByteArray(JNIEnv *env
 | 
			
		|||
__attribute__ ((visibility ("hidden"))) jbyte *_jni_GetByteArrayElements(JNIEnv *env, jbyteArray arr);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) void _jni_ReleaseByteArrayElements(JNIEnv *env, jbyteArray arr, jbyte *elems, jint mode);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jsize _jni_GetArrayLength(JNIEnv *env, jarray arr);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jobject _jni_GetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fieldID);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jboolean _jni_GetStaticBooleanField(JNIEnv *env, jclass clazz, jfieldID fieldID);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jbyte _jni_GetStaticByteField(JNIEnv *env, jclass clazz, jfieldID fieldID);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jchar _jni_GetStaticCharField(JNIEnv *env, jclass clazz, jfieldID fieldID);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jshort _jni_GetStaticShortField(JNIEnv *env, jclass clazz, jfieldID fieldID);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jint _jni_GetStaticIntField(JNIEnv *env, jclass clazz, jfieldID fieldID);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jlong _jni_GetStaticLongField(JNIEnv *env, jclass clazz, jfieldID fieldID);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jfloat _jni_GetStaticFloatField(JNIEnv *env, jclass clazz, jfieldID fieldID);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jdouble _jni_GetStaticDoubleField(JNIEnv *env, jclass clazz, jfieldID fieldID);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										41
									
								
								jni.c
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								jni.c
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -36,6 +36,10 @@ jmethodID _jni_GetStaticMethodID(JNIEnv *env, jclass clazz, const char *name, co
 | 
			
		|||
	return (*env)->GetStaticMethodID(env, clazz, name, sig);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jfieldID _jni_GetStaticFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig) {
 | 
			
		||||
    return (*env)->GetStaticFieldID(env, clazz, name, sig);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jsize _jni_GetStringLength(JNIEnv *env, jstring str) {
 | 
			
		||||
	return (*env)->GetStringLength(env, str);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -99,3 +103,40 @@ void _jni_ReleaseByteArrayElements(JNIEnv *env, jbyteArray arr, jbyte *elems, ji
 | 
			
		|||
jsize _jni_GetArrayLength(JNIEnv *env, jarray arr) {
 | 
			
		||||
	return (*env)->GetArrayLength(env, arr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jobject _jni_GetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fieldID) {
 | 
			
		||||
    return (*env)->GetStaticObjectField(env, clazz, fieldID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jboolean _jni_GetStaticBooleanField(JNIEnv *env, jclass clazz, jfieldID fieldID) {
 | 
			
		||||
    return (*env)->GetStaticBooleanField(env, clazz, fieldID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jbyte _jni_GetStaticByteField(JNIEnv *env, jclass clazz, jfieldID fieldID) {
 | 
			
		||||
    return (*env)->GetStaticByteField(env, clazz, fieldID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jchar _jni_GetStaticCharField(JNIEnv *env, jclass clazz, jfieldID fieldID) {
 | 
			
		||||
    return (*env)->GetStaticCharField(env, clazz, fieldID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jshort _jni_GetStaticShortField(JNIEnv *env, jclass clazz, jfieldID fieldID) {
 | 
			
		||||
    return (*env)->GetStaticShortField(env, clazz, fieldID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jint _jni_GetStaticIntField(JNIEnv *env, jclass clazz, jfieldID fieldID) {
 | 
			
		||||
    return (*env)->GetStaticIntField(env, clazz, fieldID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jlong _jni_GetStaticLongField(JNIEnv *env, jclass clazz, jfieldID fieldID) {
 | 
			
		||||
    return (*env)->GetStaticLongField(env, clazz, fieldID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jfloat _jni_GetStaticFloatField(JNIEnv *env, jclass clazz, jfieldID fieldID) {
 | 
			
		||||
    return (*env)->GetStaticFloatField(env, clazz, fieldID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jdouble _jni_GetStaticDoubleField(JNIEnv *env, jclass clazz, jfieldID fieldID) {
 | 
			
		||||
    return (*env)->GetStaticDoubleField(env, clazz, fieldID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										105
									
								
								jni.go
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								jni.go
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -38,6 +38,7 @@ type (
 | 
			
		|||
	Class     C.jclass
 | 
			
		||||
	Object    C.jobject
 | 
			
		||||
	MethodID  C.jmethodID
 | 
			
		||||
	FieldID   C.jfieldID
 | 
			
		||||
	String    C.jstring
 | 
			
		||||
	ByteArray C.jbyteArray
 | 
			
		||||
	Value     uint64 // All JNI types fit into 64-bits.
 | 
			
		||||
| 
						 | 
				
			
			@ -212,6 +213,20 @@ func GetStaticMethodID(e Env, cls Class, name, signature string) MethodID {
 | 
			
		|||
	return MethodID(m)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticFieldID returns the id for a static field. It panics if the field
 | 
			
		||||
// wasn't found.
 | 
			
		||||
func GetStaticFieldID(e Env, cls Class, name, signature string) FieldID {
 | 
			
		||||
	mname := C.CString(name)
 | 
			
		||||
	defer C.free(unsafe.Pointer(mname))
 | 
			
		||||
	msig := C.CString(signature)
 | 
			
		||||
	defer C.free(unsafe.Pointer(msig))
 | 
			
		||||
	m := C._jni_GetStaticFieldID(e.env, C.jclass(cls), mname, msig)
 | 
			
		||||
	if err := exception(e); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return FieldID(m)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetMethodID returns the id for a method. It panics if the method
 | 
			
		||||
// wasn't found.
 | 
			
		||||
func GetMethodID(e Env, cls Class, name, signature string) MethodID {
 | 
			
		||||
| 
						 | 
				
			
			@ -259,3 +274,93 @@ func GoString(e Env, str String) string {
 | 
			
		|||
	utf8 := utf16.Decode(utf16Chars)
 | 
			
		||||
	return string(utf8)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticObjectField looks up the value of a static field of type Object.
 | 
			
		||||
// It panics if it is unable to find the field.
 | 
			
		||||
func GetStaticObjectField(env Env, clazz Class, fieldID FieldID) Object {
 | 
			
		||||
	value := C._jni_GetStaticObjectField(env.env, C.jclass(clazz), C.jfieldID(fieldID))
 | 
			
		||||
	if err := exception(env); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return Object(value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticBooleanField looks up the value of a static field of type boolean.
 | 
			
		||||
// It panics if it is unable to find the field.
 | 
			
		||||
func GetStaticBooleanField(env Env, clazz Class, fieldID FieldID) bool {
 | 
			
		||||
	value := C._jni_GetStaticBooleanField(env.env, C.jclass(clazz), C.jfieldID(fieldID))
 | 
			
		||||
	if err := exception(env); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return value != 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticByteField looks up the value of a static field of type byte.
 | 
			
		||||
// It panics if it is unable to find the field.
 | 
			
		||||
func GetStaticByteField(env Env, clazz Class, fieldID FieldID) byte {
 | 
			
		||||
	value := C._jni_GetStaticByteField(env.env, C.jclass(clazz), C.jfieldID(fieldID))
 | 
			
		||||
	if err := exception(env); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return byte(value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticCharField looks up the value of a static field of type char.
 | 
			
		||||
// It panics if it is unable to find the field.
 | 
			
		||||
func GetStaticCharField(env Env, clazz Class, fieldID FieldID) byte {
 | 
			
		||||
	value := C._jni_GetStaticCharField(env.env, C.jclass(clazz), C.jfieldID(fieldID))
 | 
			
		||||
	if err := exception(env); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return byte(value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticShortField looks up the value of a static field of type short.
 | 
			
		||||
// It panics if it is unable to find the field.
 | 
			
		||||
func GetStaticShortField(env Env, clazz Class, fieldID FieldID) int16 {
 | 
			
		||||
	value := C._jni_GetStaticShortField(env.env, C.jclass(clazz), C.jfieldID(fieldID))
 | 
			
		||||
	if err := exception(env); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return int16(value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticIntField looks up the value of a static field of type int.
 | 
			
		||||
// It panics if it is unable to find the field.
 | 
			
		||||
func GetStaticIntField(env Env, clazz Class, fieldID FieldID) int32 {
 | 
			
		||||
	value := C._jni_GetStaticIntField(env.env, C.jclass(clazz), C.jfieldID(fieldID))
 | 
			
		||||
	if err := exception(env); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return int32(value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticLongField looks up the value of a static field of type long.
 | 
			
		||||
// It panics if it is unable to find the field.
 | 
			
		||||
func GetStaticLongField(env Env, clazz Class, fieldID FieldID) int64 {
 | 
			
		||||
	value := C._jni_GetStaticLongField(env.env, C.jclass(clazz), C.jfieldID(fieldID))
 | 
			
		||||
	if err := exception(env); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return int64(value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticFloatField looks up the value of a static field of type float.
 | 
			
		||||
// It panics if it is unable to find the field.
 | 
			
		||||
func GetStaticFloatField(env Env, clazz Class, fieldID FieldID) float32 {
 | 
			
		||||
	value := C._jni_GetStaticFloatField(env.env, C.jclass(clazz), C.jfieldID(fieldID))
 | 
			
		||||
	if err := exception(env); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return float32(value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStaticDoubleField looks up the value of a static field of type double.
 | 
			
		||||
// It panics if it is unable to find the field.
 | 
			
		||||
func GetStaticDoubleField(env Env, clazz Class, fieldID FieldID) float64 {
 | 
			
		||||
	value := C._jni_GetStaticDoubleField(env.env, C.jclass(clazz), C.jfieldID(fieldID))
 | 
			
		||||
	if err := exception(env); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return float64(value)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user