Add common internal macros to request jni objects

There are multiple macros used to get/check and return with error
in case the requested object is not valid. These macros are defined
in multiple places and duplicated. This patch defines them in one place
and then they can be reused.

This macro expects a "char m_qtTag[]" variable to be defined in
the scope where the macro is used. That variable is used as a tag
for the error message printed when an error occur.

Another consecutive patch use the new macros over qtbase code.

Pick-to: 6.2
Change-Id: Ibb8558d1229cec6dad9ec9da6e2635ea54fd18d6
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
This commit is contained in:
Assam Boudjelthia 2021-06-11 17:03:03 +03:00
parent dab8f64b6d
commit 01d30e2d53

View File

@ -139,6 +139,45 @@ namespace QtAndroidPrivate
Q_CORE_EXPORT jobject callOnBindListener(jobject intent);
}
#define Q_JNI_FIND_AND_CHECK_CLASS(CLASS_NAME) \
clazz = env.findClass(CLASS_NAME); \
if (!clazz) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, QtAndroid::classErrorMsgFmt(), CLASS_NAME);\
return JNI_FALSE; \
}
#define Q_JNI_GET_AND_CHECK_METHOD(ID, CLASS, METHOD_NAME, METHOD_SIGNATURE) \
ID = env.findMethod(CLASS, METHOD_NAME, METHOD_SIGNATURE); \
if (!ID) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, QtAndroid::methodErrorMsgFmt(), \
METHOD_NAME, METHOD_SIGNATURE); \
return JNI_FALSE; \
}
#define Q_JNI_GET_AND_CHECK_STATIC_METHOD(ID, CLASS, METHOD_NAME, METHOD_SIGNATURE) \
ID = env.findStaticMethod(CLASS, METHOD_NAME, METHOD_SIGNATURE); \
if (!ID) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, QtAndroid::methodErrorMsgFmt(), \
METHOD_NAME, METHOD_SIGNATURE); \
return JNI_FALSE; \
}
#define Q_JNI_GET_AND_CHECK_FIELD(ID, CLASS, FIELD_NAME, FIELD_SIGNATURE) \
ID = env.findField(CLASS, FIELD_NAME, FIELD_SIGNATURE); \
if (!ID) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, QtAndroid::fieldErrorMsgFmt(), \
FIELD_NAME, FIELD_SIGNATURE); \
return JNI_FALSE; \
}
#define Q_JNI_GET_AND_CHECK_STATIC_FIELD(ID, CLASS, FIELD_NAME, FIELD_SIGNATURE) \
ID = env.findStaticField(CLASS, FIELD_NAME, FIELD_SIGNATURE); \
if (!ID) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, QtAndroid::fieldErrorMsgFmt(), \
FIELD_NAME, FIELD_SIGNATURE); \
return JNI_FALSE; \
}
QT_END_NAMESPACE
#endif // QJNIHELPERS_H