Exemplo n.º 1
0
 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")
Exemplo n.º 2
0
Arquivo: jnij.py Projeto: almanar/jvm
 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;")
Exemplo n.º 3
0
Arquivo: jnij.py Projeto: almanar/jvm
 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;")
Exemplo n.º 4
0
Arquivo: jnij.py Projeto: almanar/jvm
 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")
Exemplo n.º 5
0
Arquivo: jnij.py Projeto: almanar/jvm
 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")
Exemplo n.º 6
0
Arquivo: jnij.py Projeto: almanar/jvm
 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")
Exemplo n.º 7
0
Arquivo: jnij.py Projeto: almanar/jvm
 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)
Exemplo n.º 8
0
Arquivo: jnij.py Projeto: almanar/jvm
 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")
Exemplo n.º 9
0
 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")
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
 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;")
Exemplo n.º 12
0
 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")
Exemplo n.º 13
0
 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")
Exemplo n.º 14
0
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"))
Exemplo n.º 15
0
 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
Exemplo n.º 16
0
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)
Exemplo n.º 17
0
 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
Exemplo n.º 18
0
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)
Exemplo n.º 19
0
 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)
Exemplo n.º 20
0
 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)
Exemplo n.º 21
0
 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)
Exemplo n.º 22
0
 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")
Exemplo n.º 23
0
 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)
Exemplo n.º 24
0
 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"))
Exemplo n.º 25
0
 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")
Exemplo n.º 26
0
Arquivo: jnij.py Projeto: almanar/jvm
 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")
Exemplo n.º 27
0
Arquivo: jnij.py Projeto: almanar/jvm
 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")
Exemplo n.º 28
0
 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
Exemplo n.º 29
0
 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)
Exemplo n.º 30
0
 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")