diff options
Diffstat (limited to 'src/corelib/kernel/qjnienvironment.h')
-rw-r--r-- | src/corelib/kernel/qjnienvironment.h | 85 |
1 files changed, 47 insertions, 38 deletions
diff --git a/src/corelib/kernel/qjnienvironment.h b/src/corelib/kernel/qjnienvironment.h index 16a6413d31..dda8dc0950 100644 --- a/src/corelib/kernel/qjnienvironment.h +++ b/src/corelib/kernel/qjnienvironment.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QJNI_ENVIRONMENT_H #define QJNI_ENVIRONMENT_H @@ -44,6 +8,7 @@ #if defined(Q_QDOC) || defined(Q_OS_ANDROID) #include <jni.h> +#include <QtCore/qjnitypes_impl.h> QT_BEGIN_NAMESPACE @@ -59,14 +24,56 @@ public: JNIEnv &operator*() const; JNIEnv *jniEnv() const; jclass findClass(const char *className); + template<typename Class> + jclass findClass() { return findClass(QtJniTypes::Traits<Class>::className().data()); } jmethodID findMethod(jclass clazz, const char *methodName, const char *signature); + template<typename ...Args> + jmethodID findMethod(jclass clazz, const char *methodName) { + constexpr auto signature = QtJniTypes::methodSignature<Args...>(); + return findMethod(clazz, methodName, signature.data()); + } jmethodID findStaticMethod(jclass clazz, const char *methodName, const char *signature); + template<typename ...Args> + jmethodID findStaticMethod(jclass clazz, const char *methodName) { + constexpr auto signature = QtJniTypes::methodSignature<Args...>(); + return findStaticMethod(clazz, methodName, signature.data()); + } jfieldID findField(jclass clazz, const char *fieldName, const char *signature); + template<typename T> + jfieldID findField(jclass clazz, const char *fieldName) { + constexpr auto signature = QtJniTypes::fieldSignature<T>(); + return findField(clazz, fieldName, signature.data()); + } jfieldID findStaticField(jclass clazz, const char *fieldName, const char *signature); + template<typename T> + jfieldID findStaticField(jclass clazz, const char *fieldName) { + constexpr auto signature = QtJniTypes::fieldSignature<T>(); + return findStaticField(clazz, fieldName, signature.data()); + } static JavaVM *javaVM(); bool registerNativeMethods(const char *className, const JNINativeMethod methods[], int size); bool registerNativeMethods(jclass clazz, const JNINativeMethod methods[], int size); + bool registerNativeMethods(const char *className, std::initializer_list<JNINativeMethod> methods) + { + return registerNativeMethods(className, std::data(methods), methods.size()); + } + + bool registerNativeMethods(jclass clazz, std::initializer_list<JNINativeMethod> methods) + { + return registerNativeMethods(clazz, std::data(methods), methods.size()); + } + + template<typename Class +#ifndef Q_QDOC + , std::enable_if_t<QtJniTypes::isObjectType<Class>(), bool> = true +#endif + > + bool registerNativeMethods(std::initializer_list<JNINativeMethod> methods) + { + return registerNativeMethods(QtJniTypes::Traits<Class>::className().data(), methods); + } + #if QT_DEPRECATED_SINCE(6, 2) // ### Qt 7: remove QT_DEPRECATED_VERSION_X_6_2("Use the overload with a const JNINativeMethod[] instead.") @@ -81,6 +88,8 @@ public: bool checkAndClearExceptions(OutputMode outputMode = OutputMode::Verbose); static bool checkAndClearExceptions(JNIEnv *env, OutputMode outputMode = OutputMode::Verbose); + static JNIEnv *getJniEnv(); + private: Q_DISABLE_COPY_MOVE(QJniEnvironment) QScopedPointer<QJniEnvironmentPrivate> d; |