Skip to content

Commit 354e637

Browse files
wilhuffa-maurice
authored andcommitted
Add boxed primitive types to the JNI library
PiperOrigin-RevId: 334472082
1 parent be955c6 commit 354e637

File tree

10 files changed

+272
-2
lines changed

10 files changed

+272
-2
lines changed

firestore/src/android/firestore_android.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,17 @@
4040
#include "firestore/src/android/write_batch_android.h"
4141
#include "firestore/src/include/firebase/firestore.h"
4242
#include "firestore/src/jni/array_list.h"
43+
#include "firestore/src/jni/boolean.h"
4344
#include "firestore/src/jni/collection.h"
45+
#include "firestore/src/jni/double.h"
4446
#include "firestore/src/jni/env.h"
4547
#include "firestore/src/jni/hash_map.h"
48+
#include "firestore/src/jni/integer.h"
4649
#include "firestore/src/jni/iterator.h"
4750
#include "firestore/src/jni/jni.h"
4851
#include "firestore/src/jni/list.h"
4952
#include "firestore/src/jni/loader.h"
53+
#include "firestore/src/jni/long.h"
5054
#include "firestore/src/jni/map.h"
5155
#include "firestore/src/jni/set.h"
5256

@@ -180,11 +184,14 @@ bool FirestoreInternal::Initialize(App* app) {
180184
}
181185

182186
jni::ArrayList::Initialize(loader);
187+
jni::Boolean::Initialize(loader);
183188
jni::Collection::Initialize(loader);
184-
FieldPathConverter::Initialize(loader);
189+
jni::Double::Initialize(loader);
190+
jni::Integer::Initialize(loader);
185191
jni::Iterator::Initialize(loader);
186192
jni::HashMap::Initialize(loader);
187193
jni::List::Initialize(loader);
194+
jni::Long::Initialize(loader);
188195
jni::Map::Initialize(loader);
189196

190197
InitializeFirestore(loader);

firestore/src/jni/boolean.cc

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include "firestore/src/jni/boolean.h"
2+
3+
#include "app/src/util_android.h"
4+
#include "firestore/src/jni/env.h"
5+
#include "firestore/src/jni/loader.h"
6+
7+
namespace firebase {
8+
namespace firestore {
9+
namespace jni {
10+
namespace {
11+
12+
constexpr char kClassName[] = "java/lang/Boolean";
13+
Constructor<Boolean> kConstructor("(Z)V");
14+
Method<bool> kBooleanValue("booleanValue", "()Z");
15+
jclass g_clazz = nullptr;
16+
17+
} // namespace
18+
19+
void Boolean::Initialize(Loader& loader) {
20+
g_clazz = util::boolean_class::GetClass();
21+
loader.LoadFromExistingClass(kClassName, g_clazz, kConstructor,
22+
kBooleanValue);
23+
}
24+
25+
Class Boolean::GetClass() { return Class(g_clazz); }
26+
27+
Local<Boolean> Boolean::Create(Env& env, bool value) {
28+
return env.New(kConstructor, value);
29+
}
30+
31+
bool Boolean::BooleanValue(Env& env) const {
32+
return env.Call(*this, kBooleanValue);
33+
}
34+
35+
} // namespace jni
36+
} // namespace firestore
37+
} // namespace firebase

firestore/src/jni/boolean.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_BOOLEAN_H_
2+
#define FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_BOOLEAN_H_
3+
4+
#include "firestore/src/jni/jni_fwd.h"
5+
#include "firestore/src/jni/object.h"
6+
7+
namespace firebase {
8+
namespace firestore {
9+
namespace jni {
10+
11+
/** A C++ proxy for a Java `Boolean`. */
12+
class Boolean : public Object {
13+
public:
14+
using Object::Object;
15+
16+
static void Initialize(Loader& loader);
17+
18+
static Class GetClass();
19+
20+
static Local<Boolean> Create(Env& env, bool value);
21+
22+
bool BooleanValue(Env& env) const;
23+
};
24+
25+
} // namespace jni
26+
} // namespace firestore
27+
} // namespace firebase
28+
29+
#endif // FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_BOOLEAN_H_

firestore/src/jni/double.cc

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include "firestore/src/jni/double.h"
2+
3+
#include "app/src/util_android.h"
4+
#include "firestore/src/jni/env.h"
5+
#include "firestore/src/jni/loader.h"
6+
7+
namespace firebase {
8+
namespace firestore {
9+
namespace jni {
10+
namespace {
11+
12+
constexpr char kClassName[] = "java/lang/Double";
13+
Constructor<Double> kConstructor("(D)V");
14+
Method<double> kDoubleValue("doubleValue", "()D");
15+
jclass g_clazz = nullptr;
16+
17+
} // namespace
18+
19+
void Double::Initialize(Loader& loader) {
20+
g_clazz = util::double_class::GetClass();
21+
loader.LoadFromExistingClass(kClassName, g_clazz, kConstructor, kDoubleValue);
22+
}
23+
24+
Class Double::GetClass() { return Class(g_clazz); }
25+
26+
Local<Double> Double::Create(Env& env, double value) {
27+
return env.New(kConstructor, value);
28+
}
29+
30+
double Double::DoubleValue(Env& env) const {
31+
return env.Call(*this, kDoubleValue);
32+
}
33+
34+
} // namespace jni
35+
} // namespace firestore
36+
} // namespace firebase

