diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-09-17 12:40:40 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-09-22 07:18:16 +0200 |
commit | e1a349983c93143211342d34c458d2bb06986971 (patch) | |
tree | ff36c488bbe4741f619bdd2005576221eb753ed5 /tests/auto/corelib/kernel/qjnitypes | |
parent | 0022b05a9a222912ed91f658c058dff6955d2de4 (diff) |
JNI: move signature/className template functions into a template class
Template functions don't permit partial specialization, e.g. we cannot
specialize typeSignature() to return an array signature for any
std::vector or QList type. We need to do that for better array support,
so move those functions as static members into a template class, which
then can be specialized.
Since submodules are both calling and specializing typeSignature and
className as template functions, keep and use those until the porting is
complete.
Change-Id: I74ec957fc41f78046cd9d0f803d8cc9d1e56672b
Reviewed-by: Petri Virkkunen <petri.virkkunen@qt.io>
Reviewed-by: Zoltan Gera <zoltan.gera@qt.io>
Reviewed-by: Tinja Paavoseppä <tinja.paavoseppa@qt.io>
Diffstat (limited to 'tests/auto/corelib/kernel/qjnitypes')
-rw-r--r-- | tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp b/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp index d7b7059bd3..b7685538f1 100644 --- a/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp +++ b/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp @@ -19,35 +19,45 @@ private slots: struct QtJavaWrapper {}; template<> -constexpr auto QtJniTypes::typeSignature<QtJavaWrapper>() +struct QtJniTypes::Traits<QtJavaWrapper> { - return QtJniTypes::CTString("Lorg/qtproject/qt/android/QtJavaWrapper;"); -} + static constexpr auto signature() + { + return QtJniTypes::CTString("Lorg/qtproject/qt/android/QtJavaWrapper;"); + } +}; template<> -constexpr auto QtJniTypes::typeSignature<QJniObject>() +struct QtJniTypes::Traits<QJniObject> { - return QtJniTypes::CTString("Ljava/lang/Object;"); -} + static constexpr auto signature() + { + return QtJniTypes::CTString("Ljava/lang/Object;"); + } +}; struct QtCustomJniObject : QJniObject {}; + template<> -constexpr auto QtJniTypes::typeSignature<QtCustomJniObject>() +struct QtJniTypes::Traits<QtCustomJniObject> { - return QtJniTypes::CTString("Lorg/qtproject/qt/android/QtCustomJniObject;"); -} + static constexpr auto signature() + { + return QtJniTypes::CTString("Lorg/qtproject/qt/android/QtCustomJniObject;"); + } +}; -static_assert(QtJniTypes::typeSignature<QtJavaWrapper>() == "Lorg/qtproject/qt/android/QtJavaWrapper;"); -static_assert(QtJniTypes::typeSignature<QtJavaWrapper>() != "Ljava/lang/Object;"); -static_assert(!(QtJniTypes::typeSignature<QtJavaWrapper>() == "X")); +static_assert(QtJniTypes::Traits<QtJavaWrapper>::signature() == "Lorg/qtproject/qt/android/QtJavaWrapper;"); +static_assert(QtJniTypes::Traits<QtJavaWrapper>::signature() != "Ljava/lang/Object;"); +static_assert(!(QtJniTypes::Traits<QtJavaWrapper>::signature() == "X")); Q_DECLARE_JNI_CLASS(JavaType, "org/qtproject/qt/JavaType"); -static_assert(QtJniTypes::typeSignature<QtJniTypes::JavaType>() == "Lorg/qtproject/qt/JavaType;"); +static_assert(QtJniTypes::Traits<QtJniTypes::JavaType>::signature() == "Lorg/qtproject/qt/JavaType;"); Q_DECLARE_JNI_TYPE(ArrayType, "[Lorg/qtproject/qt/ArrayType;") -static_assert(QtJniTypes::typeSignature<QtJniTypes::ArrayType>() == "[Lorg/qtproject/qt/ArrayType;"); +static_assert(QtJniTypes::Traits<QtJniTypes::ArrayType>::signature() == "[Lorg/qtproject/qt/ArrayType;"); Q_DECLARE_JNI_CLASS(QtTextToSpeech, "org/qtproject/qt/android/speech/QtTextToSpeech") -static_assert(QtJniTypes::className<QtJniTypes::QtTextToSpeech>() == "org/qtproject/qt/android/speech/QtTextToSpeech"); +static_assert(QtJniTypes::Traits<QtJniTypes::QtTextToSpeech>::className() == "org/qtproject/qt/android/speech/QtTextToSpeech"); static_assert(QtJniTypes::fieldSignature<jint>() == "I"); static_assert(QtJniTypes::fieldSignature<jint[]>() == "[I"); |