mirror of https://github.com/kivy/pyjnius.git
54 lines
1.4 KiB
Cython
54 lines
1.4 KiB
Cython
|
|
||
|
cdef parse_definition(definition):
|
||
|
# not a function, just a field
|
||
|
if definition[0] != '(':
|
||
|
return definition, None
|
||
|
|
||
|
# it's a function!
|
||
|
argdef, ret = definition[1:].split(')')
|
||
|
args = []
|
||
|
|
||
|
while len(argdef):
|
||
|
c = argdef[0]
|
||
|
|
||
|
# read the array char
|
||
|
prefix = ''
|
||
|
if c == '[':
|
||
|
prefix = c
|
||
|
argdef = argdef[1:]
|
||
|
c = argdef[0]
|
||
|
|
||
|
# native type
|
||
|
if c in 'ZBCSIJFD':
|
||
|
args.append(prefix + c)
|
||
|
argdef = argdef[1:]
|
||
|
continue
|
||
|
|
||
|
# java class
|
||
|
if c == 'L':
|
||
|
c, argdef = argdef.split(';', 1)
|
||
|
args.append(prefix + c + ';')
|
||
|
|
||
|
return ret, args
|
||
|
|
||
|
|
||
|
cdef void check_exception(JNIEnv *j_env) except *:
|
||
|
cdef jthrowable exc = j_env[0].ExceptionOccurred(j_env)
|
||
|
if exc:
|
||
|
j_env[0].ExceptionDescribe(j_env)
|
||
|
j_env[0].ExceptionClear(j_env)
|
||
|
raise JavaException('JVM exception occured')
|
||
|
|
||
|
cdef bytes lookup_java_object_name(JNIEnv *j_env, jobject j_obj):
|
||
|
from reflect import ensureclass, autoclass
|
||
|
ensureclass('java.lang.Object')
|
||
|
ensureclass('java.lang.Class')
|
||
|
cdef JavaClass obj = autoclass('java.lang.Object')(noinstance=True)
|
||
|
obj.instanciate_from(create_local_ref(j_env, j_obj))
|
||
|
cls = obj.getClass()
|
||
|
name = cls.getName()
|
||
|
ensureclass(name)
|
||
|
return name.replace('.', '/')
|
||
|
|
||
|
|