diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2022-10-07 20:56:53 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2022-10-10 20:19:30 +0200 |
commit | 2ef130a41d26b1b75fe402c398900a05ae381a6a (patch) | |
tree | a3030d31bf299e8a7b3ba606e2e62aa25a9ede3f /tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp | |
parent | ad736e9150af6ac621393529a72c8e67e05c2d5e (diff) |
JNI: add generic support for array-types
The typeSignature for a type T[] is always "[" + typeSignature<t>, so we
can just implicitly support arrays of any known type. To prevent support
for multi-dimensional arrays, make sure that the underlying type is not
also an array.
By adding a QJniTypes::isArrayType in addition (that is true for any
type with a signature starting with '['), methods like
QJniObject::callMethod could then return a special QJniArray type that
provides array-specific functionality.
As a drive-by, and since all lines need to be touched to add braces,
replace std::is_same<>::value with std::is_same_v.
Change-Id: Iccadf03cfceb8544381a8f635bb54baeddf46c99
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp')
-rw-r--r-- | tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp b/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp index 395028b8cb..093c387dcc 100644 --- a/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp +++ b/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp @@ -52,14 +52,17 @@ Q_DECLARE_JNI_CLASS(QtTextToSpeech, "org/qtproject/qt/android/speech/QtTextToSpe static_assert(QtJniTypes::className<QtJniTypes::QtTextToSpeech>() == "org/qtproject/qt/android/speech/QtTextToSpeech"); static_assert(QtJniTypes::fieldSignature<jint>() == "I"); +static_assert(QtJniTypes::fieldSignature<jint[]>() == "[I"); static_assert(QtJniTypes::fieldSignature<jint>() != "X"); static_assert(QtJniTypes::fieldSignature<jint>() != "Ljava/lang/Object;"); static_assert(QtJniTypes::fieldSignature<jlong>() == "J"); static_assert(QtJniTypes::fieldSignature<jstring>() == "Ljava/lang/String;"); static_assert(QtJniTypes::fieldSignature<jobject>() == "Ljava/lang/Object;"); +static_assert(QtJniTypes::fieldSignature<jobject[]>() == "[Ljava/lang/Object;"); static_assert(QtJniTypes::fieldSignature<jobjectArray>() == "[Ljava/lang/Object;"); static_assert(QtJniTypes::fieldSignature<QJniObject>() == "Ljava/lang/Object;"); static_assert(QtJniTypes::fieldSignature<QtJavaWrapper>() == "Lorg/qtproject/qt/android/QtJavaWrapper;"); +static_assert(QtJniTypes::fieldSignature<QtJavaWrapper[]>() == "[Lorg/qtproject/qt/android/QtJavaWrapper;"); static_assert(QtJniTypes::fieldSignature<QtCustomJniObject>() == "Lorg/qtproject/qt/android/QtCustomJniObject;"); static_assert(QtJniTypes::methodSignature<void>() == "()V"); @@ -82,6 +85,12 @@ static_assert(QtJniTypes::isObjectType<jobject>()); static_assert(QtJniTypes::isObjectType<jobjectArray>()); static_assert(QtJniTypes::isObjectType<QtCustomJniObject>()); +static_assert(!QtJniTypes::isArrayType<jint>()); +static_assert(QtJniTypes::isArrayType<jint[]>()); +static_assert(QtJniTypes::isArrayType<jobject[]>()); +static_assert(QtJniTypes::isArrayType<jobjectArray>()); +static_assert(QtJniTypes::isArrayType<QtJavaWrapper[]>()); + static_assert(QtJniTypes::String("ABCDE").startsWith("ABC")); static_assert(QtJniTypes::String("ABCDE").startsWith("A")); static_assert(QtJniTypes::String("ABCDE").startsWith("ABCDE")); |