Index: base/android/jni_generator/jni_generator.py |
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py |
index 9984c2a2866901f16fcfee565c18a625b94dfea2..c8834d9b71ec3e488ca9627b5f49a1ce7b8ab80b 100755 |
--- a/base/android/jni_generator/jni_generator.py |
+++ b/base/android/jni_generator/jni_generator.py |
@@ -124,6 +124,14 @@ def JavaDataTypeToC(java_type): |
return 'jobject' |
+def JavaDataTypeToCForCalledByNativeParam(java_type): |
+ """Returns a C datatype to be when calling from native.""" |
+ if java_type == 'int': |
+ return 'JniIntWrapper' |
+ else: |
+ return JavaDataTypeToC(java_type) |
+ |
+ |
def JavaReturnValueToC(java_type): |
"""Returns a valid C return value for the given java type.""" |
java_pod_type_map = { |
@@ -672,6 +680,8 @@ class InlHeaderFileGenerator(object): |
${INCLUDES} |
+#include "base/android/jni_int_wrapper.h" |
+ |
// Step 1: forward declarations. |
namespace { |
$CLASS_PATH_DEFINITIONS |
@@ -932,9 +942,10 @@ Java_${FULLY_QUALIFIED_CLASS}_${INIT_NATIVE_NAME}(JNIEnv* env, jclass clazz) { |
for param in native.params]) |
def GetCalledByNativeParamsInDeclaration(self, called_by_native): |
- return ',\n '.join([JavaDataTypeToC(param.datatype) + ' ' + |
- param.name |
- for param in called_by_native.params]) |
+ return ',\n '.join([ |
+ JavaDataTypeToCForCalledByNativeParam(param.datatype) + ' ' + |
+ param.name |
+ for param in called_by_native.params]) |
def GetForwardDeclaration(self, native): |
template = Template(""" |
@@ -978,6 +989,14 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) { |
} |
return template.substitute(values) |
+ def GetArgument(self, param): |
+ return ('as_jint(' + param.name + ')' |
+ if param.datatype == 'int' else param.name) |
+ |
+ def GetArgumentsInCall(self, params): |
+ """Return a string of arguments to call from native into Java""" |
+ return [self.GetArgument(p) for p in params] |
+ |
def GetCalledByNativeValues(self, called_by_native): |
"""Fills in necessary values for the CalledByNative methods.""" |
if called_by_native.static or called_by_native.is_constructor: |
@@ -992,7 +1011,7 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) { |
called_by_native) |
if params_in_declaration: |
params_in_declaration = ', ' + params_in_declaration |
- params_in_call = ', '.join(param.name for param in called_by_native.params) |
+ params_in_call = ', '.join(self.GetArgumentsInCall(called_by_native.params)) |
if params_in_call: |
params_in_call = ', ' + params_in_call |
pre_call = '' |