def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/lang/reflect/Constructor") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.getParameterTypes = jenv.GetMethodID(jcls, b"getParameterTypes", b"()[Ljava/lang/Class;") self.getExceptionTypes = jenv.GetMethodID(jcls, b"getExceptionTypes", b"()[Ljava/lang/Class;") self.isVarArgs = jenv.GetMethodID(jcls, b"isVarArgs", b"()Z")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/beans/Introspector") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.getBeanInfo = jenv.GetStaticMethodID( jcls, b"getBeanInfo", b"(Ljava/lang/Class;)Ljava/beans/BeanInfo;")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/beans/BeanInfo") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.getPropertyDescriptors = jenv.GetMethodID( jcls, b"getPropertyDescriptors", b"()[Ljava/beans/PropertyDescriptor;")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/io/PrintWriter") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.Constructor = jenv.GetMethodID(jcls, b"<init>", b"(Ljava/io/Writer;)V") self.flush = jenv.GetMethodID(jcls, b"flush", b"()V")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/lang/StackTraceElement") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.Constructor = jenv.GetMethodID( jcls, b"<init>", b"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/lang/String") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.ConstructorFromBytes = jenv.GetMethodID( jcls, b"<init>", b"([BLjava/lang/String;)V") self.getBytes = jenv.GetMethodID(jcls, b"getBytes", b"(Ljava/lang/String;)[B")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 2): jcls = jenv.FindClass(b"java/lang/Void") TYPE = jenv.GetStaticObjectField( jcls, jenv.GetStaticFieldID(jcls, b"TYPE", b"Ljava/lang/Class;")) self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.TYPE = jni.cast(jenv.NewGlobalRef(TYPE), jni.jclass)
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/lang/reflect/Field") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.getType = jenv.GetMethodID(jcls, b"getType", b"()Ljava/lang/Class;") self.isEnumConstant = jenv.GetMethodID(jcls, b"isEnumConstant", b"()Z")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/lang/reflect/AnnotatedElement") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.getDeclaredAnnotations = jenv.GetMethodID(jcls, b"getDeclaredAnnotations", b"()[Ljava/lang/annotation/Annotation;") self.getAnnotations = jenv.GetMethodID(jcls, b"getAnnotations", b"()[Ljava/lang/annotation/Annotation;") self.getAnnotation = jenv.GetMethodID(jcls, b"getAnnotation", b"(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;") self.isAnnotationPresent = jenv.GetMethodID(jcls, b"isAnnotationPresent", b"(Ljava/lang/Class;)Z")
def unregisterNatives(jenv: jni.JNIEnv, class_name: str): jenv.PushLocalFrame(1) try: jcls = jenv.FindClass(class_name.replace(".", "/").encode("utf-8")) jenv.UnregisterNatives(jcls) finally: jenv.PopLocalFrame(jni.NULL)
def initialize(self, jenv: jni.JNIEnv): from .org.jt.reflect import ProxyHandler registerClass(jenv, "org.jt.reflect.ProxyHandler", ProxyHandler) with JFrame(jenv, 1): jcls = jenv.FindClass(b"org/jt/reflect/ProxyHandler") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.Constructor = jenv.GetMethodID(jcls, b"<init>", b"(J)V") self.getClass = jenv.GetMethodID(jcls, b"getClass", b"()Ljava/lang/Class;")
def initialize(self, jenv: jni.JNIEnv): from .org.jt.ref import Reference registerClass(jenv, "org.jt.ref.Reference", Reference) with JFrame(jenv, 1): jcls = jenv.FindClass(b"org/jt/ref/Reference") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.Constructor = jenv.GetMethodID( jcls, b"<init>", b"(Ljava/lang/Object;JLjava/lang/ref/ReferenceQueue;)V")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/lang/Number") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.byteValue = jenv.GetMethodID(jcls, b"byteValue", b"()B") self.shortValue = jenv.GetMethodID(jcls, b"shortValue", b"()S") self.intValue = jenv.GetMethodID(jcls, b"intValue", b"()I") self.longValue = jenv.GetMethodID(jcls, b"longValue", b"()J") self.floatValue = jenv.GetMethodID(jcls, b"floatValue", b"()F") self.doubleValue = jenv.GetMethodID(jcls, b"doubleValue", b"()D")
def throwJavaException(jenv: jni.JNIEnv, jecls, message): if isinstance(jecls, str): class_name = jecls jenv.PushLocalFrame(1) try: jecls = jenv.FindClass(class_name.replace(".", "/").encode("utf-8")) jenv.ThrowNew(jecls, str(message).encode("utf-8")) finally: jenv.PopLocalFrame(jni.NULL) else: jenv.ThrowNew(jecls, str(message).encode("utf-8"))
def __init__(self, jvm, jenv: jni.JNIEnv, modif: int): Modif = jvm.Modifier jcls = Modif.Class jmod = jni.new_array(jni.jvalue, 1) jmod[0].i = modif self.isPublic = jenv.CallStaticBooleanMethod(jcls, Modif.isPublic, jmod) self.isProtected = jenv.CallStaticBooleanMethod(jcls, Modif.isProtected, jmod) self.isPrivate = jenv.CallStaticBooleanMethod(jcls, Modif.isPrivate, jmod) self.isFinal = jenv.CallStaticBooleanMethod(jcls, Modif.isFinal, jmod) self.isStatic = jenv.CallStaticBooleanMethod(jcls, Modif.isStatic, jmod) self.isAbstract = jenv.CallStaticBooleanMethod(jcls, Modif.isAbstract, jmod) self.modif = modif
def registerClass(jenv: jni.JNIEnv, class_name: str, class_code, native_methods: Optional[Sequence[Callable]] = None, class_loader=None): if inspect.ismodule(class_code) or inspect.isclass(class_code): if native_methods is None: native_methods = getattr(class_code, "__jnimethods__", ()) class_code = class_code.__javacode__ else: if native_methods is None: native_methods = () jenv.PushLocalFrame(3) try: if class_loader is None: jcls = jenv.FindClass(b"java/lang/ClassLoader") jmid = jenv.GetStaticMethodID(jcls, b"getSystemClassLoader", b"()Ljava/lang/ClassLoader;") class_loader = jenv.CallStaticObjectMethod(jcls, jmid) try: jcls = jenv.FindClass(class_name.replace(".", "/").encode("utf-8")) except Exception: size = len(class_code) jcls = jenv.DefineClass(class_name.replace(".", "/").encode("utf-8"), class_loader, jni.cast(jni.from_buffer(class_code), jni.POINTER(jni.jbyte)), size) methods = jni.new_array(jni.JNINativeMethod, len(native_methods)) for idx, method in enumerate(native_methods): methods[idx] = method jenv.RegisterNatives(jcls, methods, len(methods)) finally: jenv.PopLocalFrame(jni.NULL)
def __init__(self, jenv: jni.JNIEnv=None, jstr: jni.jobject=jni.obj(jni.POINTER(jni.jchar)), own: bool = True): self.__jstr = jni.cast(jstr, jni.jstring) self.__size = 0 self.__jchars = jni.obj(jni.POINTER(jni.jchar)) if jenv is not None and jstr: length = jenv.GetStringLength(self.__jstr) jchars = jenv.GetStringChars(self.__jstr) try: self.__jchars = jni.new_array(jni.jchar, length + 1) jni.memmove(self.__jchars, jchars, length * jni.sizeof(jni.jchar)) self.__jchars[length] = "\0" finally: jenv.ReleaseStringChars(self.__jstr, jchars) self.__size = length
def registerNatives(jenv: jni.JNIEnv, class_name: str, native_methods: Sequence[Callable]): if inspect.ismodule(native_methods) or inspect.isclass(native_methods): native_methods = getattr(native_methods, "__jnimethods__", ()) else: if native_methods is None: native_methods = () jenv.PushLocalFrame(1) try: jcls = jenv.FindClass(class_name.replace(".", "/").encode("utf-8")) methods = jni.new_array(jni.JNINativeMethod, len(native_methods)) for idx, method in enumerate(native_methods): methods[idx] = method jenv.RegisterNatives(jcls, methods, len(methods)) finally: jenv.PopLocalFrame(jni.NULL)
def __init__(self, jenv: jni.JNIEnv, jobj: jni.jobject, own: bool = True): self._jobj = jni.NULL self._own = own if not jobj: from .jconstants import EStatusCode from .jvm import JVMException raise JVMException(EStatusCode.UNKNOWN, "Allocating null Object") self._jobj = jni.cast(jenv.NewGlobalRef(jobj) if own else jobj, jni.jobject)
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 4): jcls = jenv.FindClass(b"java/io/IOException") self.IOException = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) jcls = jenv.FindClass(b"java/io/EOFException") self.EOFException = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) jcls = jenv.FindClass(b"java/io/IOError") self.IOError = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) jcls = jenv.FindClass(b"java/io/FileNotFoundException") self.FileNotFoundException = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass)
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 8): self.BooleanArray1Class = jni.cast(jenv.NewGlobalRef(jenv.FindClass(b"[Z")), jni.jclass) self.CharArray1Class = jni.cast(jenv.NewGlobalRef(jenv.FindClass(b"[C")), jni.jclass) self.ByteArray1Class = jni.cast(jenv.NewGlobalRef(jenv.FindClass(b"[B")), jni.jclass) self.ShortArray1Class = jni.cast(jenv.NewGlobalRef(jenv.FindClass(b"[S")), jni.jclass) self.IntArray1Class = jni.cast(jenv.NewGlobalRef(jenv.FindClass(b"[I")), jni.jclass) self.LongArray1Class = jni.cast(jenv.NewGlobalRef(jenv.FindClass(b"[J")), jni.jclass) self.FloatArray1Class = jni.cast(jenv.NewGlobalRef(jenv.FindClass(b"[F")), jni.jclass) self.DoubleArray1Class = jni.cast(jenv.NewGlobalRef(jenv.FindClass(b"[D")), jni.jclass)
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/lang/System") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.identityHashCode = jenv.GetStaticMethodID(jcls, b"identityHashCode", b"(Ljava/lang/Object;)I") self.getProperty = jenv.GetStaticMethodID(jcls, b"getProperty", b"(Ljava/lang/String;)Ljava/lang/String;") self.setProperty = jenv.GetStaticMethodID(jcls, b"setProperty", b"(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;") self.clearProperty = jenv.GetStaticMethodID(jcls, b"clearProperty", b"(Ljava/lang/String;)Ljava/lang/String;") self.loadLibrary = jenv.GetStaticMethodID(jcls, b"loadLibrary", b"(Ljava/lang/String;)V") self.runFinalization = jenv.GetStaticMethodID(jcls, b"runFinalization", b"()V")
def dispose(self, jenv: jni.JNIEnv): if jenv is not None: jenv.DeleteGlobalRef(self.ListClass) jenv.DeleteGlobalRef(self.MapEntryClass) jenv.DeleteGlobalRef(self.MapClass) jenv.DeleteGlobalRef(self.IteratorClass) jenv.DeleteGlobalRef(self.CollectionClass) jenv.DeleteGlobalRef(self.ArrayListClass) jenv.DeleteGlobalRef(self.CollectionsClass) jenv.DeleteGlobalRef(self.HashMapClass)
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 2): jcls = jenv.FindClass(b"java/lang/Double") TYPE = jenv.GetStaticObjectField(jcls, jenv.GetStaticFieldID(jcls, b"TYPE", b"Ljava/lang/Class;")) self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.TYPE = jni.cast(jenv.NewGlobalRef(TYPE), jni.jclass) self.Constructor = jenv.GetMethodID (jcls, b"<init>", b"(D)V") self.valueOf = jenv.GetStaticMethodID(jcls, b"valueOf", b"(D)Ljava/lang/Double;") self.MIN_VALUE = jenv.GetStaticDoubleField(jcls, jenv.GetStaticFieldID(jcls, b"MIN_VALUE", b"D")) self.MAX_VALUE = jenv.GetStaticDoubleField(jcls, jenv.GetStaticFieldID(jcls, b"MAX_VALUE", b"D"))
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/lang/Package") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.getPackage = jenv.GetStaticMethodID(jcls, b"getPackage", b"(Ljava/lang/String;)Ljava/lang/Package;") self.getPackages = jenv.GetStaticMethodID(jcls, b"getPackages", b"()[Ljava/lang/Package;") self.getName = jenv.GetMethodID(jcls, b"getName", b"()Ljava/lang/String;") self.getSpecificationTitle = jenv.GetMethodID(jcls, b"getSpecificationTitle", b"()Ljava/lang/String;") self.getSpecificationVersion = jenv.GetMethodID(jcls, b"getSpecificationVersion", b"()Ljava/lang/String;") self.getSpecificationVendor = jenv.GetMethodID(jcls, b"getSpecificationVendor", b"()Ljava/lang/String;") self.getImplementationTitle = jenv.GetMethodID(jcls, b"getImplementationTitle", b"()Ljava/lang/String;") self.getImplementationVersion = jenv.GetMethodID(jcls, b"getImplementationVersion", b"()Ljava/lang/String;") self.getImplementationVendor = jenv.GetMethodID(jcls, b"getImplementationVendor", b"()Ljava/lang/String;") self.isSealed = jenv.GetMethodID(jcls, b"isSealed", b"()Z")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 2): jfcls = jenv.FindClass(b"java/beans/FeatureDescriptor") jcls = jenv.FindClass(b"java/beans/PropertyDescriptor") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.hashCode = jenv.GetMethodID(jcls, b"hashCode", b"()I") self.getName = jenv.GetMethodID(jfcls, b"getName", b"()Ljava/lang/String;") self.getPropertyType = jenv.GetMethodID(jcls, b"getPropertyType", b"()Ljava/lang/Class;") self.getReadMethod = jenv.GetMethodID( jcls, b"getReadMethod", b"()Ljava/lang/reflect/Method;") self.getWriteMethod = jenv.GetMethodID( jcls, b"getWriteMethod", b"()Ljava/lang/reflect/Method;") self.setReadMethod = jenv.GetMethodID( jcls, b"setReadMethod", b"(Ljava/lang/reflect/Method;)V") self.setWriteMethod = jenv.GetMethodID( jcls, b"setWriteMethod", b"(Ljava/lang/reflect/Method;)V")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 2): jcls = jenv.FindClass(b"java/lang/Character") TYPE = jenv.GetStaticObjectField( jcls, jenv.GetStaticFieldID(jcls, b"TYPE", b"Ljava/lang/Class;")) self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.TYPE = jni.cast(jenv.NewGlobalRef(TYPE), jni.jclass) self.Constructor = jenv.GetMethodID(jcls, b"<init>", b"(C)V") self.valueOf = jenv.GetStaticMethodID(jcls, b"valueOf", b"(C)Ljava/lang/Character;") self.charValue = jenv.GetMethodID(jcls, b"charValue", b"()C")
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 2): jcls = jenv.FindClass(b"java/lang/Long") TYPE = jenv.GetStaticObjectField(jcls, jenv.GetStaticFieldID(jcls, b"TYPE", b"Ljava/lang/Class;")) self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.TYPE = jni.cast(jenv.NewGlobalRef(TYPE), jni.jclass) self.Constructor = jenv.GetMethodID (jcls, b"<init>", b"(J)V") self.valueOf = jenv.GetStaticMethodID(jcls, b"valueOf", b"(J)Ljava/lang/Long;") self.MIN_VALUE = jenv.GetStaticLongField(jcls, jenv.GetStaticFieldID(jcls, b"MIN_VALUE", b"J")) self.MAX_VALUE = jenv.GetStaticLongField(jcls, jenv.GetStaticFieldID(jcls, b"MAX_VALUE", b"J")) # Some JVM's incorrectly return positive values if self.MIN_VALUE > 0: self.MIN_VALUE = -self.MIN_VALUE
def dispose(self, jenv: jni.JNIEnv): if jenv is not None: jenv.DeleteGlobalRef(self.ByteBufferClass) jenv.DeleteGlobalRef(self.ShortBufferClass) jenv.DeleteGlobalRef(self.IntBufferClass) jenv.DeleteGlobalRef(self.LongBufferClass) jenv.DeleteGlobalRef(self.FloatBufferClass) jenv.DeleteGlobalRef(self.DoubleBufferClass) jenv.DeleteGlobalRef(self.ByteOrderClass)
def initialize(self, jenv: jni.JNIEnv): with JFrame(jenv, 1): jcls = jenv.FindClass(b"java/lang/Throwable") self.Class = jni.cast(jenv.NewGlobalRef(jcls), jni.jclass) self.getMessage = jenv.GetMethodID(jcls, b"getMessage", b"()Ljava/lang/String;") self.getLocalizedMessage = jenv.GetMethodID(jcls, b"getLocalizedMessage", b"()Ljava/lang/String;") self.getCause = jenv.GetMethodID(jcls, b"getCause", b"()Ljava/lang/Throwable;") self.getStackTrace = jenv.GetMethodID(jcls, b"getStackTrace", b"()[Ljava/lang/StackTraceElement;") self.setStackTrace = jenv.GetMethodID(jcls, b"setStackTrace", b"([Ljava/lang/StackTraceElement;)V") self.printStackTrace = jenv.GetMethodID(jcls, b"printStackTrace", b"(Ljava/io/PrintWriter;)V")