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