Skip to content

Commit

Permalink
add native support for CharSequence. We supported String, but not the…
Browse files Browse the repository at this point in the history
… baseclass CharSequence. Both returns a python string, and a python string can be assigned to both.
  • Loading branch information
tito committed Mar 2, 2015
1 parent 9e60152 commit a0c9467
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions jnius/jnius_conversion.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ cdef void release_args(JNIEnv *j_env, tuple definition_args, jvalue *j_args, arg
if py_arg is None:
j_args[index].l = NULL
if isinstance(py_arg, basestring) and \
argtype in ('Ljava/lang/String;', 'Ljava/lang/Object;'):
argtype in (
'Ljava/lang/String;',
'Ljava/lang/CharSequence;',
'Ljava/lang/Object;'):
j_env[0].DeleteLocalRef(j_env, j_args[index].l)
elif argtype[0] == '[':
ret = convert_jarray_to_python(j_env, argtype[1:], j_args[index].l)
Expand Down Expand Up @@ -50,7 +53,10 @@ cdef void populate_args(JNIEnv *j_env, tuple definition_args, jvalue *j_args, ar
if py_arg is None:
j_args[index].l = NULL
elif isinstance(py_arg, basestring) and \
argtype in ('Ljava/lang/String;', 'Ljava/lang/Object;'):
argtype in (
'Ljava/lang/String;',
'Ljava/lang/CharSequence;',
'Ljava/lang/Object;'):
py_str = <bytes>py_arg.encode('utf-8')
j_args[index].l = j_env[0].NewStringUTF(j_env, <char *>py_str)
elif isinstance(py_arg, JavaClass):
Expand Down Expand Up @@ -123,7 +129,7 @@ cdef convert_jobject_to_python(JNIEnv *j_env, bytes definition, jobject j_object
# Ie, B would be passed as Ljava/lang/Character;

# if we got a string, just convert back to Python str.
if r == 'java/lang/String':
if r in ('java/lang/String', 'java/lang/CharSequence'):
c_str = <char *>j_env[0].GetStringUTFChars(j_env, j_object, NULL)
py_str = <bytes>c_str
j_env[0].ReleaseStringUTFChars(j_env, j_object, c_str)
Expand Down Expand Up @@ -311,7 +317,10 @@ cdef jobject convert_python_to_jobject(JNIEnv *j_env, definition, obj) except *:
if obj is None:
return NULL
elif isinstance(obj, basestring) and \
definition in ('Ljava/lang/String;', 'Ljava/lang/Object;'):
definition in (
'Ljava/lang/String;',
'Ljava/lang/CharSequence;',
'Ljava/lang/Object;'):
return j_env[0].NewStringUTF(j_env, <char *><bytes>obj)
elif isinstance(obj, (int, long)) and \
definition in (
Expand Down Expand Up @@ -522,7 +531,10 @@ cdef jobject convert_pyarray_to_java(JNIEnv *j_env, definition, pyarray) except
j_env[0].SetObjectArrayElement(
j_env, <jobjectArray>ret, i, NULL)
elif isinstance(arg, basestring) and \
definition in ('Ljava/lang/String;', 'Ljava/lang/Object;'):
definition in (
'Ljava/lang/String;',
'Ljava/lang/CharSequence;',
'Ljava/lang/Object;'):
j_string = j_env[0].NewStringUTF(
j_env, <bytes>arg)
j_env[0].SetObjectArrayElement(
Expand Down

0 comments on commit a0c9467

Please sign in to comment.