@@ -158,7 +158,7 @@ MethodInvoker::MethodInvoker(alias_ref<JReflectMethod::javaobject> method, std::
158
158
isSync_(isSync) {
159
159
CHECK (signature_.at (1 ) == ' .' ) << " Improper module method signature" ;
160
160
CHECK (isSync_ || signature_.at (0 ) == ' v' ) << " Non-sync hooks cannot have a non-void return type" ;
161
- }
161
+ }
162
162
163
163
MethodCallResult MethodInvoker::invoke (std::weak_ptr<Instance>& instance, alias_ref<JBaseJavaModule::javaobject> module, const folly::dynamic& params) {
164
164
#ifdef WITH_FBSYSTRACE
@@ -191,13 +191,26 @@ MethodCallResult MethodInvoker::invoke(std::weak_ptr<Instance>& instance, alias_
191
191
return folly::dynamic (result); \
192
192
}
193
193
194
+ #define PRIMITIVE_CASE_CASTING (METHOD, RESULT_TYPE ) { \
195
+ auto result = env->Call ## METHOD ## MethodA (module.get (), method_, args); \
196
+ throwPendingJniExceptionAsCppException (); \
197
+ return folly::dynamic (static_cast <RESULT_TYPE>(result)); \
198
+ }
199
+
194
200
#define OBJECT_CASE (JNI_CLASS, ACTIONS ) { \
195
201
auto jobject = env->CallObjectMethodA (module.get (), method_, args); \
196
202
throwPendingJniExceptionAsCppException (); \
197
203
auto result = adopt_local (static_cast <JNI_CLASS::javaobject>(jobject)); \
198
204
return folly::dynamic (result->ACTIONS ()); \
199
205
}
200
206
207
+ #define OBJECT_CASE_CASTING (JNI_CLASS, ACTIONS, RESULT_TYPE ) { \
208
+ auto jobject = env->CallObjectMethodA (module.get (), method_, args); \
209
+ throwPendingJniExceptionAsCppException (); \
210
+ auto result = adopt_local (static_cast <JNI_CLASS::javaobject>(jobject)); \
211
+ return folly::dynamic (static_cast <RESULT_TYPE>(result->ACTIONS ())); \
212
+ }
213
+
201
214
char returnType = signature_.at (0 );
202
215
switch (returnType) {
203
216
case ' v' :
@@ -206,9 +219,9 @@ MethodCallResult MethodInvoker::invoke(std::weak_ptr<Instance>& instance, alias_
206
219
return folly::none;
207
220
208
221
case ' z' :
209
- PRIMITIVE_CASE (Boolean )
222
+ PRIMITIVE_CASE_CASTING (Boolean , bool )
210
223
case ' Z' :
211
- OBJECT_CASE (JBoolean, value)
224
+ OBJECT_CASE_CASTING (JBoolean, value, bool )
212
225
case ' i' :
213
226
PRIMITIVE_CASE (Int)
214
227
case ' I' :
0 commit comments