0

JNI Zero: Require @JniType conversions functions to appear in .h files

This has the following advantages:
 * Missing conversions will be a compile-time error rather than
   link-time.
 * Allows us to define a default implementations that maps a pointer
   type to its dereferenced type.
 * Allows us to define a default implementations for std::optional<T>.

Bug: 334905258
Change-Id: I092261e163c88c4e3a235e7f74059c5630cb5ea2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5559723
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Mohamed Heikal <mheikal@chromium.org>
Owners-Override: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1305161}
This commit is contained in:
Andrew Grieve
2024-05-23 16:59:36 +00:00
committed by Chromium LUCI CQ
parent a508a345eb
commit f46caa514f
61 changed files with 669 additions and 729 deletions
base
chrome/browser
components
content/browser
third_party/jni_zero
ui/gfx/android
url/android

@ -6,25 +6,17 @@
#include <string>
#include "components/prefs/android/jni_headers/PrefService_jni.h"
#include "base/android/jni_string.h"
#include "components/prefs/pref_service.h"
#include "components/prefs/prefs_export.h"
using base::android::JavaParamRef;
using base::android::JavaRef;
using base::android::ScopedJavaLocalRef;
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "components/prefs/android/jni_headers/PrefService_jni.h"
using jni_zero::AttachCurrentThread;
namespace jni_zero {
template <>
COMPONENTS_PREFS_EXPORT PrefService* FromJniType<PrefService*>(
JNIEnv* env,
const JavaRef<jobject>& obj) {
return PrefServiceAndroid::FromPrefServiceAndroid(obj);
}
} // namespace jni_zero
using jni_zero::JavaParamRef;
using jni_zero::JavaRef;
using jni_zero::ScopedJavaLocalRef;
PrefServiceAndroid::PrefServiceAndroid(PrefService* pref_service)
: pref_service_(pref_service) {}

@ -5,10 +5,7 @@
#ifndef COMPONENTS_PREFS_ANDROID_PREF_SERVICE_ANDROID_H_
#define COMPONENTS_PREFS_ANDROID_PREF_SERVICE_ANDROID_H_
#include <jni.h>
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "base/android/jni_android.h"
#include "base/memory/raw_ptr.h"
#include "components/prefs/prefs_export.h"
@ -67,4 +64,12 @@ class COMPONENTS_PREFS_EXPORT PrefServiceAndroid {
base::android::ScopedJavaGlobalRef<jobject> java_ref_;
};
namespace jni_zero {
template <>
inline PrefService* FromJniType<PrefService*>(JNIEnv* env,
const JavaRef<jobject>& obj) {
return PrefServiceAndroid::FromPrefServiceAndroid(obj);
}
} // namespace jni_zero
#endif // COMPONENTS_PREFS_ANDROID_PREF_SERVICE_ANDROID_H_