diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-06-11 17:03:03 +0300 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-06-15 13:51:49 +0300 |
commit | 01d30e2d5331d0d15516ce3bf7559fcc19b69723 (patch) | |
tree | 7f5be8a9d0de1f0e14ded3e2f7fd69e79ef06b60 /src/corelib | |
parent | dab8f64b6d5d4241b678d0227355858071376496 (diff) |
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>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/kernel/qjnihelpers_p.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/corelib/kernel/qjnihelpers_p.h b/src/corelib/kernel/qjnihelpers_p.h index 4887bb0009..2860cef4c3 100644 --- a/src/corelib/kernel/qjnihelpers_p.h +++ b/src/corelib/kernel/qjnihelpers_p.h @@ -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 |