82
83
84
85
86
87
88 template <
typename T, ValidInterfaceType<T> =
true>
91 QMutexLocker lock(&m_registerMutex);
92 return m_register.value(QString(QtJniTypes::Traits<T>::className().data()));
101
102
103
104
105
106
107
108 template <
typename Interface,
typename Ret =
void,
typename... Args,
109 ValidInterfaceType<Interface> =
true>
112 if (
const auto obj = getInterface<Interface>(); obj.isValid()) {
113 return obj.
template callMethod<Ret, Args...>(func, std::forward<Args>(args)...);
115 qWarning() <<
"No interface with className"
116 << QtJniTypes::Traits<Interface>::className() <<
"has been registered.";
119 if constexpr (IsObjectType<Ret>::value)
120 return Ret(QJniObject());
121 if constexpr (!
std::is_same_v<Ret,
void>)
126 QMutex m_registerMutex;
127 QMap<QString, QJniObject> m_register;
129 static jboolean isNull(JNIEnv *, jclass);
132 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(registerBackend)
134 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(unregisterBackend)