@@ -732,10 +732,18 @@ class JObjectReference {
732
732
JObjectReference (JNIEnv* env, jobject object);
733
733
// Copy
734
734
JObjectReference (const JObjectReference& reference);
735
+ // Move
736
+ #ifdef FIREBASE_USE_MOVE_OPERATORS
737
+ JObjectReference (JObjectReference&& reference);
738
+ #endif // FIREBASE_USE_MOVE_OPERATORS
735
739
// Delete the reference to the java object.
736
740
~JObjectReference ();
737
741
// Copy this reference.
738
742
JObjectReference& operator =(const JObjectReference& reference);
743
+ // Move this reference.
744
+ #ifdef FIREBASE_USE_MOVE_OPERATORS
745
+ JObjectReference& operator =(JObjectReference&& reference);
746
+ #endif // FIREBASE_USE_MOVE_OPERATORS
739
747
740
748
// Add a global reference to the specified object, removing the reference
741
749
// to the object currently referenced by this class. If jobject_reference
@@ -745,10 +753,20 @@ class JObjectReference {
745
753
// Get a JNIEnv from the JavaVM associated with this class.
746
754
JNIEnv* GetJNIEnv () const ;
747
755
756
+ // Get the JavaVM associated with this class.
757
+ JavaVM* java_vm () const { return java_vm_; }
758
+
748
759
// Get the global reference to the Java object without incrementing the
749
760
// reference count.
750
761
jobject object () const { return object_; }
751
762
763
+ // Get a local reference to the object. The returned reference must be
764
+ // deleted after use with DeleteLocalRef().
765
+ jobject GetLocalRef () const ;
766
+
767
+ // Same as object()
768
+ jobject operator *() const { return object (); }
769
+
752
770
// Convert a local reference to a JObjectReference, deleting the local
753
771
// reference.
754
772
static JObjectReference FromLocalReference (JNIEnv* env,
@@ -762,10 +780,34 @@ class JObjectReference {
762
780
static JavaVM* GetJavaVM (JNIEnv* env);
763
781
764
782
private:
765
- JavaVM* jvm_ ;
783
+ JavaVM* java_vm_ ;
766
784
jobject object_;
767
785
};
768
786
787
+ // Creates an alias of util::JObjectReference named classname.
788
+ // This is useful when defining the implementation of a forward declared class
789
+ // using JObjectReference.
790
+ #define JOBJECT_REFERENCE (classname ) \
791
+ class classname : public firebase ::util::JObjectReference { \
792
+ public: \
793
+ explicit classname (JNIEnv *env) : \
794
+ firebase::util::JObjectReference(env) {} \
795
+ explicit classname (const firebase::util::JObjectReference& obj) : \
796
+ firebase::util::JObjectReference(obj) {} \
797
+ explicit classname (firebase::util::JObjectReference&& obj) : \
798
+ firebase::util::JObjectReference(obj) {} \
799
+ classname (JNIEnv *env, jobject obj) : \
800
+ util::JObjectReference (env, obj) {} \
801
+ classname& operator =(const util::JObjectReference& rhs) { \
802
+ util::JObjectReference::operator =(rhs); \
803
+ return *this ; \
804
+ } \
805
+ classname& operator =(util::JObjectReference&& rhs) { \
806
+ util::JObjectReference::operator =(rhs); \
807
+ return *this ; \
808
+ } \
809
+ }
810
+
769
811
// Holds a reference to a Java thread that will execute a C++ method.
770
812
//
771
813
// To support cancelation (i.e. using ReleaseExecuteCancelLock() and
0 commit comments