am 442a079e: Merge "Add swap operation to UniquePtr."

* commit '442a079ec17770e6b0fa912b0c1e26c2dc64af8a':
  Add swap operation to UniquePtr.
diff --git a/JNIHelp.cpp b/JNIHelp.cpp
index 0629a53..4b77680 100644
--- a/JNIHelp.cpp
+++ b/JNIHelp.cpp
@@ -330,6 +330,12 @@
     (*env)->SetIntField(e, fileDescriptor, fid, value);
 }
 
+jobject jniGetReferent(C_JNIEnv* env, jobject ref) {
+    JNIEnv* e = reinterpret_cast<JNIEnv*>(env);
+    static jmethodID get = e->GetMethodID(JniConstants::referenceClass, "get", "()Ljava/lang/Object;");
+    return (*env)->CallObjectMethod(e, ref, get);
+}
+
 /*
  * DO NOT USE THIS FUNCTION
  *
diff --git a/JniConstants.cpp b/JniConstants.cpp
index 6c3b9aa..9c2c24f 100644
--- a/JniConstants.cpp
+++ b/JniConstants.cpp
@@ -54,6 +54,7 @@
 jclass JniConstants::parsePositionClass;
 jclass JniConstants::patternSyntaxExceptionClass;
 jclass JniConstants::realToStringClass;
+jclass JniConstants::referenceClass;
 jclass JniConstants::shortClass;
 jclass JniConstants::socketClass;
 jclass JniConstants::socketImplClass;
@@ -116,6 +117,7 @@
     parsePositionClass = findClass(env, "java/text/ParsePosition");
     patternSyntaxExceptionClass = findClass(env, "java/util/regex/PatternSyntaxException");
     realToStringClass = findClass(env, "java/lang/RealToString");
+    referenceClass = findClass(env, "java/lang/ref/Reference");
     shortClass = findClass(env, "java/lang/Short");
     socketClass = findClass(env, "java/net/Socket");
     socketImplClass = findClass(env, "java/net/SocketImpl");
diff --git a/include/nativehelper/JNIHelp.h b/include/nativehelper/JNIHelp.h
index 35cdf2e..8a630fe 100644
--- a/include/nativehelper/JNIHelp.h
+++ b/include/nativehelper/JNIHelp.h
@@ -105,6 +105,11 @@
 void jniSetFileDescriptorOfFD(C_JNIEnv* env, jobject fileDescriptor, int value);
 
 /*
+ * Returns the reference from a java.lang.ref.Reference.
+ */
+jobject jniGetReferent(C_JNIEnv* env, jobject ref);
+
+/*
  * Log a message and an exception.
  * If exception is NULL, logs the current exception in the JNI environment.
  */
@@ -165,6 +170,10 @@
     jniSetFileDescriptorOfFD(&env->functions, fileDescriptor, value);
 }
 
+inline jobject jniGetReferent(JNIEnv* env, jobject ref) {
+    return jniGetReferent(&env->functions, ref);
+}
+
 inline void jniLogException(JNIEnv* env, int priority, const char* tag, jthrowable exception = NULL) {
     jniLogException(&env->functions, priority, tag, exception);
 }
diff --git a/include/nativehelper/JniConstants.h b/include/nativehelper/JniConstants.h
index f11ec9c..6b8731a 100644
--- a/include/nativehelper/JniConstants.h
+++ b/include/nativehelper/JniConstants.h
@@ -75,6 +75,7 @@
     static jclass parsePositionClass;
     static jclass patternSyntaxExceptionClass;
     static jclass realToStringClass;
+    static jclass referenceClass;
     static jclass shortClass;
     static jclass socketClass;
     static jclass socketImplClass;