33#include < jni.h>
44
55#include " app/src/assert.h"
6- #include " app/src/util_android.h"
76#include " firestore/src/android/document_change_android.h"
87#include " firestore/src/android/document_snapshot_android.h"
98#include " firestore/src/android/metadata_changes_android.h"
109#include " firestore/src/android/query_android.h"
1110#include " firestore/src/android/snapshot_metadata_android.h"
12- #include " firestore/src/android/util_android.h"
1311#include " firestore/src/jni/env.h"
12+ #include " firestore/src/jni/loader.h"
1413
1514namespace firebase {
1615namespace firestore {
@@ -19,86 +18,56 @@ namespace {
1918using jni::Env;
2019using jni::List;
2120using jni::Local;
21+ using jni::Method;
2222using jni::Object;
2323
24- } // namespace
24+ constexpr char kClassName [] =
25+ PROGUARD_KEEP_CLASS " com/google/firebase/firestore/QuerySnapshot" ;
26+ Method<Object> kGetQuery (" getQuery" , " ()Lcom/google/firebase/firestore/Query;" );
27+ Method<SnapshotMetadataInternal> kGetMetadata (
28+ " getMetadata" , " ()Lcom/google/firebase/firestore/SnapshotMetadata;" );
29+ Method<List> kGetDocumentChanges (
30+ " getDocumentChanges" ,
31+ " (Lcom/google/firebase/firestore/MetadataChanges;)Ljava/util/List;" );
32+ Method<List> kGetDocuments (" getDocuments" , " ()Ljava/util/List;" );
33+ Method<size_t > kSize (" size" , " ()I" );
2534
26- // clang-format off
27- #define QUERY_SNAPSHOT_METHODS (X ) \
28- X (Query, " getQuery" , " ()Lcom/google/firebase/firestore/Query;" ), \
29- X (Metadata, " getMetadata" , \
30- " ()Lcom/google/firebase/firestore/SnapshotMetadata;" ), \
31- X (DocumentChanges, " getDocumentChanges" , \
32- " (Lcom/google/firebase/firestore/MetadataChanges;)Ljava/util/List;" ), \
33- X (Documents, " getDocuments" , " ()Ljava/util/List;" ), \
34- X (Size, " size" , " ()I" )
35- // clang-format on
35+ } // namespace
3636
37- METHOD_LOOKUP_DECLARATION (query_snapshot, QUERY_SNAPSHOT_METHODS)
38- METHOD_LOOKUP_DEFINITION (query_snapshot,
39- PROGUARD_KEEP_CLASS
40- " com/google/firebase/firestore/QuerySnapshot" ,
41- QUERY_SNAPSHOT_METHODS)
37+ void QuerySnapshotInternal::Initialize (jni::Loader& loader) {
38+ loader.LoadClass (kClassName , kGetQuery , kGetMetadata , kGetDocumentChanges ,
39+ kGetDocuments , kSize );
40+ }
4241
4342Query QuerySnapshotInternal::query () const {
44- JNIEnv* env = firestore_->app ()->GetJNIEnv ();
45- jobject query = env->CallObjectMethod (
46- obj_, query_snapshot::GetMethodId (query_snapshot::kQuery ));
47- QueryInternal* internal = new QueryInternal{firestore_, query};
48- env->DeleteLocalRef (query);
49-
50- CheckAndClearJniExceptions (env);
51- return Query{internal};
43+ Env env = GetEnv ();
44+ Local<Object> query = env.Call (obj_, kGetQuery );
45+ return firestore_->NewQuery (env, query);
5246}
5347
5448SnapshotMetadata QuerySnapshotInternal::metadata () const {
5549 Env env = GetEnv ();
56- auto java_metadata = env.Call <SnapshotMetadataInternal>(
57- obj_, query_snapshot::GetMethodId (query_snapshot::kMetadata ));
58- return java_metadata.ToPublic (env);
50+ return env.Call (obj_, kGetMetadata ).ToPublic (env);
5951}
6052
6153std::vector<DocumentChange> QuerySnapshotInternal::DocumentChanges (
6254 MetadataChanges metadata_changes) const {
6355 Env env = GetEnv ();
6456 auto java_metadata = MetadataChangesInternal::Create (env, metadata_changes);
6557
66- Local<List> change_list = env.Call <List>(
67- obj_, query_snapshot::GetMethodId (query_snapshot::kDocumentChanges ),
68- java_metadata);
58+ Local<List> change_list = env.Call (obj_, kGetDocumentChanges , java_metadata);
6959 return MakeVector<DocumentChange>(env, change_list);
7060}
7161
7262std::vector<DocumentSnapshot> QuerySnapshotInternal::documents () const {
7363 Env env = GetEnv ();
74- Local<List> document_list = env.Call <List>(
75- obj_, query_snapshot::GetMethodId (query_snapshot::kDocuments ));
64+ Local<List> document_list = env.Call (obj_, kGetDocuments );
7665 return MakeVector<DocumentSnapshot>(env, document_list);
7766}
7867
7968std::size_t QuerySnapshotInternal::size () const {
80- JNIEnv* env = firestore_->app ()->GetJNIEnv ();
81- jint result = env->CallIntMethod (
82- obj_, query_snapshot::GetMethodId (query_snapshot::kSize ));
83-
84- CheckAndClearJniExceptions (env);
85- return static_cast <std::size_t >(result);
86- }
87-
88- /* static */
89- bool QuerySnapshotInternal::Initialize (App* app) {
90- JNIEnv* env = app->GetJNIEnv ();
91- jobject activity = app->activity ();
92- bool result = query_snapshot::CacheMethodIds (env, activity);
93- util::CheckAndClearJniExceptions (env);
94- return result;
95- }
96-
97- /* static */
98- void QuerySnapshotInternal::Terminate (App* app) {
99- JNIEnv* env = app->GetJNIEnv ();
100- query_snapshot::ReleaseClass (env);
101- util::CheckAndClearJniExceptions (env);
69+ Env env = GetEnv ();
70+ return env.Call (obj_, kSize );
10271}
10372
10473} // namespace firestore
0 commit comments