firestore/src/jni/double.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_DOUBLE_H_
2+
#define FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_DOUBLE_H_
3+
4+
#include "firestore/src/jni/jni_fwd.h"
5+
#include "firestore/src/jni/object.h"
6+
7+
namespace firebase {
8+
namespace firestore {
9+
namespace jni {
10+
11+
/** A C++ proxy for a Java `Double`. */
12+
class Double : public Object {
13+
public:
14+
using Object::Object;
15+
16+
static void Initialize(Loader& loader);
17+
18+
static Class GetClass();
19+
20+
static Local<Double> Create(Env& env, double value);
21+
22+
double DoubleValue(Env& env) const;
23+
};
24+
25+
} // namespace jni
26+
} // namespace firestore
27+
} // namespace firebase
28+
29+
#endif // FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_DOUBLE_H_

firestore/src/jni/integer.cc

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include "firestore/src/jni/integer.h"
2+
3+
#include "app/src/util_android.h"
4+
#include "firestore/src/jni/env.h"
5+
#include "firestore/src/jni/loader.h"
6+
7+
namespace firebase {
8+
namespace firestore {
9+
namespace jni {
10+
namespace {
11+
12+
constexpr char kClassName[] = "java/lang/Integer";
13+
Constructor<Integer> kConstructor("(I)V");
14+
Method<int32_t> kIntValue("intValue", "()I");
15+
jclass g_clazz = nullptr;
16+
17+
} // namespace
18+
19+
void Integer::Initialize(Loader& loader) {
20+
g_clazz = util::integer_class::GetClass();
21+
loader.LoadFromExistingClass(kClassName, g_clazz, kConstructor, kIntValue);
22+
}
23+
24+
Class Integer::GetClass() { return Class(g_clazz); }
25+
26+
Local<Integer> Integer::Create(Env& env, int32_t value) {
27+
return env.New(kConstructor, value);
28+
}
29+
30+
int32_t Integer::IntValue(Env& env) const { return env.Call(*this, kIntValue); }
31+
32+
} // namespace jni
33+
} // namespace firestore
34+
} // namespace firebase

firestore/src/jni/integer.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_INTEGER_H_
2+
#define FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_INTEGER_H_
3+
4+
#include "firestore/src/jni/jni_fwd.h"
5+
#include "firestore/src/jni/object.h"
6+
7+
namespace firebase {
8+
namespace firestore {
9+
namespace jni {
10+
11+
/** A C++ proxy for a Java `Integer`. */
12+
class Integer : public Object {
13+
public:
14+
using Object::Object;
15+
16+
static void Initialize(Loader& loader);
17+
18+
static Class GetClass();
19+
20+
static Local<Integer> Create(Env& env, int32_t value);
21+
22+
int32_t IntValue(Env& env) const;
23+
};
24+
25+
} // namespace jni
26+
} // namespace firestore
27+
} // namespace firebase
28+
29+
#endif // FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_INTEGER_H_

firestore/src/jni/jni_fwd.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,13 @@ class StaticField;
4646
template <typename T>
4747
class StaticMethod;
4848

49-
// Collections
49+
// Other elements of java.lang
50+
class Boolean;
51+
class Double;
52+
class Integer;
53+
class Long;
54+
55+
// Collections from java.util
5056
class ArrayList;
5157
class Collection;
5258
class Iterator;

firestore/src/jni/long.cc

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include "firestore/src/jni/long.h"
2+
3+
#include "app/src/util_android.h"
4+
#include "firestore/src/jni/env.h"
5+
#include "firestore/src/jni/loader.h"
6+
7+
namespace firebase {
8+
namespace firestore {
9+
namespace jni {
10+
namespace {
11+
12+
constexpr char kClassName[] = "java/lang/Long";
13+
Constructor<Long> kConstructor("(J)V");
14+
Method<int64_t> kLongValue("longValue", "()J");
15+
jclass g_clazz = nullptr;
16+
17+
} // namespace
18+
19+
void Long::Initialize(Loader& loader) {
20+
g_clazz = util::long_class::GetClass();
21+
loader.LoadFromExistingClass(kClassName, g_clazz, kConstructor, kLongValue);
22+
}
23+
24+
Class Long::GetClass() { return Class(g_clazz); }
25+
26+
Local<Long> Long::Create(Env& env, int64_t value) {
27+
return env.New(kConstructor, value);
28+
}
29+
30+
int64_t Long::LongValue(Env& env) const { return env.Call(*this, kLongValue); }
31+
32+
} // namespace jni
33+
} // namespace firestore
34+
} // namespace firebase

firestore/src/jni/long.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_LONG_H_
2+
#define FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_LONG_H_
3+
4+
#include "firestore/src/jni/jni_fwd.h"
5+
#include "firestore/src/jni/object.h"
6+
7+
namespace firebase {
8+
namespace firestore {
9+
namespace jni {
10+
11+
/** A C++ proxy for a Java `Long`. */
12+
class Long : public Object {
13+
public:
14+
using Object::Object;
15+
16+
static void Initialize(Loader& loader);
17+
18+
static Class GetClass();
19+
20+
static Local<Long> Create(Env& env, int64_t value);
21+
22+
int64_t LongValue(Env& env) const;
23+
};
24+
25+
} // namespace jni
26+
} // namespace firestore
27+
} // namespace firebase
28+
29+
#endif // FIREBASE_FIRESTORE_CLIENT_CPP_SRC_JNI_LONG_H_

0 commit comments

Comments
 (0)