• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2024 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef _JNI_ZERO_STUB_CONVERSIONS_H_
6 #define _JNI_ZERO_STUB_CONVERSIONS_H_
7 
8 #include <cstdint>
9 #include <map>
10 #include <optional>
11 #include <string>
12 #include <vector>
13 
14 #include "third_party/jni_zero/jni_zero.h"
15 #include "third_party/jni_zero/test/sample_for_tests.h"
16 
17 // This file contains empty conversion functions needed by the compile tests.
18 
19 #define EMPTY_TYPE_CONVERSIONS(T)                                          \
20   template <>                                                              \
21   T FromJniType<T>(JNIEnv * env, const JavaRef<jobject>& j_object) {       \
22     return {};                                                             \
23   }                                                                        \
24   template <>                                                              \
25   ScopedJavaLocalRef<jobject> ToJniType<T>(JNIEnv * env, const T& input) { \
26     return nullptr;                                                        \
27   }
28 
29 #define EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(T)             \
30   template <>                                            \
31   std::vector<T> FromJniArray<std::vector<T>>(           \
32       JNIEnv * env, const JavaRef<jobject>& j_object) {  \
33     return {};                                           \
34   }                                                      \
35   template <>                                            \
36   ScopedJavaLocalRef<jarray> ToJniArray<std::vector<T>>( \
37       JNIEnv * env, const std::vector<T>& vec) {         \
38     return nullptr;                                      \
39   }
40 
41 #define EMPTY_OBJECT_ARRAY_CONVERSIONS(T)                      \
42   template <>                                                  \
43   std::vector<T> FromJniArray<std::vector<T>>(                 \
44       JNIEnv * env, const JavaRef<jobject>& j_object) {        \
45     return {};                                                 \
46   }                                                            \
47   template <>                                                  \
48   ScopedJavaLocalRef<jobjectArray> ToJniArray<std::vector<T>>( \
49       JNIEnv * env, const std::vector<T>& vec, jclass clazz) { \
50     return nullptr;                                            \
51   }
52 
53 #define EMPTY_LIST_CONVERSIONS(T)                        \
54   template <>                                            \
55   ScopedJavaLocalRef<jobject> ToJniList<std::vector<T>>( \
56       JNIEnv * env, const std::vector<T>& vec) {         \
57     return nullptr;                                      \
58   }
59 
60 #define EMPTY_COLLECTION_CONVERSIONS(T)                 \
61   template <>                                           \
62   std::vector<T> FromJniCollection<std::vector<T>>(     \
63       JNIEnv * env, const JavaRef<jobject>& j_object) { \
64     return {};                                          \
65   }
66 
67 namespace jni_zero {
68 
69 // These conversion functions are normally provided by the embedding app.
70 EMPTY_TYPE_CONVERSIONS(tests::CPPClass)
EMPTY_TYPE_CONVERSIONS(std::string)71 EMPTY_TYPE_CONVERSIONS(std::string)
72 EMPTY_TYPE_CONVERSIONS(std::u16string)
73 EMPTY_TYPE_CONVERSIONS(std::optional<std::string>)
74 template <>
75 ScopedJavaLocalRef<jobject> ToJniType<const char>(JNIEnv* env,
76                                                   const char* input) {
77   return {};
78 }
79 
80 template <>
81 tests::CPPClass* FromJniType<tests::CPPClass*>(JNIEnv* env,
82                                                const JavaRef<jobject>& j_obj) {
83   return nullptr;
84 }
85 
86 // If concepts are unavailable, we need these stubs to replace
87 // default_conversions.h/cc
88 #ifndef JNI_ZERO_ENABLE_TYPE_CONVERSIONS
89 EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(int64_t)
EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(int32_t)90 EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(int32_t)
91 EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(int16_t)
92 EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(uint16_t)
93 EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(uint8_t)
94 EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(float)
95 EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(double)
96 EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(bool)
97 
98 EMPTY_OBJECT_ARRAY_CONVERSIONS(const char*)
99 EMPTY_OBJECT_ARRAY_CONVERSIONS(std::string)
100 EMPTY_OBJECT_ARRAY_CONVERSIONS(ScopedJavaLocalRef<jobject>)
101 EMPTY_OBJECT_ARRAY_CONVERSIONS(tests::CPPClass)
102 
103 EMPTY_LIST_CONVERSIONS(std::string)
104 EMPTY_LIST_CONVERSIONS(ScopedJavaLocalRef<jobject>)
105 
106 EMPTY_COLLECTION_CONVERSIONS(std::string)
107 EMPTY_COLLECTION_CONVERSIONS(ScopedJavaLocalRef<jobject>)
108 
109 template <>
110 std::map<std::string, std::string>
111 FromJniType<std::map<std::string, std::string>>(JNIEnv* env,
112                                                 const JavaRef<jobject>& input) {
113   return {};
114 }
115 template <>
116 ScopedJavaLocalRef<jobject> ToJniType<std::map<std::string, std::string>>(
117     JNIEnv* env,
118     const std::map<std::string, std::string>& input) {
119   return {};
120 }
121 
122 template <>
123 inline ByteArrayView FromJniArray<ByteArrayView>(
124     JNIEnv* env,
125     const JavaRef<jobject>& j_object) {
126   return ByteArrayView(env, nullptr);
127 }
128 #endif  // #ifndef JNI_ZERO_ENABLE_TYPE_CONVERSIONS
129 
130 }  // namespace jni_zero
131 #endif
132