From 5b41046813d21d565904a6b37bef4b75268fc8f5 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Mon, 6 May 2024 13:13:02 +0200 Subject: [PATCH] JNI: Mark tech preview API as such Retrofit the QT_TECH_PREVIEW_API macro into the JNI classes and helper constructs that are not yet documented, and which can only become publicly documented once the full JNI type system with the type registration infrastructure is documented. We can remove the tagging in dev once we have documentation and are ready to move this functionality out of TP, presumably for Qt 6.8. Pick-to: 6.7 Change-Id: I235e57b8e57c2d04be72b4c842131d99a5f83d9e Reviewed-by: Assam Boudjelthia --- src/corelib/kernel/qjniarray.h | 6 +++--- src/corelib/kernel/qjnienvironment.h | 1 + src/corelib/kernel/qjniobject.h | 4 ++-- src/corelib/kernel/qjnitypes.h | 9 +++++++-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index 976b4e92e30..2ea82e39db7 100644 --- a/src/corelib/kernel/qjniarray.h +++ b/src/corelib/kernel/qjniarray.h @@ -18,7 +18,7 @@ QT_BEGIN_NAMESPACE template class QJniArray; template -struct QJniArrayIterator +struct QT_TECH_PREVIEW_API QJniArrayIterator { QJniArrayIterator() = default; @@ -86,7 +86,7 @@ private: {} }; -class QJniArrayBase +class QT_TECH_PREVIEW_API QJniArrayBase { // for SFINAE'ing out the fromContainer named constructor template struct CanConvertHelper : std::false_type {}; @@ -193,7 +193,7 @@ private: }; template -class QJniArray : public QJniArrayBase +class QT_TECH_PREVIEW_API QJniArray : public QJniArrayBase { friend struct QJniArrayIterator; public: diff --git a/src/corelib/kernel/qjnienvironment.h b/src/corelib/kernel/qjnienvironment.h index dda8dc0950c..09f7ec7948e 100644 --- a/src/corelib/kernel/qjnienvironment.h +++ b/src/corelib/kernel/qjnienvironment.h @@ -69,6 +69,7 @@ public: , std::enable_if_t(), bool> = true #endif > + QT_TECH_PREVIEW_API bool registerNativeMethods(std::initializer_list methods) { return registerNativeMethods(QtJniTypes::Traits::className().data(), methods); diff --git a/src/corelib/kernel/qjniobject.h b/src/corelib/kernel/qjniobject.h index 589f6489f70..707d1ae28a1 100644 --- a/src/corelib/kernel/qjniobject.h +++ b/src/corelib/kernel/qjniobject.h @@ -670,7 +670,7 @@ inline bool operator!=(const QJniObject &obj1, const QJniObject &obj2) } namespace QtJniTypes { -struct JObjectBase +struct QT_TECH_PREVIEW_API JObjectBase { operator QJniObject() const { return m_object; } @@ -695,7 +695,7 @@ protected: }; template -class JObject : public JObjectBase +class QT_TECH_PREVIEW_API JObject : public JObjectBase { public: using Class = Type; diff --git a/src/corelib/kernel/qjnitypes.h b/src/corelib/kernel/qjnitypes.h index 1eaae6312b8..e071a3f7844 100644 --- a/src/corelib/kernel/qjnitypes.h +++ b/src/corelib/kernel/qjnitypes.h @@ -11,6 +11,7 @@ QT_BEGIN_NAMESPACE +// QT_TECH_PREVIEW_API #define Q_DECLARE_JNI_TYPE_HELPER(Type) \ namespace QtJniTypes { \ struct Type : JObject \ @@ -19,7 +20,7 @@ struct Type : JObject \ }; \ } \ - +// QT_TECH_PREVIEW_API #define Q_DECLARE_JNI_TYPE(Type, Signature) \ Q_DECLARE_JNI_TYPE_HELPER(Type) \ template<> \ @@ -35,6 +36,7 @@ struct QtJniTypes::Traits { \ } \ }; \ +// QT_TECH_PREVIEW_API #define Q_DECLARE_JNI_CLASS(Type, Signature) \ Q_DECLARE_JNI_TYPE_HELPER(Type) \ template<> \ @@ -176,7 +178,7 @@ va_##Method(JNIEnv *env, jclass thiz, ...) }, argTuple); \ } \ - +// QT_TECH_PREVIEW_API #define Q_DECLARE_JNI_NATIVE_METHOD(...) \ QT_OVERLOADED_MACRO(QT_DECLARE_JNI_NATIVE_METHOD, __VA_ARGS__) \ @@ -194,8 +196,10 @@ static const JNINativeMethod Method##_method = { \ #define QT_DECLARE_JNI_NATIVE_METHOD_1(Method) \ QT_DECLARE_JNI_NATIVE_METHOD_2(Method, Method) \ +// QT_TECH_PREVIEW_API #define Q_JNI_NATIVE_METHOD(Method) QtJniMethods::Method##_method +// QT_TECH_PREVIEW_API #define Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(...) \ QT_OVERLOADED_MACRO(QT_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE, __VA_ARGS__) \ @@ -209,6 +213,7 @@ static const JNINativeMethod Method##_method = { \ #define QT_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE_1(Method) \ QT_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE_2(Method, Method) \ +// QT_TECH_PREVIEW_API #define Q_JNI_NATIVE_SCOPED_METHOD(Method, Scope) Scope::Method##_method QT_END_NAMESPACE