blob: f08af3a423e50768dd7c3ea8d7df8652fe80d864 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Intel, Gregory Shimansky
*/
#ifndef _JNI_UTILS_H_
#define _JNI_UTILS_H_
#include "object_handles.h"
#include "jni_direct.h"
#include "ini.h"
#include "String_Pool.h"
#ifdef __cplusplus
extern "C" {
#endif
VMEXPORT Class_Handle jni_get_class_handle(JNIEnv*, jclass);
VMEXPORT jclass jni_class_from_handle(JNIEnv*, Class_Handle);
VMEXPORT jobject jni_class_loader_from_handle(JNIEnv*, Class_Loader_Handle);
Class_Loader_Handle class_loader_lookup(jobject loader);
void class_loader_load_native_lib(const char* lib, Class_Loader_Handle loader);
VMEXPORT jvalue *get_jvalue_arg_array(Method *method, va_list args);
VMEXPORT void throw_exception_from_jni(JNIEnv* jenv, const char* exc, const char* msg);
VMEXPORT void array_copy_jni(JNIEnv*, jobject src, jint src_off, jobject dst, jint dst_off, jint count);
VMEXPORT Field* LookupField (Class*, const char*);
VMEXPORT Method* LookupMethod (Class*, const char*, const char*);
VMEXPORT char* ParameterTypesToMethodSignature (JNIEnv*, jobjectArray, const char *name);
VMEXPORT char PrimitiveNameToSignature (const char*);
#ifdef __cplusplus
}
#endif
bool ensure_initialised(JNIEnv* jenv, Class* clss);
jobject create_default_instance(Class* clss);
jobject CreateNewThrowable(JNIEnv* jenv, Class* clazz, const char * message, jthrowable cause);
jclass* GetMethodParameterTypes (JNIEnv*, const char*, int*);
jclass* GetMethodParameterTypes (JNIEnv*, const char*, int*, ClassLoader*);
VMEXPORT jclass SignatureToClass (JNIEnv*, const char*);
VMEXPORT jclass SignatureToClass (JNIEnv*, const char*, ClassLoader *loader);
char* GetClassSignature (Class*);
size_t GetClassSignatureLength (Class*);
void GetClassSignature (Class*, char*);
char* PrimitiveSignatureToName (const char sig);
void PrimitiveSignatureToName (const char sig, char *classname);
const char* SignatureToName (const char* sig);
void SignatureToName (const char* sig, char *name);
jclass FindClassWithClassLoader(JNIEnv* env_ext, const char *name, ClassLoader *loader);
jclass FindClassWithClassLoader(JNIEnv* env_ext, String*name, ClassLoader *loader);
Field* LookupDeclaredField (Class *clss, const char *name);
Method* LookupDeclaredMethod (Class *clss, const char *mname, const char *msig);
// internal VM function that provide Class searching functionality using
// String* parameter (instead of const char* in JNI FindClass)
jclass FindClass(JNIEnv* env_ext, String* name);
JavaVM * jni_get_java_vm(JNIEnv * jni_env);
Global_Env * jni_get_vm_env(JNIEnv * jni_env);
/* global handles */
extern ObjectHandle gh_jlc; //java.lang.Class
extern ObjectHandle gh_jls; //java.lang.String
extern ObjectHandle gh_jlcloneable; //java.lang.Clonable
extern ObjectHandle gh_aoboolean; //[Z
extern ObjectHandle gh_aobyte; //[B
extern ObjectHandle gh_aochar; //[C
extern ObjectHandle gh_aoshort; //[S
extern ObjectHandle gh_aoint; //[I
extern ObjectHandle gh_aolong; //[J
extern ObjectHandle gh_aofloat; //[F
extern ObjectHandle gh_aodouble; //[D
extern ObjectHandle gh_jlboolean; //java.lang.Boolean
extern ObjectHandle gh_jlbyte; //java.lang.Byte
extern ObjectHandle gh_jlchar; //java.lang.Character
extern ObjectHandle gh_jlshort; //java.lang.Short
extern ObjectHandle gh_jlint; //java.lang.Integer
extern ObjectHandle gh_jllong; //java.lang.Long
extern ObjectHandle gh_jlfloat; //java.lang.Float
extern ObjectHandle gh_jldouble; //java.lang.Double
extern jfieldID gid_boolean_value; //java.lang.Boolean's field: value;
extern jfieldID gid_byte_value; //java.lang.Byte's field: value;
extern jfieldID gid_char_value; //java.lang.Character's field: value;
extern jfieldID gid_short_value; //java.lang.Short's field: value;
extern jfieldID gid_int_value; //java.lang.Integer's field: value;
extern jfieldID gid_long_value; //java.lang.Long's field: value;
extern jfieldID gid_float_value; //java.lang.Float's field: value;
extern jfieldID gid_double_value; //java.lang.Double's field: value;
extern jfieldID gid_throwable_traceinfo; //java.lang.Throwable's field: String traceinfo;
extern jfieldID gid_string_field_value; //java.lang.String's field: char[] value;
extern jfieldID gid_string_field_bvalue; //java.lang.String's optional field: byte[] bvalue;
extern jfieldID gid_string_field_offset;//java.lang.String's field: int offset;
extern jfieldID gid_string_field_count; //java.lang.String's field: int count;
extern jmethodID gid_stringinit; //method ID of java.lang.String's "<init>([Z)V"
extern jmethodID gid_doubleisNaN; //method ID of java.lang.Double's "isNaN(D)Z"
extern jdouble gc_double_POSITIVE_INFINITY; //java.lang.Double's const: POSITIVE_INFINITY
extern jdouble gc_double_NEGATIVE_INFINITY; //java.lang.Double's const: NEGATIVE_INFINITY
#endif