summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2021-06-11 17:03:03 +0300
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2021-06-15 13:51:49 +0300
commit01d30e2d5331d0d15516ce3bf7559fcc19b69723 (patch)
tree7f5be8a9d0de1f0e14ded3e2f7fd69e79ef06b60 /src/corelib
parentdab8f64b6d5d4241b678d0227355858071376496 (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.h39
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