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:

committed by
Chromium LUCI CQ

parent
a508a345eb
commit
f46caa514f
base
BUILD.gn
android
command_line_android.ccfeature_map.ccfeatures_jni.ccfield_trial_list.ccimportant_file_writer_android.ccjava_exception_reporter.ccjava_handler_thread.ccjni_conversions.ccjni_string.hnative_uma_recorder.ccpath_service_android.ccstatistics_recorder_android.cc
java
src
org
chromium
base
task_scheduler
token_android.cctoken_android.hunguessable_token_android.ccunguessable_token_android.hfiles
chrome/browser
notifications
scheduler
optimization_guide
android
profiles
safety_hub
components
android_autofill
download
internal
paint_preview
player
prefs
query_tiles
android
segmentation_platform
supervised_user
core
content/browser
third_party/jni_zero
BUILD.gn
codegen
default_conversions.ccdefault_conversions.hjni_generator.pyjni_zero.hjni_zero_internal.htest
BUILD.gn
golden
testBidirectionalClass-SampleForTests_jni.h.goldentestEndToEndProxyHashed-SampleForAnnotationProcessor_jni.h.goldentestPackagePrefixGenerator-SampleForTests_jni.h.goldentestPerFileNatives-SampleForAnnotationProcessor_jni.h.goldentestUniqueAnnotations-SampleUniqueAnnotations_jni.h.golden
sample_for_tests.ccstub_conversions.hui/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_
|
||||
|
Reference in New Issue
Block a user